打印
[疑难问答]

关于串口接收字符串的问题

[复制链接]
590|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
_gege|  楼主 | 2016-8-17 20:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当通过串口向单片机发送不确定长度的字符串时,如何校验开始位和结束位,并且最终判断所接收到的字符串的长度?
比如: 开始位用2位”AE“来表示,结束位用2位”BF“来表示, 当向单片机发送如”AE...BF"类型的字符串时, 单片机如何将这一字符串保存到一个预设的数组中,并且正确判断这个字符串的长度?

哪位大虾能否帮忙贴段代码以参考?谢谢先
沙发
Mozarts| | 2016-8-17 20:09 | 只看该作者
开始位何结束位这些都是由芯片的自动完成校验的吧。

使用特权

评论回复
板凳
Listate| | 2016-8-17 20:16 | 只看该作者
/***************串口中断程序***************/        
void  com()  interrupt 4    using 2
     {
                 uchar a=0,c=0;
                 uint  b=65535;
                 ES=0;
                 while(b--)
       {
                  while(!RI);
                  RI=0;
                  c=SBUF;
                  if(c==0x10||c==0x02||c==0x03)
                  {
                                   if(a!=0)
                                {
                                  if(com_bus[a-1]==0x10) {com_bus[a-1]=c;}                    //若接收到的数据前面接收到了0X10 则过滤掉
                                  else{com_bus[a]=c; a++; if(c==0x03){bz=1;}}                        //若接收的数据前面没有0x10则送入缓冲区 若接收到0x03 则置接收完成标志
                                    
                                  }
                                 else   {com_bus[a]=c; a++; if(c!=0x02) {b=0;} }            //若接收数据帧头不对,则跳出接收                                    
                    }
                   else
                    {
                          com_bus[a]=c;         a++;                                                                                //若接收数据帧头不对,则跳出接收
                          if(com_bus[0]!=0x02)         {b=0;}
                          }

                   if(com_bus[0]==0x02&&c==0x03&&bz==1)                 
                    {
                           b=0;
                           bz=0;
                         }
                  
             }
               ES=1;   
          }         

使用特权

评论回复
地板
Listate| | 2016-8-17 20:17 | 只看该作者
这个接收长度可以不确定 ,接收帧头判断不对则退出,收到结尾也退出,数据送到缓冲区,希望对你有帮助。。

使用特权

评论回复
5
laozhongyi| | 2016-8-17 20:18 | 只看该作者

数据帧头--数据长度--数据区--数据和

使用特权

评论回复
6
wanglaojii| | 2016-8-17 20:25 | 只看该作者
有种方法! 首先发个校验,在发个字符长度,
然后 接受端就 循环取那个长度的个数!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

1357

帖子

1

粉丝