CRC计算方法是:
1、 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器。
2、 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该CRC寄存器中。
3、 把CRC寄存器的内容右移一位,用0填补最高位,并检测移出位是0还是1。
4、 如果移出位为零,则重复第三步(再次右移一位);如果移出位为1,CRC寄存器与0XA001进行异或。
5、 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理。 第一个字节CRC结果仍存放于该CRC寄存器中
6、CRC结果是上次的结果,重复步骤2和5,进行通讯信息帧下一个字节的处理。
7、 将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换
8、 最后得到的CRC寄存器内容即为:CRC校验码。文章来源:https://www.toymoban.com/news/detail-672958.html
代码计算文章来源地址https://www.toymoban.com/news/detail-672958.html
unsigned int tx_buff[] =
{0x01,0x03,0x02,0x04,0x00,0x03,0x45,0xb2};
//地址码,功能码,起始地址高位,起始地址低位,寄存器个数高位,寄存器个数低位,CRC16校验码低位,CRC16校验码高位
unsigned int CRC16_MODBUS(void) //CRC16/modbus计算
{
unsigned int crc = 0xffff; //寄存器初始值
unsigned char i,j;
for(j=0;j<6;j++)
{
crc = crc ^ tx_buff[j];
for(i=0;i<8;i++)
{
if((crc & 0x0001) == 1)
{
crc >>= 1;
crc ^= 0xa001;
}
else
{
crc >>= 1;
}
}
}
tx_buff[6] = crc & 0x00ff;
tx_buff[7] = (crc & 0xff00) >> 16;
}
到了这里,关于16位CRC校验码计算,485MODBUS计算的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!