modbus協議CRC校驗
阿新 • • 發佈:2018-12-25
https://blog.csdn.net/u013625451/article/details/81239572
RTU 檢查碼(CRC)計算, 運算規則如下:
|
void main(void) { unsigned short tmp = 0xffff; unsigned short ret1 = 0; unsigned char buff[4] = { 0 }; buff[0] = 0xB1; buff[1] = 0x00; buff[2] = 0x00; buff[3] = 0x01; for (int n = 0; n < 4; n++) {/*此處的6 -- 要校驗的位數為6個*/ tmp = buff[n] ^ tmp; for (int i = 0; i < 8; i++) { /*此處的8 -- 指每一個char型別又8bit,每bit都要處理*/ if (tmp & 0x01) { tmp = tmp >> 1; tmp = tmp ^ 0xa001; } else { tmp = tmp >> 1; } } } /*CRC校驗後的值*/ printf("%X\n", tmp); /*將CRC校驗的高低位對換位置*/ ret1 = tmp >> 8; ret1 = ret1 | (tmp << 8); printf("ret: %X\n", ret1); return 0; }