找回密码
 立即注册
查看: 219|回复: 5

冲哥视频之DS18B20测温度读取函数的改进建议

[复制链接]
  • TA的每日心情
    奋斗
    昨天 15:38
  • 签到天数: 90 天

    [LV.6]常住居民II

    11

    主题

    69

    回帖

    185

    积分

    注册会员

    积分
    185
    发表于 2024-2-27 09:41:32 | 显示全部楼层 |阅读模式
    冲哥视频之DS18B20测温度读取函数的改进建议


         冲哥的教学视频讲解清晰逻辑明了,特适合零基础人士自学。但有少数地方省略做项目工程时需要考虑的代码。比如第26DS18B20测温度,其中读取函数
         while(!DQ);  //4.等待DQ变成高电平”这一句就会因为DS18B20器件损坏卡壳。
         我个人觉得应该在初始化这里弄一个判断,如果DS18B20器件损坏或者没应答直接返回错误值,以便更换元件调试。
              下面就列出修改的代码供参考,也是用于抛砖引玉,向大咖赐教。
              字体红色部分是修改的地方。

    bit DS18b20_Reset(void) //复位
    {
         bit DS18B20_Online = 1;
         while( flag )
          {
                 DQ = 0; //输出低电平
                 Delay480us();
                 DQ = 1; //输出高电平
                 Delay60us(); //DS18B20检测高电平等待15-60us发出应答
    if(DQ==1)                 //读取当前电平
         DS18B20_Online =0;
                Delay480us();
           }
    return DS18B20_Online
    }

    u16 DS18b20_ReadTemp(void) //读取并且换算温度,并返回
    {
          u8 TempH;
          u8 TempL;
         u16 temperture;

         if(DS18b20_Reset()==0) //1.复位
         return 999; //返回999度,给出错误提示
         DS18b20_WriteByte(0XCC);//2.跳过ROM指令
         DS18b20_WriteByte(0X44);//3.开始转化
         while(!DQ); //4.等待DQ变成高电平

         DS18b20_Reset(); //5.复位
         DS18b20_WriteByte(0XCC);//6.跳过ROM指令
         DS18b20_WriteByte(0XBE);//7.读取

         TempL = DS18b20_ReadByte();
         TempH = DS18b20_ReadByte();

         if( TempH & 0XF8 ) //1出现就是负数
         {
              MinusFlag = 1; //标志位负数
              temperture = ((TempH<<8) | TempL); //将温度换算成16
              temperture = (~temperture) +1; //按位取反+1
              temperture = temperture*10*0.0625; //最终温度保留一位小数
         }
         else
         {
              MinusFlag = 0; //标志位正数
              temperture = ((TempH<<8) | TempL); //将温度换算成16
              temperture = temperture*10*0.0625; //最终温度保留一位小数
         }
         Temp = temperture;
         return temperture; //保留一位小数的温度
    }

    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

    冲哥视频教程和各种开源资料QQ交流群884047237,可群

    积分
    6773
    QQ
    发表于 2024-2-27 10:37:02 | 显示全部楼层
    前期会用即可,后面会有工程示例的,要说做工程的话这个代码要改的地方可多了,
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 15:38
  • 签到天数: 90 天

    [LV.6]常住居民II

    11

    主题

    69

    回帖

    185

    积分

    注册会员

    积分
    185
     楼主| 发表于 2024-2-27 11:52:55 | 显示全部楼层
    已经搬好凳子,期待学习工程代码。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 07:20
  • 签到天数: 129 天

    [LV.7]常住居民III

    6

    主题

    72

    回帖

    502

    积分

    高级会员

    积分
    502
    发表于 2024-4-19 08:15:44 | 显示全部楼层
    太感谢你的分享。我就是程序卡在这里,程序死活不运行读取程序,还找不到原因按照你的代码修改,确认是18B20坏了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 15:38
  • 签到天数: 90 天

    [LV.6]常住居民II

    11

    主题

    69

    回帖

    185

    积分

    注册会员

    积分
    185
     楼主| 发表于 昨天 15:40 | 显示全部楼层
    1. 太感谢你的分享。我就是程序卡在这里,程序死活不运行读取程序,还找不到原因按照你的代码修改,确认是18B20坏了
    复制代码
    谢谢鼓励
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 07:09
  • 签到天数: 151 天

    [LV.7]常住居民III

    138

    主题

    190

    回帖

    1630

    积分

    金牌会员

    积分
    1630
    发表于 昨天 17:12 | 显示全部楼层
    加个等待超时就退出,万一在使用的过程中坏了呢
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-4 06:14 , Processed in 0.062657 second(s), 49 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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