原创 Modbus-RTU通讯协议中CRC校验码的计算步骤

2011-9-20 09:42 6258 15 16 分类: 通信
CRC计算方法是:

1、  预置1个16位的寄存器为十六进制FFFF(全1),此寄存器为CRC寄存器

2、  把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的低八位相异或,吧结果存放于CRC寄存器。

3、  把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检测右移后的移出位。

4、  如果移出位为零,则重复第三步(再次右移一位);如果移出位为1,CRC寄存器与多项式A001进行异或。

5、  重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理。

6、  重复步骤2和5,进行通讯信息帧下一个字节的处理。

7、  将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换

8、  最后得到的CRC寄存器内容即为:CRC校验码。

文章评论1条评论)

登录后参与讨论

用户377235 2015-1-29 20:52

多项式A001是怎么来的

用户11605 2008-5-30 16:09

留个标记!! 长见识了!! 谢谢
相关推荐阅读
用户564791 2014-03-13 10:26
二维数组传参
        二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参...
用户564791 2014-01-14 17:15
JLINKV8更新固件后下载程序导致MDK5.0关闭解决方法及Jlink无法识别修复方法
1.JLINK更新固件后,在MKD5.0上将程序downLoad到板子后,MDK5.0直接自动关闭解决方法: 用SEGGER安装目录下的JLinkARM.dll替换掉MDK安装目录下./ARM...
用户564791 2014-01-02 17:31
STM32 CAN过滤器设置(1)
1 前言          在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符(CAN ID)...
用户564791 2013-10-31 00:04
TI 图形驱动库使用心得(转)
Stellaris图形库分成了三层,分别是: (1) 显示驱动层 (Display Driver Layer)   (2) 基本图形层 (...
用户564791 2013-09-19 16:28
sourceInsight基础教程
  SourceInsight,从软件的英文名字上来解读就是“深入到源代码”,该软件只具有代码的阅读、编辑和...
用户564791 2013-09-16 22:16
C30编译器使用UART2实现printf的串口输出(转载)
    在C30中,可以用printf函数,将数据输出到串口。很多PIC24/PIC30/PIC33单片机有两个串口,但是默认情况下,数据是输出到串口1的,怎样将printf输出到串口2呢...
我要评论
1
15
关闭 站长推荐上一条 /2 下一条