蓝桥杯单片机DS18b20单总线测温模块常见问题解决

有道是:“溪水声声留我住,梅花朵朵唤人回”

DS18b20测温模块作为一个比较简单、稳定的蓝桥杯单片机外设模块,

使用时却经常出现各种问题,总是让我们不禁三番多次回顾其基础知识,

却总也摸不着头脑,

那本文也许就是你的救星,你的百度搜索也将到此截止。

DS18B20是单总线数字化温度传感器,应用非常广泛。

它输出的是数字信号,同时具有体积小,硬件资源耗费少,抗干扰能力强,精度高等特点。

但我们在使用的时候它显得并不“稳定”,总是会出现许多问题,例如:

1.DS18b20温度显示会跳动、跳变

2.DS18b20开机显示85.00之类的

3.DS18b20一直显示35.93度,且温度不刷新

本文将分析以上问题的原理以及提供解决思路。

目录

1.DS18b20温度显示会跳动、跳变

2.DS18b20开机显示85.00之类的

3.DS18b20一直显示35.93度,且温度不刷新

#DS18B20的温度转换与读取流程


1.DS18b20温度显示会跳动、跳变

现象:例如需要显示的温度为:26.1,而数码管显示在26.1和3.5

(或者其他的一些不该出现的值)之间来回跳变。
原因: 没有考虑到单片机进入中断对onewire时序的影响。

造成时序紊乱,读出来的温度值自然是乱的。

解决:在官方给出的驱动必要处加上EA = 0;

//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
EA = 0;
for(i=0;i<8;i++)
{DQ = 0;DQ = dat&0x01;Delay_OneWire(5);DQ = 1;dat >>= 1;
}Delay_OneWire(5);EA = 1;
}//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
unsigned char i;
unsigned char dat;
EA = 0;
for(i=0;i<8;i++)
{DQ = 0;dat >>= 1;DQ = 1;
if(DQ)
{dat |= 0x80;
}
Delay_OneWire(5);
}
EA = 1;
return dat;
}

2.DS18b20开机显示85.00之类的

原因:因为温度传感器的温度转换需要一定的时间,所以刚一开始温度转换然后紧接着读取温度,再显示出来,他读取的温度便是上一次转换的结果,由于ds18b20初始温度值为85,所以这里的“上一次转换的结果”就是85.

解决方法:

在程序初始化的部分加上

Read_Temperature();//此时读取的温度值为默认的85

Delay_1ms(750);//等待上一个read函数温度转换完成

Read_Temperature();

//此时再读取的温度值就变成了第一个read函数转换完成的温度值

先读,再延时较长时间,在进行后续要求的读取

3.DS18b20一直显示35.93度,且温度不刷新

原因:

最基础的原因:用标志刷新读取手法时 标志位 数据类型容量溢出导致计数不到那个值,比如要计数到500的,但定义的count是char类型的,这根本不可能计数到500因为到255就溢出了

时序原因

DS18B20最高具有12为精度(默认模式),分辨率达到0.0625摄氏度,且外围电路极其简单,甚至可以不接VCC,就靠数据流吊着就能工作。当然它工作时时序可没有那么简单,稍有不慎(延时错误),整个工作时序就混乱了,因此准确把每次延时至关重要。

解决方法:检查时序

比赛方提供的驱动程序中有单总线驱动,官方给配的,十有八九好使,不过我在用的过程中却发现有时都回来数据是错的,温度没读对,在仔细研究后发现,官方给的驱动是针对STC89C52的,其中给的延时函数如下:

而我们实际用的芯片是IAP15系列,作为1T单片机,指令执行速度是12T单片机的12倍,那么上面这个简陋延时函数实际上是以原来的1/12时间就执行完了,这个延时在DS18B20中能够正常使用吗?当然不能,因此在上述函数基础上进行改进:

#DS18B20的温度转换与读取流程

【1】DS18B20复位

【2】写入字节0xcc,跳过ROM指令

【3】写入字节0x44,开始温度转换

【4】延时700~900ms

【5】DS18B20复位

【6】写入字节0xcc,跳过ROM指令

【7】写入字节0xbe,读取高速暂存器

【8】读取暂存器第0字节,即温度数据的LSB

【9】读取暂存器第1字节,即温度数据的MSB

【10】DS18B20复位,表示读取数据结束

【11】将LSB和MSB整合成为一个16位数据

【12】判断读取结果的符号,进行正负温度的数据处

蓝桥杯单片机DS18b20单总线测温模块常见问题解决相关推荐

  1. 蓝桥杯单片机DS18B20代码注释及部分时序图

    蓝桥杯单片机蓝桥杯单片机DS18B20代码注释及部分时序图 #include<STC15F2K60S2.H> #include<intrins.h>#define uchar ...

  2. 蓝桥杯单片机设计与开发⑫ ---超声波模块

    一.基本原理 超声波发射模块向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时. 二.计算公式 距离 = 声速 × 发 ...

  3. [蓝桥杯单片机] - 蓝桥杯单片机CT107D竞赛板各模块代码分析

    蓝桥杯笔记 "免责声明" ( •̀ ω •́ )✧ 代码未全部验证,也许存在BUG,如发现错误欢迎指正,不愿意指正那就当作没看见也行 所有说明文字仅代表笔者个人想法 修正日志 从2 ...

  4. 蓝桥杯单片机设计与开发⑬ ---NE555模块

    一.555定时器&频率测量 1. 电路原理 NE555是一种时钟芯片,输出一定频率的脉冲信号.就其模块特性,简单点来说,该模块会根据Rb3电位器的阻值,在SIG脚输出相应的频率的脉冲信号. 第 ...

  5. 【蓝桥杯单片机11】单总线温度传感器DS18B20的基本操作

    [蓝桥杯单片机11]单总线温度传感器DS18B20的基本操作 广东职业技术学院 欧浩源 单总线数字温度传感器DS18B20几乎成了各类单片机甚至ARM实验板的标配模块来,在蓝桥杯的往届省赛和国赛中,这 ...

  6. 蓝桥杯单片机之DS18B20温度传感器

    蓝桥杯单片机之DS18B20温度传感器 简述: 根据提供的芯片数据手册可以获取的信息: ROM操作命令: 存储器操作命令 温度转换及温度获取 温度寄存器格式: 获取温度的具体操作 温度数据处理与数码管 ...

  7. 蓝桥杯单片机(九)DS18B20温度测量(四位小数和负数显示)

    上一次讲了DS18B20的整数温度显示 蓝桥杯单片机(八)DS18B20温度测量(整数显示) 但近几年有出题小数部分的温度显示,首先打开DS18B20的数据手册,如图 通过这张表,我就知道读取数据时, ...

  8. 蓝桥杯单片机 超声波模块和PCA模块

    蓝桥杯单片机 超声波模块和PCA模块 原理 超声波测量的原理 PCA模块的原理 代码 PCA定时器的范例程序 超声波测量的参考代码 原理 超声波测量的原理 超声波由一个超声波模块向前方发出,并在空气中 ...

  9. ds18b20c语言显示小数位,DS18B20多点测温(读序列,匹配序列,51单片机C程序,1602显示)...

    DS18B20多点测温(读序列,匹配序列,51 C程序,1602显示) 程序一:单个读序列号.程序二,匹配并且读两个DS18B20,当然,读多个与读两个基本原理一样,只要加上其序列号等即可.本程序所有 ...

最新文章

  1. thinkphp5项目--企业单车网站(七)
  2. layui ajax流加载,layui中流加载layui.flow
  3. 十款让 Web 前端开发人员更轻松的实用工具
  4. Mysql迁移到Oracle方法
  5. Tensorflow常用函数说明(一)
  6. c++基础学习(09)--(数据抽象、数据封装、接口)
  7. android 语音搜索动画,Android自定义控件实现UC浏览器语音搜索效果
  8. (转)基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
  9. 配置csrf_django 入门第一课 配置文件
  10. 代码测试意味着完全消灭了 Bug?
  11. ·通过wifi_scan学习esp32wifi程序编写
  12. 培养一个数据人才需要多少年?
  13. Error:Could not launch XXX failed to get the task for process 1105
  14. Android HttpURLConnection 获取下载文件大小
  15. 使用JQuery TreeTable实现树形表格
  16. 一个BUG引发的灾难:ORA-00600 [kjmchkiseq:!seq]
  17. 【转载】 身份证号码校验(15位和18位都可以)
  18. 断点恢复执行时的设置
  19. 如何删除鼠标右键的显示的快捷键或功能?
  20. 《新亮剑》力求炮火逼真 柱子金钟负伤骨折_0

热门文章

  1. IDEA导入lib包及IDEA+Sikuli实例
  2. Intel芯片组和AMD命名规则
  3. 2021年高压电工考试总结及高压电工复审考试
  4. 蓝桥杯2022A组数的拆分题记
  5. spring学习感悟
  6. 奇点大学眼中未来:人寿命翻番 被机器人反超
  7. GroupingComparator分组(辅助排序)的作用以及GroupingComparator分组案例实操
  8. 1-02 C++起步: 用结构组织数据 —— 数据封装初步
  9. 刷机-把机顶盒当服务器使用
  10. Android 加载图片G lide的基本用法