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

2020-02-06 10:15发布

在单片机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 的半字节查表程序,看了一下午没看明白。先谢了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。