3520|2

25

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

串口通信中的问题(接收数据不对) [复制链接]

我在用串口通信的时候,
我想让他实现的是:在输入口中输入abck+12,在回显中显示+12。
我的思路是:在串口中断中将输入的字符赋值到数组中去,当检测到数组中有'k'这个字符的时候,再次将检测的字符赋值到一个新的数组中去,最后在主函数中让他显示新数组中的字符。
现在的现象是:会显得字符为kkk(三个字符k)。
求大神帮我看看代码。
         
#include
#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;
           }   
}

IMG20170411194124.jpg (5.34 MB, 下载次数: 2)

IMG20170411194124.jpg
此帖出自51单片机论坛

最新回复

显然是读取同一个数据读了三次,你的思路也可以再优化一下,接到到K以前的数据直接丢弃就行了,从K以后开始存到一个数组里面不是更省程序空间嘛,  详情 回复 发表于 2017-4-11 23:41
点赞 关注
 

回复
举报

6040

帖子

197

TA的资源

版主

沙发
 
for(t=0;t<3;t++)
                  {a[t]=SBUF; }
没一次中断,SBUF只能读取一次,而你在循环里面读了三次,显然是不可取的。你心里一定要熟悉中断所遵循的规则,一次中断读取一个数据,要读下一个数据,就要等到下次中断的来临。当然你也可以在这里循环判断接收标志位,不过这是不可取的。
此帖出自51单片机论坛
 
 
 

回复

2774

帖子

8

TA的资源

版主

板凳
 
显然是读取同一个数据读了三次,你的思路也可以再优化一下,接到到K以前的数据直接丢弃就行了,从K以后开始存到一个数组里面不是更省程序空间嘛,
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表