找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2415|回复: 4
收起左侧

关于单片机串口接收数据保存

[复制链接]
ID:230975 发表于 2019-10-16 15:18 | 显示全部楼层 |阅读模式
A和B都是单片机,B的程序是固定死的不可以修改主。A给B发送数据。B会根据A发送的指今,返回不同的数据,有 00 90 38 FF   还有90 41 FF 90 51 FF还有90 41 FF 90 51 FF 90 50 0X 0X 0X 0X FF (_X代表从0-F)
在不同的返回数据里面只有最后一组的 90 50 0X 0X 0X 0X FF这些要保留下来,我在串口中断中做如下的接收判断,可以是只能接50,50以后的数据不能接收。请教如何判断并且把这些数保存到数组当中。
void ser() interrupt 4
    {
                  
               uchar temp,j;
         
                  
                   RI=0;   
           temp=SBUF;
                   if(temp==0x50)
                      {
                                  buf[j++]=SBUF;
                                   if(j==5)
                                     {
                                           j=0;
                                           ES=0;
                                         }
                          
                          }
        

                        
        }
这是我的串口接收程序。这样只能接收50.不能接收50以后的。
回复

使用道具 举报

ID:619594 发表于 2019-10-16 18:09 | 显示全部楼层
你在串口中断里面 ES=0 ,关闭了串口中断
回复

使用道具 举报

ID:235200 发表于 2019-10-16 18:20 | 显示全部楼层
所接收数据是一次返回还是多次返回的?如果是多次返回的,只需判断返回数据的长度,当长度为7时复制到存储器就行
回复

使用道具 举报

ID:220005 发表于 2019-10-16 20:47 | 显示全部楼层
建议您把 uchar temp,j;
改为 static uchar temp,j;
否则每次进入中断时候,j的值都会被清零。即实际上,每次读写的位置都是 buf[0]
回复

使用道具 举报

ID:230975 发表于 2019-10-17 10:40 | 显示全部楼层
Flywithliye 发表于 2019-10-16 20:47
建议您把 uchar temp,j;
改为 static uchar temp,j;
否则每次进入中断时候,j的值都会被清零。即实际上, ...

谢谢。我有时间再试一下
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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