找回密码
 立即注册

QQ登录

只需一步,快速开始

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

各位师傅,大侠,亲爱的朋友们,还是单片机串口接收数据的问题,还没有解决。

[复制链接]
跳转到指定楼层
楼主
ID:230975 发表于 2019-10-9 09:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
两个单片机通信,A单片机发送80 10 20 30 40 50 FF 给B单片机,B单片机收到后回复 90 41 FF  90 51 FF。A单片机发送80 60 70 80 FF 给B单片机,B单片机返回 90 50 01 02 03 04 FF。请教 如何只接收 90 50 01 02 03 04 FF保存到数组,
而不接收上一命令返回的 90 41 FF 90 51 FF。


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

使用道具 举报

沙发
ID:213173 发表于 2019-10-9 11:28 | 只看该作者
两组返回的字节长度、内容都不同,都可以作为判断是否保留的标准。
也可以把90 50 01 02 03 04 FF相加,取数据和的低8位 0xe9 作为判断是否保留的标准。
回复

使用道具 举报

板凳
ID:124631 发表于 2019-10-9 13:58 | 只看该作者
因为不知道通信环境,所以简单点的处理给数据增加一个字节作为协议号,通过协议号判断,收到数据后先判断协议号,然后数据处理去掉协议号。为保证数据准确最好加上CRC校验
回复

使用道具 举报

地板
ID:620956 发表于 2019-10-9 14:35 | 只看该作者
根据字节内容90 50 以及 90 41 区分整组字节内容,选择丢掉或保存
回复

使用道具 举报

5#
ID:230975 发表于 2019-10-9 15:24 | 只看该作者
eee123 发表于 2019-10-9 13:58
因为不知道通信环境,所以简单点的处理给数据增加一个字节作为协议号,通过协议号判断,收到数据后先判断协 ...

通信的字符是固定的
回复

使用道具 举报

6#
ID:230975 发表于 2019-10-9 15:26 | 只看该作者
wulin 发表于 2019-10-9 11:28
两组返回的字节长度、内容都不同,都可以作为判断是否保留的标准。
也可以把90 50 01 02 03 04 FF相加,取 ...

返回原不是固定的90 50 01 02 03 04 FF,单片机B返回的字符串是个位置信息,每次返回不一样。
回复

使用道具 举报

7#
ID:621137 发表于 2019-10-9 15:46 | 只看该作者
返回原不是固定的90 50 01 02 03 04 FF,单片机B返回的字符串是个位置信息,每次返回不一样
回复

使用道具 举报

8#
ID:123289 发表于 2019-10-9 15:46 | 只看该作者
你不可以选择要串口接收什么,不接收什么,只能将收到的数据用软件可能筛查,留下一些,丢弃一些!
回复

使用道具 举报

9#
ID:213173 发表于 2019-10-9 15:54 | 只看该作者
hmgqljz111 发表于 2019-10-9 15:26
返回原不是固定的90 50 01 02 03 04 FF,单片机B返回的字符串是个位置信息,每次返回不一样。

此类串口传输的字符串都属于自定义通讯协议范畴,可以增加特殊识别码加以区分。接收端可以判断是否需要返回信息,发送端也可以判断是否需要保存返回的信息。方式方法很多,只要真正理解“自定义”就可以了。
回复

使用道具 举报

10#
ID:230975 发表于 2019-10-9 16:17 | 只看该作者
jiandanxuanxin 发表于 2019-10-9 14:35
根据字节内容90 50 以及 90 41 区分整组字节内容,选择丢掉或保存

能上个实例看一下吗?如何丢掉,
回复

使用道具 举报

11#
ID:160500 发表于 2019-10-9 17:49 | 只看该作者
发送的数据可以认为是一种命令,不同的返回不同的回答,根据发送的内容决定接受的内容是否保存。也可以根据返回字符串的特征来决定是否保存。
回复

使用道具 举报

12#
ID:609989 发表于 2019-10-10 08:40 | 只看该作者
A→B:80 10 20 30 40 50 FF
B→A:90 41 FF  90 51 FF
A→B:80 60 70 80 FF
B→A:“90 50 01 02 03 04 FF”
你既然都知道发送接收几个字节了,就很好处理了。
把SBUF放在不同的数组里就好了。我只用最后一个举例下:
使用SM0=0,SM1=1,模式,波特率自己定;
ucahr string[7];
int a;
REN=1;
for(a=0;a<7;a++)
{
while(!RI);
string[a]=SBUF;
RI=0;
}
REN=0;
   
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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