打印

收到一帧数据,帮忙看一下

[复制链接]
2514|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lwag|  楼主 | 2010-12-3 12:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
7e, d0, 00, 57, 00,00,00...(共十几个)就是上面一串数据,为什么有那么多00,收到最后一个数据后用了一条指令:
if((SBUF^pf) == 0)
  flag = 1;
程序中最后flag确实为1了。现在不知道if((SBUF^pf) == 0)到底代表什么意思?
pf为每接收到一个字节都要赋一下值。

相关帖子

沙发
coody| | 2010-12-3 12:50 | 只看该作者
if((SBUF^pf) == 0),就是判断SBUF == pf

使用特权

评论回复
板凳
lwag|  楼主 | 2010-12-3 13:01 | 只看该作者
那什么时候才等于呢?前面还有pf^=SBUF,每一个case都有这一句。
祥见:https://bbs.21ic.com/viewthread.p ... p;page=1#pid1430503

使用特权

评论回复
地板
coody| | 2010-12-3 13:06 | 只看该作者
着是异或校验,最后一个字节就是前面N个字节的异或计算结果,接收方将这个字节也一起异或,则结果为为就正确,非0就错误。
CRC16也是这样的,将收到的所有数据(包括后面两字节CRC16)一起做CRC16校验,结果伪就正确,非0就错误。

至于数据中为什么那么多0,可能数据刚好是0,或者是一些备用的字节。

使用特权

评论回复
5
zhangf1021| | 2010-12-3 13:12 | 只看该作者
pf是前面所有字节的异或
最后一位是校验
对比两个是否相等,就能知道收到的数据是否正确

使用特权

评论回复
6
lwag|  楼主 | 2010-12-3 13:15 | 只看该作者
那么这可以算作和CRC等效吧。

使用特权

评论回复
7
coody| | 2010-12-3 13:16 | 只看该作者
不能和CRC等效,CRC16强多了,即使是CRC8都比异或强得多

使用特权

评论回复
8
lwag|  楼主 | 2010-12-3 13:21 | 只看该作者
这种方式教材上没有见过啊,非常规武器。能不能详细指点一下?

使用特权

评论回复
9
zhangf1021| | 2010-12-3 13:29 | 只看该作者
这种传输协议都是自己定的
头 + 数据 + 校验 大概这样的格式
有的会有尾
校验的方式也有很多种
得自己查传输协议

使用特权

评论回复
10
刘前辈| | 2010-12-3 18:25 | 只看该作者
跟RS-232最后一位奇偶校验一个意思,那里是bit逻辑加,这里是字节逻辑加。通信技术术语也称为“纵向冗余校验码(LRC)”。

即,发送方最后1字节校验和  A=a1⊕a2⊕a3⊕a4⊕……
而a1、a2、a3、a4、……an是7e之后发送的所有n个字节内容。接收方做同样计算,结果也应为A:
A⊕A=0;

这是最简单的校验码,可靠性离CRC差得远。
相关内容见《计算机通信技术》 潘新民  主编。或任何一本数据通信原理。

网上搜索“LRC”或者“纵向冗余校验码”即可。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

163

帖子

2

粉丝