[疑难问答] MA801串口问题

[复制链接]
340|4
 楼主 | 2019-1-8 17:37 | 显示全部楼层 |阅读模式
有两个问题想请教。
一个是发送数据:在中断里清零发送中断位,就会出现我发多个字节,在串口助手上只能收到最后一个字节。后来我改为在不用中断在程序里等待发送中断位TI变为1时清零中断位,就不会出现之前的情况,但是差不多超过六七个字节程序就会卡死没有数据,不清楚原因是什么。
还有一个问题:接收到特定数据后会返回BB _ _ CC  但是用串口接收,刚开始几次就只能收到BB 00 CC  后来改为BB FF CC  又只能收到 BB EE CC,,。
还请各位可以帮帮忙
 楼主 | 2019-1-8 17:46 | 显示全部楼层
#include"main.h"
unsigned int ceshi=0,shou=0,fa=0,ttt=0;

void delay_s(unsigned int d);
void fanhui (int wei);

void main()
{
//        unsigned int i,add_pint,add_pint1,refresh_count;//////j,k,l,p,
        unsigned int i,vcd=0;
        delay_s(2000);

        SM0=0;
        SM1=1;
        SM2=0;
        REN=1;
        PCON=0x00;            //电源波特率控制寄存器
        TMOD=0x20;            //定时器1模式2
        TCON=0x00;
        AUXR=0x00;           //辅助寄存器
        TH1=0xFD;
        TL1=0xFD;
        ET1=1;
        TR1=1;
        IP=0x10;          //中断优先级
        IPH=0x10;         //中断优先级
        TI=0;
        RI=0;

       


        mot=1;

//        for(i=0;i<126;i++)data_in_buf[i]=0x30;

        while(1)
        {
                EA=1;
                ES=1;
                       
                if ((data_in_buf[0]==0xee) && (data_in_buf[2]==0x03) && (data_in_buf[byte_count]==0xcc))
                {
                        if (data_in_buf[1]==(byte_count-2))
                        {
                                //这里可以忽略
                        }
                        else
                        {
                                r_succ(0xff);
                  }
                }
                else
                {
                        r_succ(0x06);
                }
       
        }
}




/********串口中断程序**********/

void serial() interrupt 4 using 1          //  串口中断子程序
{

       
        if(RI)
        {
                RI=0;
                if (SBUF==0xee)           //  
                {
                                byte_count=0;
                }       
                data_in_buf[byte_count]=SBUF;         //  
                ++byte_count;
       
                shou=SBUF;

                ceshi=ceshi+4;
         }
         else if(TI)
         {

                fa += 1;
         }
         else
         {
                ttt=ttt+1;
         }
}


void delay_s(unsigned int d)
{
        unsigned int i=0,j=0,c=100;
        for(i=0;i<d;i++)
                for(j=0;j<c;j++);
}



void r_succ(unsigned int d)       //  
{
               
               
          SBUF=0xbb;                  //  d
          while (TI==0);                          //  
          TI=0;                                                  //  注

          SBUF=d;                                          //  CMD 0x01,0x02,0x03,0x05,0x06
          while (TI==0);
          TI=0;

          SBUF=0xcc;                                  //  注
          while (TI==0);
          TI=0;
}
 楼主 | 2019-1-9 14:26 | 显示全部楼层
串口发送会乱,,比如发CE 55 AA    会收到CA E5 之类的   但是如果延时到差不多一秒以后 就会正常。
希望有博学多识的人才看到可以帮想我,,谢谢。
| 2019-1-15 10:00 | 显示全部楼层
1,查看波特率是不是一致
2,串口中断的优先级是不是有其它中断打断,将串口优先级设置成最高级试试
| 2019-1-15 13:18 | 显示全部楼层
主频是多少?可以使用示波器看看串口的波形是否正确!
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

快速回复 返回顶部 返回列表