标题: 各位师傅,大侠,亲爱的朋友们,还是单片机串口接收数据的问题,还没有解决。 [打印本页]

作者: hmgqljz111    时间: 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。



作者: wulin    时间: 2019-10-9 11:28
两组返回的字节长度、内容都不同,都可以作为判断是否保留的标准。
也可以把90 50 01 02 03 04 FF相加,取数据和的低8位 0xe9 作为判断是否保留的标准。
作者: eee123    时间: 2019-10-9 13:58
因为不知道通信环境,所以简单点的处理给数据增加一个字节作为协议号,通过协议号判断,收到数据后先判断协议号,然后数据处理去掉协议号。为保证数据准确最好加上CRC校验
作者: jiandanxuanxin    时间: 2019-10-9 14:35
根据字节内容90 50 以及 90 41 区分整组字节内容,选择丢掉或保存
作者: hmgqljz111    时间: 2019-10-9 15:24
eee123 发表于 2019-10-9 13:58
因为不知道通信环境,所以简单点的处理给数据增加一个字节作为协议号,通过协议号判断,收到数据后先判断协 ...

通信的字符是固定的
作者: hmgqljz111    时间: 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返回的字符串是个位置信息,每次返回不一样。
作者: 13930856308    时间: 2019-10-9 15:46
返回原不是固定的90 50 01 02 03 04 FF,单片机B返回的字符串是个位置信息,每次返回不一样
作者: yzwzfyz    时间: 2019-10-9 15:46
你不可以选择要串口接收什么,不接收什么,只能将收到的数据用软件可能筛查,留下一些,丢弃一些!

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

此类串口传输的字符串都属于自定义通讯协议范畴,可以增加特殊识别码加以区分。接收端可以判断是否需要返回信息,发送端也可以判断是否需要保存返回的信息。方式方法很多,只要真正理解“自定义”就可以了。
作者: hmgqljz111    时间: 2019-10-9 16:17
jiandanxuanxin 发表于 2019-10-9 14:35
根据字节内容90 50 以及 90 41 区分整组字节内容,选择丢掉或保存

能上个实例看一下吗?如何丢掉,
作者: liuzx66    时间: 2019-10-9 17:49
发送的数据可以认为是一种命令,不同的返回不同的回答,根据发送的内容决定接受的内容是否保存。也可以根据返回字符串的特征来决定是否保存。
作者: baiyun1234    时间: 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;
   




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