【蓝桥杯单片机11】单总线温度传感器DS18B20的基本操作
本帖最后由 ohy3686 于 2019-8-18 19:44 编辑【蓝桥杯单片机11】单总线温度传感器DS18B20的基本操作
www.xmf393.com / 广东职业技术学院欧浩源
单总线数字温度传感器DS18B20几乎成了各类单片机甚至ARM实验板的标配模块来,在蓝桥杯的往届省赛和国赛中,这个内容考查的频率也相当的高。不管是单片机学习还是蓝桥杯备赛,都应掌握DS18B20的基本操作,也就是把传感器的数据读出来。
1、关于DS18B20你应该知道
在蓝桥杯“单片机设计与开发”赛项中,会提供一个关于DS18B20的库文件,里面有传感器复位、写字节和读字节三个函数。所以,你不一定要把单总线的时序搞清楚,但你一定要把DS18B20的基本操作流程弄明白。
DS18B20单线通信功能是分时完成的,它有严格的时隙概念,如果出现序列混乱,器件将不响应主机,因此读写时序很重要。
通过单线总线端口访问DS18B20的协议如下:
步骤1: 复位初始化
步骤2: ROM操作指令
步骤3: DS18B20功能指令
DS18B20的高速暂存存储器由9个字节组成,当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。在上电状态下,DS18B20默认的精度为12位。启动后它保持低功耗等待状态。当需要执行温度测量和AD转换时,总线控制器必须发出温度转换命令。在那之后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄存器中,DS18B20继续保持等待状态。单片机可通过单线接口可以读到该数据,读取时低位在前,高位在后。
2、三个重要的DS18B20指令
<1> CCH:跳过ROM指令,忽略64位ROM地址,直接向DS18B20发起各种温度转换指令。
<2> 44H:温度转换指令,启动DS18B20进行温度转换,转换时间最长为500ms(典型值为200ms),结果保存在高速RAM中。
<3> BEH:读暂存器指令,读取高速暂存存储器9个字节的内容。
3、读取一次DS18B20温度的基本操作
<1> 主机对DS18B20进行复位初始化。
<2> 主机向DS18B20写0xCC命令,跳过ROM。
<3> 主机向DS18B20写0x44命令,开始进行温度转换。 <4> 等待温度转换完成。
<5> 主机对DS18B20进行复位初始化。
<6> 主机向DS18B20写0xCC命令,跳过ROM。
<7> 主机向DS18B20写0xBE命令,依次读取DS18B20发出的从第0一第8,共九个字节的数据。如果只想读取温度数据,那在读完第0和第1个数据后就不再理会后面DS18B20发出的数据即可,或者通过DS18B20复位,停止数据的输出。
具体的代码实现,可以参考一下框架:
4、单元实训题目
注意:如果你利用大赛提供的DS18B20的库文件,也就是onewire.c和onewire.h,进行程序设计的时候,没能正确的读出温度传感器的数值,对库文件中代码的时序进行适当的调整即可。至于怎么调整,调整多少,要实际调试。
【注】:更多的资源和资料、MM模式源码下载、IO模式源码资源,详见“小蜜蜂笔记”以下链接:
单总线温度传感器DS18B20的基本原理与应用开发
老师,您好,我想请问一下怎样看一个延时函数它的延时时间是多长,比如uChar8 i; while(t--) {for(i = 0; i < 12; i++);}这样子的延时函数,如果t=1,那么它是延时多长时间呢? Sunburstone 发表于 2018-12-6 21:32
老师,您好,我想请问一下怎样看一个延时函数它的延时时间是多长,比如uChar8 i; while(t--) {for(i = 0; i ...
虽然已经一年了,可能你都知道了,电视延时时间可以再调试时看 老师 你好 因为是第一次参加蓝桥杯 那个底层库文件是要我自己加进去 还是他已经帮你放进软件的库文件里边,然后我直接引用就可以了呢? 老师这里为何写入初始时间的时候可以写入BCD码,但读取出来只能是十六进制数呢?
为什么读出来的是95.9,不管怎么对DS18B02哈气,数值都不变?
页:
[1]