这段CRC算法是什么意思

2019-07-15 20:00发布

虽说懂原理,但是这算法还不理解/*******************************************************************/
/*                                                                 */
/*DS18B20的CRC8校验程序                                            */
/*                                                                 */
/*******************************************************************/
uchar CRC8()
{
   uchar i,x; uchar crcbuff;

   crc=0;
   for(x = 0; x <8; x++)
   {
    crcbuff=RomCode[x];
    for(i = 0; i < 8; i++)
     {
      if(((crc ^ crcbuff)&0x01)==0)
      crc >>= 1;
       else {
              crc ^= 0x18;   //CRC=X8+X5+X4+1
              crc >>= 1;
              crc |= 0x80;
            }         
      crcbuff >>= 1;      
         }
   }
     return crc;       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
youzizhile
2019-07-16 05:04
CRC算法的编程实现
CRC校验核心就是实现无借位的除法运算。下面还是通过一个例子来说明如何实现CRC校验。
假设我们的生成多项式为:100110001(简记为0x31),也就是CRC-8
则计算步骤如下:
(1)      将CRC寄存器(8-bits,比生成多项式少1bit)赋初值0
(2)      在待传输信息流后面加入8个0
(3)      While (数据未处理完)
(4)      Begin
(5)          If (CRC寄存器首位是1)
(6)              reg = reg XOR 0x31
(7)          CRC寄存器左移一位,读入一个新的数据于CRC寄存器的0 bit的位置。
(8)      End
(9)      CRC寄存器就是我们所要求的余数。
可以搜索看下相关实例。或者模拟仿真下是最好的验证方法。

一周热门 更多>