MODBUS RTU 是采用CRC-16码效验,CRC(16位生成的多项式X16+X15+X2+1 即8005(除掉最高位的)
方法:CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC寄存器与8-bit的数据进行异或,之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB),移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码(16#A001)进行 异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。
请问寄存器与预定义的多项式码(16#A001)进行 异或,为什么不是寄存器与多项式码(16#8005)进行 异或,16#A001是怎么得来的跟16#8005有什么关系?