CRC 校验字节的生成步骤如下:
① 装一个 16 位寄存器,所有数位均为 1。
② 取被校验串的一个字节与 16 位寄存器的高位字节进行“异或”运算。运算结果放
入这个 16 位寄存器。
③ 把这个 16 寄存器向右移一位。
④ 若向右(标记位)移出的数位是 1,则生成多项式 1010 0000 0000 0001 和这个寄
存器进行“异或”运算;若向右移出的数位是 0,则返回③。
⑤ 重复③和④,直至移出 8 位。
⑥ 取被校验串的下一个字节
⑦ 重复③~⑥,直至被校验串的所有字节均与 16 位寄存器进行“异或”运算,并移位
8 次。
⑧ 这个 16 位寄存器的内容即 2 字节 CRC 错误校验码。
校验码按照先高字节后低字节的顺序存放。
——————————————————————————————————————————
crc校验过程如上,和modbus crc校验区别就第二步高位字节异或,程序测试下来不对,代码如下:
LD SM0.0
MOVB 16#FF, #CRC高位:LB6
MOVB 16#FF, #CRC低位:LB7
————————————————
LD SM0.0
FOR LW8, +1, #数据个数:LW4
——————————————————
LD SM0.0
XORB *#首地址:*LD0, #CRC高位:LB6
——————————————————
LD SM0.0
FOR LW10, +1, +8
——————————————————
LD SM0.0
SRW LW6, 1
A SM1.1
XORW 16#A001, LW6
————————————————
NEXT
————————————————
LD SM0.0
+D 1, #首地址:LD0
————————————————
NEXT