多语言展示
当前在线:1466今日阅读:26今日分享:39

Modbus RTU中对CRC16校验的步骤

modbus中,对CRC的校验是检验数据传输过程中数据是否正确送达的重要检验标准
工具/原料

编程工具,如VS

方法/步骤
1

假定需要检验的数据存放在数组Data[n]中,

2

预置16位寄存器为FFFFH,称此寄存器为CRC寄存器;即可定义CRC=16#FFFF

3

把Data[0]与CRC寄存器的低位相异或,把结果放于CRC寄存器;即CRC=CRC XOR Data[0]

4

把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位; 如果最低位为0:重复上一步(再次移位)如果最低位为1:CRC寄存器与多项式A001进行异或;

5

重复上一步,直到右移8次,这样整个8位数据全部进行了处理;

6

重复步骤3到步骤5,进行下一个8位数据的处理

7

最后得到的CRC寄存器即为CRC码

8

void crc16(unsigned char *p,unsigned int len){  unsigned long wcrc=0XFFFF;//16位crc寄存器预置  unsigned char temp;  int i=0,j=0;//计数  for(i=0;i>=1;//先将数据右移一位        wcrc^=0XA001;//与上面的多项式进行异或      }      else//如果不是1,则直接移出      {        wcrc>>=1;//直接移出      }    }  }temp=wcrc;//crc的值

9

Temp中即存放了CRC的高八位和低八位unsigned char CRC[2];//定义数组CRC[0]=wcrc;//crc的低八位CRC[1]=wcrc>>8;//crc的高八位

注意事项
1

此处CRC校验采用的多项式为g(x)=x16+x15+x2+1

2

如对你有帮助,请采纳;若有什么疑问,可私信我。

推荐信息