CRC-16/MODBUS 校验位计算

实验指令: 前23位表示 信息头 + 信息内容。24,25位是待计算的校验位。26位是结束码 7E 01 00 00 01 10 02 00 27 00 0C 00 02 00 00 00 00 00 50 00 3C 00 03 90 0B 0D
在线计算 CRC-16/MODBUS 校验位计算
文章图片

代码实现

#include #include UINT8 data[23] = { 0x7E, 0x01, 0x00, 0x00, 0x01, 0x10, 0x02, 0x00, 0x27, 0x00, 0x0C, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x3C, 0x00, 0x03 }; /* * 函数名 :CRC16 * 描述 : 计算CRC16 * 输入 : ptr---数据,len---长度 * 输出 : 校验值 */ UINT16 CRC16(UINT8 *ptr, UINT16 len) { unsigned char i; unsigned short crc = 0xFFFF; if (len == 0) { len = 1; } while (len--) { crc ^= *ptr; for (i = 0; i<8; i++) { if (crc & 1) { crc >>= 1; crc ^= 0xA001; } else { crc >>= 1; } } ptr++; } return(crc); }int main() { printf("%04x\n", CRC16(data, 23)); getchar(); }

【CRC-16/MODBUS 校验位计算】CRC-16/MODBUS 校验位计算
文章图片

    推荐阅读