查看: 1475|回复: 0
打印 上一主题 下一主题

CRC-16-IBM (0XA001)半字节查表程

[复制链接]
跳转到指定楼层
沙发
发表于 2015-6-14 16:52:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

在单片机modbus通讯中CRC用的是CRC-16-IBM (0XA001),看了公司两套产品(不同人开发的)都是,
产品说明书,里面用的多项式式0XA001,流程如下:  
1    预置一个16位寄存器为0FFFFH(全1),称之为CRC寄存器。   
2    把数据帧中的第一个字节的8位与CRC寄存器中的低字节进行异或运算,结果存回CRC寄存器。   
3    将CRC寄存器向右移一位,最高位填以0,最低位移出并检测。   
4    如果最低位为0:重复第三步(下一次移位);如果最低位为1:将CRC寄存器与一个预设的固定值(0A001H)进行异或运算。   
5    重复第三步和第四步直到8次移位。这样处理完了一个完整的八位。   
6    重复第2步到第5步来处理下一个八位,直到所有的字节处理结束。   
7    最终CRC寄存器的值就是CRC的值。   

但是我对着这个流程写的程序生成的CRC刚好和产品的高地位倒了....产品和MODBUS上位机通讯良好,不知道什么原因。  

还有哪位能给个0XA001 的半字节查表程序,看了一下午没看明白。先谢了。转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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