Introduction
Modbus RTU (serial) requires a 16-bit CRC calculation following every Modbus RTU payload. To calculate that 16-bit CRC, the SeaMAX uses the following code:
unsigned short calc_crc(int n,unsigned char *outbound_message)
{
unsigned char carry_flag;
unsigned short crc=0xFFFF;
for (int i = 0; i < n; i++)
{
crc = crc ^ outbound_message[i];
for (int j = 0; j < 8; j++)
{
carry_flag = crc & 0x01;
crc = crc >> 1;
if (carry_flag == 1)
{
crc = crc ^ 0xA001;
}
}
}
return crc;
}