| 
 
| /****************************************** CRC12校验函数
 输  入:        ptr需要进行校验的数据包首地址
 len需要校验的数据包字节数
 输  出:        校验码;
 调  用:        无;
 被调用:        从机协议打包函数;
 功  能:        将一给定的数据包进行CRC12校验给调用者返回校验码
 ******************************************/
 
 unsigned int CRC12(unsigned char *ptr,unsigned char len)
 {
 unsigned char i;
 unsigned char j;
 j = 0;
 
 while(len)
 {
 /*多项式除法*/
 if(*ptr & (0x80>>j))  //如果该位为1
 crc |= 0x01;  //则在余数尾部添1否则添0
 if(crc >= 0x1000)
 crc ^= 0x180D;
 crc <<= 1;
 j++;
 if(j == 8)
 {
 j = 0;
 ptr++;
 len--;
 }
 }
 /*对后面添加的12个0做处理*/
 for(i=0; i<12; i++)
 {
 if(crc >= 0x1000)
 crc ^= 0x180D;
 crc <<= 1;
 }
 crc >>= 1;
 return(crc);
 }
 
 
 就是这个程序 前面的我都可以看懂,就是倒数第一行的程序crc >>= 1; 为什么最后要把crc向右移动一位呢?这样除以2的意思是什么呢?
 | 
 |