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啊,校验不成功。。是数据有问题还是程序有问题呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
R88
1楼-- · 2020-02-06 11:29
看datasheet的时序图,貌似程序没错误啊,难道读出来的数据有错误么?

111.JPG (23.94 KB, 下载次数: 0)

下载附件

2014-10-24 15:11 上传

R88
2楼-- · 2020-02-06 14:54
程序是对的,是我搞错了,结贴吧
codeman
3楼-- · 2020-02-06 17:53
CRC未初始化啊,得赋初值
codeman
4楼-- · 2020-02-06 21:08
这CRC计算太费时了,建议查表法
R88
5楼-- · 2020-02-07 00:43
 精彩回答 2  元偷偷看……
R88
6楼-- · 2020-02-07 01:52
codeman 发表于 2014-10-24 15:23
这CRC计算太费时了,建议查表法

这个是按手册原理写的,更容易看懂,查表的先需求自己算出来吧。

一周热门 更多>