标题: 51单片机串口数据接受问题 [打印本页]

作者: 格式化无悔    时间: 2024-6-14 14:03
标题: 51单片机串口数据接受问题
如何把数组接收到的10位字符的数据,只处理第五位和第六位的数据,其他不要

IMG_4985.jpeg (1.36 MB, 下载次数: 23)

IMG_4985.jpeg

作者: wdgao    时间: 2024-6-14 14:58
接收到的数据放到缓冲数组里,要哪一位取哪一位即可。
作者: IdeaMing    时间: 2024-6-14 15:03
wdgao 发表于 2024-6-14 14:58
接收到的数据放到缓冲数组里,要哪一位取哪一位即可。

是的,前提是把数据准确的收完,以免取错位置。从你的数据来看是30 30 30 35 ,ascii就是0005
作者: lxh2002    时间: 2024-6-14 15:44
                sbufch[1] = sbufch[2];
                sbufch[2] = sbufch[3];
                sbufch[3] = sbufch[4];
                sbufch[4] = sbufch[5];
                sbufch[5] = sbufch[6];
                sbufch[6] = sbufch[7];
                sbufch[7] = sbufch[8];
                sbufch[8] = sbufch[9];
                sbufch[9] = SBUF;
               
                if(sbufch[1]==0XA0&&sbufch[2]==0X0A)                 //判断是否为起始头标志
                {
                        if(sbufch[3]==0X00||sbufch[3]==sbufch[0])                 //判断是否为起始头标志
                        {
                                COMMAND();
                        }
                }

这个是一串9个字节的接受判断,0xa0  0x0a 这2个字节是数据头,找到后执行COMMAND子程序,想怎么做都可以
作者: STC庄伟    时间: 2024-6-14 17:15
四串口与电脑收发测试程序,观方有讲解 可以去看看


作者: 123156fsadf    时间: 2024-6-14 17:26
lxh2002 发表于 2024-6-14 15:44
sbufch[1] = sbufch[2];
                sbufch[2] = sbufch[3];
                sbufch[3] = sbufch[4];

这个写法是否有些啰嗦了,在中断里面运行这么长的代码,应该把判断放到while循环中去,中断里只进行接收
作者: Y_G_G    时间: 2024-6-16 16:07
在中断中只做接收,并存放在缓冲里,在主程序查找就可以
所谓第五个数据,我不确定你这个数据是什么样子的,是每次都是一样的长度还是长度都不一样的?
如果是长度都是一样的,就在接收的时候存放在数组中,直接引用就可以了
作者: lxh2002    时间: 2024-6-16 21:59
Y_G_G 发表于 2024-6-16 16:07
在中断中只做接收,并存放在缓冲里,在主程序查找就可以
所谓第五个数据,我不确定你这个数据是什么样子的,是 ...

有道理,我的思路应该不太对,有时间找点资料学习一下,我一直都是自己瞎捉摸写的
作者: zh_junwei    时间: 2024-6-21 12:04
这个数据有头有尾的,每次接受完一包后,直接拿第5和6位就可以了,在接受完一包数后做个标记,主程序判断这个接收完成标记就处理第五和六的数,处理完成,这个标记清除,同时在产生这个标记直到处理数据完成前串口中断里面是不能接受数据的。
作者: zwj598    时间: 2024-6-21 16:25
接受到的数据用数值用数组存起来,buf[n]=
作者: 白水大虾2016    时间: 2024-6-24 11:28
有意思,学习了!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1