串口通信中的问题(接收数据不对)

2019-03-24 17:18发布

我在用串口通信的时候,
我想让他实现的是:在输入口中输入abck+12,在回显中显示+12。
我的思路是:在串口中断中将输入的字符赋值到数组中去,当检测到数组中有'k'这个字符的时候,再次将检测的字符赋值到一个新的数组中去,最后在主函数中让他显示新数组中的字符。
现在的现象是:会显得字符为kkk(三个字符k)。
求大神帮我看看代码。
         
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit led1=P1^0;
unsigned char flag,i=0,j=0,t;
uchar table[10];                 
uchar a[3];                  
void init()
{
   TMOD=0x20;
   TH1=0xFD;
   TL1=0xFD;
   TR1=1;
   REN=1;
   SM0=0;
   SM1=1;
   EA=1;
   ES=1;
   TI=0;
   RI=0;
  }
void main()
{
   init();
   while(1)
   {                                  
                                                                            
          if(flag==1)
       {   
                ES=0;
               for(j=0;j<3;j++)
                        {
                          SBUF=a[j];
                           while(!TI);          
                          TI=0;      
                        }          
                         ES=1;
                         flag=0;
             }

        }

}
void ser()interrupt 4
{  
      RI=0;
      table[i]=SBUF;                  
          i++;
          
           if(table[i-1]=='k')
           {
              for(t=0;t<3;t++)
                  {a[t]=SBUF; }
              flag=1;
           }   
}

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
lcofjp
1楼-- · 2019-03-24 23:18
 精彩回答 2  元偷偷看……
strong161
2楼-- · 2019-03-25 00:16
显然是读取同一个数据读了三次,你的思路也可以再优化一下,接到到K以前的数据直接丢弃就行了,从K以后开始存到一个数组里面不是更省程序空间嘛,

一周热门 更多>