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;
  }