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

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

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-07 08:45:27

24

主题

108

回帖

472

积分

中级会员

积分
472
发表于 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; //保留一位小数的温度
}

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-07 08:45:27

24

主题

108

回帖

472

积分

中级会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:467
  • 最近打卡:2025-05-07 11:03:43

22

主题

172

回帖

1504

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-07 08:45:27

24

主题

108

回帖

472

积分

中级会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:438
  • 最近打卡:2025-05-05 16:02:46
已绑定手机

229

主题

328

回帖

1499

积分

金牌会员

积分
1499
发表于 2024-5-3 17:12:35 | 显示全部楼层
加个等待超时就退出,万一在使用的过程中坏了呢
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-7 16:23 , Processed in 0.113704 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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