/****************************************
Modbus_CRC16校验
使用说明:
unsigned char Fa_Song_Zhi_Ling[8] ; // 声明 发送指令
uint16_t crc = Modbus_CRC16(Fa_Song_Zhi_Ling, 6); // 计算CRC16值
Fa_Song_Zhi_Ling[6] = crc & 0xFF; // 得到低字节
Fa_Song_Zhi_Ling[7] = (crc >> 8) & 0xFF; // 得到高字节
****************************************/
uint16_t Modbus_CRC16(uint8_t *data, uint8_t length) {
uint16_t crc = 0xFFFF;
for (int i = 0; i < length; i++) { // 包括所有字节进行CRC计算
crc ^= data[i];
for (int j = 0; j < 8; j++) {
if (crc & 0x0001) {
crc = (crc >> 1) ^ 0xA001;
} else {
crc >>= 1;
}
}
}
return crc;// 返回计算得到的CRC值,低字节在前,高字节在后
}
C C++ arduinO 中MODBUS CRC16校验
于 2024-02-02 10:36:25 首次发布