Я пытаюсь вычислить crc modbus в приложении для PIC, но возвращаемое crc всегда неверно по сравнению с симуляторами онлайн .. следуйте коду
void CRC (unsigned char * msg, unsigned char * out)
{
// char CRC16 [2] = {0xFF, 0xFF};
unsigned int CRC16 = 0xffff;
unsigned int poly = 0xA001;
unsigned char data [14];
unsigned char crc [2];
for (int i = 0; i <14; i ++)
{
CRC16 = (unsigned int) msg [i] ^ CRC16; // change date to msg
for (int j = 0; j <8; j ++)
{
CRC16 >> = 1;
if (CRC16 & 0x0001 == 1)
{
CRC16 = poly;
}
}
}
crc [0] = CRC16 >> 8;
crc [1] = CRC16 & lt; / RTI & gt;
strcpy (data, msg);
strcat (data, crc);
strcpy (out, date);}
Я вхожу с буфером в 12 байтов для вычисления и в конце должен получить буфер рядом с crc .. но вычисление самого crc возвращает неправильное значение .. что может быть неправильным в коде?
в случае, если мое сообщение должно вернуться 8C0C
но возвращается 68FE
Задача ещё не решена.
Других решений пока нет …