/****************************************************************
函数名称:CRC校验函数
输 入:消息数组指针,数据的长度
****************************************************************/
unsigned int getCRC16(unsigned char *msg,unsigned char msglen)
{
unsigned int crc = 0xffff;
unsigned char i, j;
for (i=0; i<msglen; i++)
{
crc = crc ^ (*msg++); // 第一个字节与crc异或后,指针加1取下一字节
#ifndef DEBUG
WDTCON=0x20;
#endif //通讯异常 CRC计算时易复位 故加看门狗
for (j=0; j<8; j++) // 循环处理8次
{
if ((crc & 0x0001) == 0)// 查看准备移出的最低位是否为1?
{
crc = crc >> 1; // 0,直接移位,高位补零
crc = crc & 0x7fff; // 高位补零
}
else // 移出位是1
{
crc = crc >> 1;
crc = crc & 0x7fff; // 高位补零
crc = crc ^ 0xA001;
}
}
}
return crc;
}