在单片机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 的半字节查表程序,看了一下午没看明白。先谢了。转载
|