18B20里面的CRC校验是怎么计算的?

2020-02-06 10:26发布

我读ROM的8为分别是 28 B1 46 38 02 00 00 40 ,CRC校验程序如下:
  1. uchar CRC8()  //DS18B20的CRC8校验程序     
  2. {  
  3.     uchar i,x;
  4.     uchar crcbuff;
  5.     uchar crc;
  6.     for(x = 0; x <8; x++)
  7.     {
  8.             crcbuff=RomCode[x];
  9.             for(i = 0; i < 8; i++)  
  10.              {  
  11.                       if(((crc ^ crcbuff)&0x01)==0)  
  12.                       crc >>= 1;  
  13.                        else
  14.                        {  
  15.                     crc ^= 0x18;   //CRC=X8+X5+X4+1
  16.                     crc >>= 1;  
  17.                     crc |= 0x80;  
  18.             }         
  19.                      crcbuff >>= 1;        
  20.                  }
  21.    }
  22.      return crc;
  23. }
复制代码
返回的并不是0啊,校验不成功。。是数据有问题还是程序有问题呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。