您现在所在的是:

变频器论坛

回帖:1个,阅读:474 [上一页] [1] [下一页]
1411
e.qxy
文章数:212
年度积分:50
历史总积分:1411
注册时间:2009/12/14
发站内信
发表于:2010/8/13 20:04:36
#0楼
[size=4][size=4]1.预置1个16位的寄存器(下称CRC寄存器),初试化其内容为十六进制数0xFFFF;
2.把第一个待计算的数据即通讯信息帧的首字节与CRC寄存器的低8位相异或,把结果放回CRC寄存器;
3.把CRC寄存器的内容右移一位用0填补最高位即进行逻辑移位处理并检查右移后的移出位;
4.如果移出位为0重复第3步即再次右移一位,如果移出位为1则CRC寄存器与CRC生成多项式0xA001(1010 0000 0000 0001)进行异或运算,结果放回CRC寄存器;
5.重复步骤3和4,直到右移8次,对整个8位数据全部进行同样处理;
6.重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;
7.将该通讯信息帧所有字节按上述步骤计算完成后,最后得到的CRC寄存器的内容即为CRC校验码,将其附着在原通讯信息帧后进行传输即可。如果用于Modbus协议设备则还需交换高低8位,非Modbus协议设备可以不必交换。接收方依同样方法进行计算,只是计算的内容不要包括最后两个字节,然后比较生成的CRC校验码和数据帧中的是否相同即可。如果发送方交换CRC校验码的高低8位,则接收方可以计算包括交换后的CRC码在内的整个数据帧,传输正确的话结果恒为0x0000。


[/size][/size]CRC生成多项式0xA001看比懂  能说说为什么是0xA001?这个0xA001是固定不变的还是依据不同的情况计算出来的?怎么计算?
38125
cvlsam 版主
文章数:12488
年度积分:736
历史总积分:38125
注册时间:2001/12/22
发站内信
2018论坛贡献奖
2017论坛贡献奖
2016论坛贡献奖
2015论坛贡献奖
2013论坛贡献奖
2012论坛贡献奖
2011论坛贡献奖
2011国庆活动
2010论坛杰出贡献奖
发表于:2010/8/14 5:40:14
#1楼
这个值是固定的,因为其多项式为1100 0000 0000 0001:即X的16次方+X的15次方+1

那是种子,你甚至可以自己定义,但是使用厂家的东西,人家已经定义好了,还多纠结什么。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

46.8003