上位机发送字符串,单片机接收无法识别,新手入门求助...

2020-02-01 16:26发布

  1. #include <at89x51.h>
  2. #define kai 0;
  3. #define guan 1;
  4. unsigned char table[2];
  5. unsigned char flag;
  6. unsigned char a;//a用来存放串口接收到的数据
  7. unsigned char b;//b用来存放串口接收到的数据
  8. sbit a0=P2^0;
  9. sbit a1=P2^1;  


  10. main()
  11. {

  12.         TMOD=0x20;//定时器1使用初值自动重装方式,方式2
  13.         TH1=0xfd;
  14.         TL1=0xfd;//9600波特率初值
  15.         TR1=1;//允许定时器计数
  16.         SM0=0;//方式1设置
  17.         SM1=1;
  18.         REN=1; //允许串口接收
  19.         EA=1;  //开总中断
  20.         ES=1;  //开串口中断

  21.         while(1)
  22.         {
  23. a=table[0];
  24. b=table[1];
  25. if(flag==1){
  26.            if(a==49&&b==49)
  27.            {
  28.                             a0=kai;
  29.                                 SBUF=1;
  30.                                 flag=0;
  31.                                
  32.                                  }
  33.            else if(a==49&&b==48)
  34.            {
  35.                             a1=kai;
  36.                                 SBUF=2;
  37.                                 flag=0;
  38.                                  }
  39.            else ;
  40.   }          
  41. }
  42. }


  43. void serial () interrupt 4
  44. {
  45.    unsigned char i;
  46.    if(RI)
  47.    {
  48.     RI=0;
  49.            for(i=0;i<2;i++)
  50.     {
  51.            while(!RI);
  52.            table[i]=SBUF;
  53.                    flag=1;
  54.             
  55.     }
  56.    }   
  57.            if(TI)
  58.         {
  59.                 TI=0;
  60.         }
  61. }
复制代码以上就是程序啦。现在遇到这么一个问题。上位机发送字符11。进入if(a==49&&b==49)。发送10 有时候进入这个,有时候进入if(a==49&&b==48)。发送1有时候也会进入if(a==49&&b==49)。反正就是很乱。如果把flag==1去掉。又正常。这个是为什么。我觉得问题应该出在中断上,我刚学中断,一直没搞懂,现在还是没搞懂,求助。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
51757517@qq.com
1楼-- · 2020-02-02 14:23
 精彩回答 2  元偷偷看……
51757517@qq.com
2楼-- · 2020-02-02 16:13
我用上位机发16进制。A55A0101 进不了循环。 怪事

一周热门 更多>