MODBUS协议CR-16码的算法传输格式的最后两字节为CRC码,高位在后,低位在前其余为信息,高位在前,低位在后。例子,传输信息为0x0106000503E89975,(0x表示为十六进制)则CRC = 0x7599.,初始信息为:0x0106000503E8 传输信息中的CRC码(0x7599)是如何算出来的?
一般算法:
1. 将CRC赋值0xFFFF。
2. 取初始信息的第一个字节(8位)与CRC(0xFFFF)进行异或运算,将结果赋给CRC。
3. 将CRC数据右移一位,最前位(左边)补0。
4. 如果右移前,CRC最低位(最右端)为1,则将右移后的CRC与0xA001进行异或运算,且将结果赋给CRC。否则,跳过此步。
5. 重复3,4步8次(即右边8位)。
6. 对初始信息的下一个字节,同样执行2,3,4,5步,直到信息中所有字节都执行了同样的步骤。
7. 将此时得到的CRC值的高8位和低8位交换,加在初始信息末尾即得到完整的传输信息。
例子初始信息为:0x0106000503E8 初始CRC:0xFFFF