C代码实现
#include<stdio.h>
#define uint8_t unsigned char
#define uint16_t unsigned short
uint16_t ModbusCRC16(uint8_t* ptr, uint16_t len)
{
uint8_t i;
uint16_t crc = 0xffff;
if (len == 0) {
len = 1;
}
while (len--) {
crc ^= *ptr;
for (i = 0; i < 8; i++)
{
if (crc & 1) {
crc = (crc >> 1) ^ 0xA001;
}
else
{
crc >>= 1;
}
}
ptr++;
}
return(crc);
}
uint16_t CCITT_CRC16(uint8_t* ptr, uint16_t len)
{
uint8_t i;
uint16_t crc = 0x0000;
if (len == 0) {
len = 1;
}
while (len--) {
crc ^= *ptr;
for (i = 0; i < 8; i++)
{
if (crc & 1) {
crc = (crc >> 1) ^ 0x8408;
}
else
{
crc >>= 1;
}
}
ptr++;
}
return(crc);
}
int main(void)
{
uint8_t cal_buf[] = { 0x68,0x00,0x06,0x68,0x16 };
uint16_t ccitt_val = 0;
uint6_t modbus_val = 0;
modbus_val = ModbusCRC16(cal_buf,sizeof(cal_buf));
ccitt_val = CCITT_CRC16(cal_buf,sizeof(cal_buf));
return 0;
}