Пытаюсь вычислить Modbus RTU CRC. Что случилось?

Я пытаюсь вычислить 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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …