CRC计算采用多项式0xA001,步骤:1)初始化CRC=0xFFFF;2)取数据帧首字节与CRC低8位异或;3)右移一位,若移出位为1则CRC=(CRC>>1)^0xA001,否则仅右移;4)重复右移8次完成一字节;5)处理下一字节直至结束;6)交换高低字节得到最终CRC,低字节先发。查表法优化:预计算256个CRC值存入数组,每处理一字节直接查表更新CRC,避免位运算。例如:unsigned short crc16table[256]; //预计算for(i=0;i<256;i++){crc=i;for(j=0;j<8;j++)crc=(crc&1)?(crc>>1)^0xA001:crc>>1;crc16table=crc;}使用中:crc=0xFFFF;while(len--){crc=(crc>>8)^crc16table[(crc^*data++)&0xFF];}。该方法速度提升10倍,但占用512字节ROM,适合资源充足场合。接收方计算CRC与接收值比较,不等则丢弃帧不回应。