找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 728|回复: 10
打印 上一主题 下一主题
收起左侧

51单片机串口数据接受问题

[复制链接]
跳转到指定楼层
楼主
ID:149043 发表于 2024-6-14 14:03 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如何把数组接收到的10位字符的数据,只处理第五位和第六位的数据,其他不要

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

IMG_4985.jpeg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:366877 发表于 2024-6-14 14:58 | 只看该作者
接收到的数据放到缓冲数组里,要哪一位取哪一位即可。
回复

使用道具 举报

板凳
ID:276663 发表于 2024-6-14 15:03 | 只看该作者
wdgao 发表于 2024-6-14 14:58
接收到的数据放到缓冲数组里,要哪一位取哪一位即可。

是的,前提是把数据准确的收完,以免取错位置。从你的数据来看是30 30 30 35 ,ascii就是0005
回复

使用道具 举报

地板
ID:237471 发表于 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子程序,想怎么做都可以
回复

使用道具 举报

5#
ID:961114 发表于 2024-6-14 17:15 | 只看该作者
四串口与电脑收发测试程序,观方有讲解 可以去看看

回复

使用道具 举报

6#
ID:744809 发表于 2024-6-14 17:26 | 只看该作者
lxh2002 发表于 2024-6-14 15:44
sbufch[1] = sbufch[2];
                sbufch[2] = sbufch[3];
                sbufch[3] = sbufch[4];

这个写法是否有些啰嗦了,在中断里面运行这么长的代码,应该把判断放到while循环中去,中断里只进行接收
回复

使用道具 举报

7#
ID:401564 发表于 2024-6-16 16:07 | 只看该作者
在中断中只做接收,并存放在缓冲里,在主程序查找就可以
所谓第五个数据,我不确定你这个数据是什么样子的,是每次都是一样的长度还是长度都不一样的?
如果是长度都是一样的,就在接收的时候存放在数组中,直接引用就可以了
回复

使用道具 举报

8#
ID:237471 发表于 2024-6-16 21:59 | 只看该作者
Y_G_G 发表于 2024-6-16 16:07
在中断中只做接收,并存放在缓冲里,在主程序查找就可以
所谓第五个数据,我不确定你这个数据是什么样子的,是 ...

有道理,我的思路应该不太对,有时间找点资料学习一下,我一直都是自己瞎捉摸写的
回复

使用道具 举报

9#
ID:675287 发表于 2024-6-21 12:04 | 只看该作者
这个数据有头有尾的,每次接受完一包后,直接拿第5和6位就可以了,在接受完一包数后做个标记,主程序判断这个接收完成标记就处理第五和六的数,处理完成,这个标记清除,同时在产生这个标记直到处理数据完成前串口中断里面是不能接受数据的。
回复

使用道具 举报

10#
ID:1126413 发表于 2024-6-21 16:25 | 只看该作者
接受到的数据用数值用数组存起来,buf[n]=
回复

使用道具 举报

11#
ID:876947 发表于 2024-6-24 11:28 | 只看该作者
有意思,学习了!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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