找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

DS18B20 CRC 校验

查看数: 1829 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-2-9 18:30

正文摘要:

帮我看看这个CRC校验 写对没有  为什么会有 150度  感谢大家了 #include"temp.h" uchar scratbuf[9]; //存从18B20高速缓存中读取的9B数据 uchar code crc_tab[256]={ 0, 94,188,226, 97 ...

回复

ID:213173 发表于 2021-2-15 14:27
以上解释基于51单片机12MHz晶振环境
ID:213173 发表于 2021-2-15 14:18
这个程序从表面看没有什么问题,仔细推敲问题出在Ds18b20Init函数。
由于18b20对时序非常敏感。主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。若无低电平出现一直都是高电平说明总线上无器件应答。
修改如下:
  1. uchar Ds18b20Init()
  2. {
  3.         uchar i;
  4.         DSPORT = 0;        //将总线拉低480us~960us
  5. //        i = 70;
  6.         i = 80;                 //i值极限范围在79~159之间
  7.         while(i--);        //此延时时间=i*6+6us
  8.         DSPORT = 1;        //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低
  9.         i = 9;
  10.         while(i--);        //延时60us,不得超过480us
  11.         if(!DSPORT)return 1; //初始化成功
  12.         else return 0;         //初始化失败
  13. //以下等待5ms部分没有实际意义
  14. /*        while(DSPORT)       //等待DS18B20拉低总线
  15.         {
  16.                 i++;
  17.                 if(i>5)//等待>5MS
  18.                 {
  19.                         return 0;//初始化失败
  20.                 }
  21.                 Delay1ms(1);        
  22.         }
  23.         return 1;//初始化成功
  24.         */
  25. }
复制代码

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表