基于单片机下的数字温度计(DS18B20)

更新时间:2023-05-24 10:46:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于单片机的数字温度计,温度传感器用DS18B20

基于单片机的数字温度计设计

1、概论:

温度是一种最基本的环境参数,人民的生活与环境的温度息息相关,在工业生产过程中要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要意义。在单片机的应用中,一个很重要的应用就是对温度进行检测。测量温度的关键是温度传感器,采用智能温度传感器以实现温度数字化,既能以数字形式直接输出被测温度值,具有测量误差小,分辨力高,抗干扰能力强,能够远程传输数据,带串行总线接口等优点。温度的数字输出显示在7段LDE数码管显示器上。单片机、温度传感器与7段LED数码管显示器等电子元器件的互联,可以研制和开发出具有高性价比的新一代测温系统——基于单片机的数字温度计。

基于单片机的数字温度计设计,即对温度进行实时测量,使用单线数字温度传感器DS18B20把温度信号直接转换成数字信号输入单片机。经单片机处理后,将实时温度显示在两个7段LED数码管显示器上。

完成本设计需要软件编程和硬件电路设计,需要用到两种软件。

1.1、软件编程Keil51的简介

软件编程用Keil Software公司提供的产品软件uVision2 IDE,它集项目管理、编译工具、代码编写工具、代码调试以及安全仿真于一体,适合个人开发或人数少、多开发过程的管理还不成熟的开发团体,这一软件简单易用。

1.2、硬件电路设计Proteus的简介

硬件电路设计使用英国Lab Center Electronics公司推出的Proteus用于仿真单片机及其外围设备的EDA工具软件。Proteus具有高级原理布图(isis)、混合模式仿真(Prospice)、PCB设计以及自动布线(ARES)等功能。Proteus的虚拟仿真技术(USM)第一次真正实现了在物理原型出来之前对单片机应用系统进行设计开发和测试。

Keil51与Proteus配合使用可以在不需要硬件投入的情况下,完成单片机汇编语言、C语言等应用系统的仿真开发,从而缩短实际系统的研发周期,降低开发成本。

1.3、设计中用到的所有电子元器件

单片机(AT89S51)、温度传感器(DS18B20)、7段LED数码管、晶振、电阻排、电容、电阻、PNP型三极管、74HC245芯片等

2、系统器件选择

2.1、 单片机的选择

基于单片机的数字温度计,温度传感器用DS18B20

对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有内部RAM,系统又需要大量内存存储数据,因而不适用。AT89S51 是美国 ATMEL 公司生产的低功耗,高性能 CMOS8 位单片机,片内含 4kbytes 的可编程的 Flash 只读程序存储器,兼容标准 8051 指令系统及引脚。它集 Flash 程序存储器既可在线编程(ISP),也可用传统方法进行编程,所以低价位 AT89S51单片机可为提供许多高性价比的应用场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。单片机AT89S51 具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。主要特性如下图-1所示:

●与MCS-51 兼容

●4K字节可编程闪烁存储器

●寿命:1000写/擦循环

●数据保留时间:10年

●全静态工作:0Hz-24Hz

●三级程序存储器锁定

●128*8位内部RAM

●32可编程I/O线

●两个16位定时器/计数器

●5个中断源 AT89S51单片机引脚如图-1所示

●可编程串行通道

●低功耗的闲置和掉电模式

●片内振荡器和时钟电路

2.2 89S51 引脚功能介绍:

AT89S51 单片机为40 引脚双列直插式封装,其引脚排列和逻辑符号如图-1 所示:

各引脚功能简单介绍如下:

●VCC:供电电压

●GND:接地

基于单片机的数字温度计,温度传感器用DS18B20

●P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。

当P1口的管脚写“1”时,被定义为高阻输入。P0能够用于外部程序

数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,

P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0

外部电位必须被拉高。

●P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收

输出4TTL门电流。P1口管脚写入“1”后,电位被内部上拉为高,可

用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内

部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

●P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输

出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻

拉高,且作为输入。作为输入时,P2口的管脚电位被外部拉低,将

输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器

或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉的优势,当对外部八位地址数

据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在

FLASH编程和校验时接收高八位地址信号和控制信号。

●P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门

电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是

由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口:

P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2 INT0(外部中断0)

P3.3 INT1(外部中断1)

P3.4 T0(记时器0外部输入)

P3.5 T1(记时器1外部输入)

P3.6 WR (外部数据存储器写选通)

P3.7 RD (外部数据存储器读选通)

同时P3口同时为闪烁编程和编程校验接收一些控制信号。

●RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高

基于单片机的数字温度计,温度传感器用DS18B20

平时间。

●ALE / PROG :当访问外部存储器时,地址锁存允许的输出电平用于锁存地

址的地位字节。在FLASH编程期间,此引脚用于输入编程脉

冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此

频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲

或用于定时目的。然而要注意的是:每当用作外部数据存储

器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH

地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE

才起作用。另外,该引脚被略微拉高。如果微处理器在外部

执行状态ALE禁止,置位无效。

●PSEN:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个

机器周期PSEN两次有效。但在访问内部部数据存储器时,这两次有

效的PSEN信号将不出现。

●EA/VPP:当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部

锁定为RESET;当EA端保持高电平时,访问内部ROM。在FLASH编

程期间,此引脚也用于施加12V编程电源(VPP)。

●XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

●XTAL2:来自反向振荡器的输出。

2.3、温度传感器的选择

2.3.1 DS18B20 简单介绍

美国Dallas公司生产的单线数字温度传感器DS18B20,可以把温度模拟信号直接转换成串行数字信号供微机处理,是模/数转换器件,而且读DS18B20信息或写信息仅需单线接口,使用非常方便,新型的单线数字温度传感器体积小,精度高,使用更灵活。

DS18B20有三个引脚,GND接地;DQ为数字信号输入输出端;Udd为外接电源输入端。

基于单片机的数字温度计,温度传感器用DS18B20

DS18B20的内部结构如图-2所示:

DS18B20内结构主要由4部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH、TL和配置寄存器。

64位光刻ROM:光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码,即ID。它的作用是使每一个DS18B20的地址都各不相,可以实现在相同的总线上挂接多个DS18B20的目的。64位光刻ROM的排列是开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。

温度传感器:在DS18B20温度传感器的使用中,以9位转化为例,从DS18B20中得到16位符号扩展的二进制补码读数形式,以0.5℃/LSB的形式表达,其中S为符号位,二进制的数存储在DS18B20的2个8位的RAM中,这是9位转化后得到的16位数据,其中前面5位是符号位,如果测得温度大于0℃,这5位为0,只要将测到的数值乘以0.5即可得到实际温度;如果温度小于0℃,这5位为1,测得到的数值需要取反加1再乘以0.5即可得到实际温度。

非发挥的温度报警触发器TH、TL:DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的电可擦除的EEPRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。当温度达到低温或高温的时候,温度报警触发器会发出警报。

高速暂存RAM:高速暂存存储器包含了9个连续字节,如表-1,当温度转换命令发出后,经转换所得的温度值存放在高速暂存存储器的第0和第1个字节内,第0个字节存放的是温度的低8位信息,第1个字节存放的是温度的高8位信息,单片机可通过单线接口读到该数据,读取时低位在前,高位在后;第2、3字节是TH、TL

基于单片机的数字温度计,温度传感器用DS18B20

的易失性拷贝,第4个字节是结构寄存器的易失行拷贝,这三个字节的内容每一次上电复位时被刷新;第5、6、7字节用于内部计算;第8个字节是冗余检验字节。Ds18B20的设置位有一个字节,该字节的各位定义为TMR1R011111,每一次进行针对DS18B20的读写前,都需要对DS18B20进行设置,从上面的定义可以看出,该字节的低5位一直都是1,TM位是测试模式位,用于设置DS18B20在工作模式及测试模式。在DS18B20出厂时该位被置为0,,用户不要进行改动,R1、R0用来设置分辨率。

高速暂存存储器的内容及字节地址 表-1

寄存器内容

温度值低位(LS) 温度值高位(MS)

高温限值(TH)

低温限值(TL)

配置寄存器

保留

保留

保留

CRC校验值

DS18B20的通信协议:在对DS18B20进行读写编程时,必须严格保证读写时序,否则将无法读取所测温度结果。

根据DS18B20的通信协议,主机控制DS18B20完成温度转换必须经过3个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送第一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。DS18B20的ROM指令如下表-2所示,DS18B20的RAM指令如下表-3所示

复位要求主CPU将数据线下拉50us,然后释放,DS18B20收到信号后等待16~240us的存在低脉冲,主CPU收到此信号表示复位成功。

DS18B20的ROM指令 表-2

指令 约定代码

字节地址 0 1 2 3 4 5 6 7 8 功能

基于单片机的数字温度计,温度传感器用DS18B20

温度变化 44H 启动DS18B20进行温度转换,12位转换时最

长为750ms(9位为93.75ms),结果存入内部9

字节RAM中

读暂存器

写暂存器 0BEH 4EH 读内部RAM中9字节的内容 发出向内部RAM的3、4字节上、下限温度

数据命令,紧跟该命令之后是传送两字节的数据

复制暂存器

重调EEPROM

读供电方式 48H 0B8H 0B4H 将RAM中第3、4字节内容复制到EEPROM中 将EEPROM中内容恢复到RAM中第3、4字节 读DS18B20的供电模式,寄生供电时DS18B20

发送0,外接电源供电DS18B20发送1

DS18B20的RAM指令 表-3

指令

读ROM 约定代码 33H 功能 读取DS18B20温度传感器ROM中的编码

(即64位地址)

符合ROM 55H 发出命令后,接着发出64位Rom编码,

访问单总线上与该编码对应的DS18B20,使

之作出响应,为下一次该DS18B20读写准备

搜索ROM 0F0H 用于确定挂接在同一个总线上DS18B20

的个数和识别64位的Rom地址,为操作各

器件做好准备

跳过ROM

报警搜索命令 0CCR CECH 跳过ROM工作 执行后只有温度超过设定值上限或下

限的芯片才能作出响应

2.3.2 DS18B20使用中的注意事项

DS18B20 虽然具有测温系统简单、测温精度高、连接方便、占用口线少等

优点,但在实际应用中也应注意以下几方面的问题:

●DS18B20 从测温结束到将温度值转换成数字量需要一定的转换时间,这是

基于单片机的数字温度计,温度传感器用DS18B20

必须保证的,不然会出现转换错误的现象,使温度输出总是显示85。

●在实际使用中发现,应使电源电压保持在5V 左右,若电源电压过低,会使

所测得的温度精度降低。

●较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间

采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证

读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统

程序设计时,对DS1820操作部分最好采用汇编语言实现。

●在DS18B20的有关资料中均未提及单总线上所挂DS18B20 数量问题,容易使

人误认为可以挂任意多个DS18B20,在实际应用中并非如此,当单总线上所

挂DS18B20 超过8 个时,就需要解决微处理器的总线驱动问题,这一点在

进行多点测温系统设计时要加以注意。

●在DS18B20测温程序设计中,向DS18B20 发出温度转换命令后,程序总要等

待DS18B20的返回信号,一旦某个DS18B20 接触不好或断线,当程序读该

DS18B20 时,将没有返回信号,程序进入死循环,这一点在进行DS18B20

硬件连接和软件设计时也要给予一定的重视。

2.3.3 DS18B20测温原理

DS18B20的测温原理如图-3所示,图中低温度系数晶振的振荡频率受温度的

影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55 ℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数

器1的预置值减到0时温度寄存器的值将加1,减法计数器 1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度值。图中的斜率累加器用于补偿和修正测温过程中的非线性其输出,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。

基于单片机的数字温度计,温度传感器用DS18B20

DS18B20测温原理图 图-3

2.4显示器选择

LED数码管显示器:LED数码管显示器按用途可分为通用7段LED数码管显示器和专用LED数码管显示器,试验中用通用7段LED数码管显示器。

数码管由8个LED(发光二极管)a、b、c、d、e、f、g构成,按结构可分为共阴极和共阳极两种。本设计中使用共阳极数码管,共阳极数码管的8个LED的阳极连接在一起,通常,公共阳极接高电平(一般接电源),其它引脚接LED驱动电路输出端。当某个LED驱动电路的输出端为低电平时,则该端所连接的LED导通并点亮。根据发光字段的不同组合可以显示出各种数字或字符。要使LED数码管显示出相应的数字或字符,必须向其数据口输入相应的字型码。

LED数码管显示器的外形结构 图

-4

基于单片机的数字温度计,温度传感器用DS18B20

3.硬件电路设计

本设计由DS18B20温度传感器芯片测量当前的温度并将转换后的结果送入单片机。然后通过A89S51单片机驱动两位共阳极7段LED数码管显示测量温度值。如附录中本设计硬件电路图所示,本电路主要有DS18B20温度传感器芯片,两位共阳极数码管,AT89S51单片机及相应外围电路组成。其中DS18B20采用“一线制”与单片机相连。

3.1、温度检测电路

DS18B20 最大的特点是单总线数据传输方式,DS18B20 的数据I/O 均由同一条线来完成。DS18B20 的电源供电方式有2 种: 外部供电方式和寄生电源方式。工作于寄生电源方式时, VDD 和GND 均接地, 他在需要远程温度探测和空间受限的场合特别有用, 原理是当1 W ire 总线的信号线DQ 为高电平时, 窃取信号能量给DS18B20 供电, 同时一部分能量给内部电容充电, 当DQ为低电平时释放能量为DS18B20 供电。但寄生电源方式需要强上拉电路, 软件控制变得复杂(特别是在完成温度转换和拷贝数据到E2PROM 时) , 同时芯片的性能也有所降低。外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。因此本设计采用外部供电方式。如下图所示:

温度传感器DS18B20的测量范围为-55℃~+125℃,在-10℃~+85℃时精度为±0.5℃。因为本设计只用于测量环境温度,所以只显示0℃~+85℃。

3.2、显示电路

本设计显示电路采用两位共阳极LED数码管来显示测量得到的温度值。LED数码管能在低电压下工作,而且体积小、重量轻、使用寿命长,因次本设计选用此数码管作为显示器件。

基于单片机的数字温度计,温度传感器用DS18B20

一个LED数码管只能显示一位的字符,如果字符位数不止一位,可以用几个数码管组成,但要控制多位的显示电路需要有字段控制和字位控制,字段控制是指控制所要显示的字符是什么,控制电路应将字符的七段码通过输出口连接到LED的a~g引脚,是某些段点亮,某些段处于熄灭状态。字位控制是指控制在多位显示器中,哪几位发光或那几位不发光,字位控制则需要通过字位码作用于LED数码管的公共引脚,是某一位或某几位的数码管可以发光。

数码管显示电路分为动态显示和静态显示。

静态显示方式是指每一个数码管的字段控制是独立的,每一个数码管都需要

配置一个8位输出口来输出该字位的七段码。因此需要显示多位时需要多个输出口,通常片内并口不够用,需要在片外扩展。

动态显示又称为扫描显示方式,也就是在某一时刻只能让一个字位处于选通状态,其他字位一律断开,同时在字段线上发出该位要显示的字段码,这样在某一时刻某一位数码管就会被点亮,并显示出相应的字符。下一时刻改变所显示的字位和字段码,点亮另一个数码管,显示另一个字符。绕后一次扫描轮流点亮其他数码管,只要扫描速度快,利用人眼的视觉残留效应,会使人感觉到几位数码管都在稳定的显示。

本设计采用数码管动态显示,电路如下图所示:

显示部分电路 图

-6

基于单片机的数字温度计,温度传感器用DS18B20

图中由单片机P1口串接74HC245驱动两位共阳极数码管,上拉电阻排为10K。由P2.0和P2.1通过PNP型三极管Q1,Q2驱动其字位。三极管发射极接高电平,当P2.0或P2.1为低电平时使三极管导通选通数码管的某一位。

3.3、其它外围电路

复位电路:在单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作。实际应用中,复位操作有两种形式:一种是上电复位,另一种是上电与按键均有效的复位。如下图所示

上电复位要求接通电源后,单片机自动实现复位操作。上电瞬间RST引脚获得高电平,随着电容的充电,RST引脚的高电平逐渐下降。只要RST引脚保持两个机器周期的高电平单片机就可以进行复位操作。该电路参数为:晶振为12MHz时,电容为10μF,电阻为8.2KΩ;晶振为6MHz时,电容为22μF,电阻为1 KΩ。本设计采用上电复位电路,电路参数为电容10μF,电阻8.2K.。

晶振电路:单片机的时钟信号通常有两种方式产生:一是内部时钟方式,二是外部时钟方式。

本设计采用内部时钟方式,在单片机内部有一震荡电路,只要在单片机的XTAL1和XTAL2脚外接石英晶体(简称晶振),就构成了自己震荡器并在单片机内部产生时钟脉冲信号。

基于单片机的数字温度计,温度传感器用DS18B20

图中电容器的作用是稳定频率和快速起振,电容值在5~30pF,典型值为30pF。晶振CYS的震荡频率范围在1.2~12MHz间选择,典型值为12MHz和6MHz。本设计采用12MHz晶振,电容值为20 pF。

在电路总体设计中,EA\Vpp脚用于是从外部程序存储器取指还是从内部程序存储器取指的选择信号。当EA\Vpp接高电平时,先从片内程序存储器读取指令,读完4KB后,自动改为片外取指。若EA\Vpp接低电平,则所有指令均从片外程序存储器读取。ALE脚用于输出允许地址所存信号。PSEN脚用于外部程序存储器选通信号,在对外部程序存储器取指操作时此引脚置低电平有效。在执行片内程序存储器取指时PESN脚无效。本设计无片外程序存储器扩展,所以将EA\V pp脚接高电平,ALE及PSEN脚悬空。

4、程序设计

用汇编语言完成对设计的软件编程,程序开始首先对温度传感器DS18B20进行复位,检测是否正常工作;接着读取温度数据,主机发出CCH指令与在线的DS18B20联系,接着向DS18B20发出温度A/D转换44H指令,再发出温度寄存器的温度值BEH指令,并反复调用复位,写入及读取数据子程序,之后再经过数据转换,由数码管显示出来,不断循环。

4.1、程序流程图

基于单片机的数字温度计,温度传感器用DS18B20

总程序流程图 图-9

4.2、程序流程图中内容的说明及部分程序代码

①对DS18B20进行复位,写入和读取温度数据(在温度传感器DS18B20内部

完成,并实现对温度信息的采集);读取温度流程如下:复位→发CCH命令(跳过ROM)→发44H命令→延时1s→复位→发CCH命令(跳过ROM)→发BEH命令(读内部RAM中9字节内容)→连接从总线上读出2个字节的数据(温度数据的低8位和高8位)→结束

部分程序代码:

(1)DS18B20的复位子程序部分:

RESET_1820:

SETB DQ;

NOP

NOP

CLR DQ

;主机发出复位低脉冲

MOV R1,#3;

DLY: MOV R0,#107;

DJNZ R0,$; DJNZ R1,DLY;

基于单片机的数字温度计,温度传感器用DS18B20

;拉高数据线

SETB DQ

NOP

NOP

NOP

;等待DS18B20的回应

MOV R0,#25H;

T2:JNB DQ,T3;

DJNZ R0,T2;

JMP T4;

;标志位flag=1,表示DS18B20存在

T3:SETB FLAG

JMP T5;

;标志位flag=0,表示DS18B20不存在

T5:MOV R0,#117;

T4:RET

注:根据DS18B20的通信协议,每一次读写数据之前都要对DS18B20进行复位,复位要求主机先发出复位低脉冲(大于48us);然后释放,DS18B20收到信号后等待16~60us,然后发出60~240us的存在低脉冲,主机收到此信号表示复位成功。

初始化时序 图-10

(2)DS18B20的写入子程序部分:

WRITE_1820:

MOV R2,#8 ;一位共8位数据

CLR C ;C=0

WR1:

CLR DQ ;总线低位,开始写入

MOV R3,#7;

DJNZ R3,$ ;保持16us以上

基于单片机的数字温度计,温度传感器用DS18B20

RRC A ;把字节DATA分成8个位,循环给C

MOV DQ,C ;写入一个位;

MOV R3,#23;

DJNE R3,$ ;等待

SETB DQ ;重新释放总线;

NOP

DJNZ R2,WR1 ;写入下一个位;

SETB DQ

RET

注:当主机把数据从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。有

两种写时间隙,写1 时间隙和写0 时间隙。所有写时间隙必须最少持续60μs,包括两个写周期至少1μs 的恢复时间。I/O线电平变低后,DS18B20 在一个15μs 到60μs 的窗口内对I/O 线采样。如果线上事高电平,就是写1,如果是低电平,就是写0。主机要生成一个写时间隙,必须把数据线拉到低电平然后释放,在写时间隙开始后的15μs 内允许数据线拉到高电平。主机要生成一个写0 时间隙,必须把数据线拉到低电平并保存60μs。

每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时序之后,单总

线器件才开始在总线上发送0 或1。所有读时序至少需要60us。

写时序 图-11

(3)DS18B20的读取子程序

READ_1820:

MOV R4 ,#2 ;读取两个字节的数字

MOV R1,#29H ;低位存入29H,高位存入28H

RE0:

MOV R2,#8 ;数据一共有8位

RE1:

CLR C

基于单片机的数字温度计,温度传感器用DS18B20

SETB DQ

NOP

NOP

CLR DQ ;读前总线保持为低

NOP

NOP

NOP

SETB DQ ;开始读总线释放

MOV R3,#9;

RE2:

DJNZ R3,RE2 ;延时18us

MOV C,DQ ;从总线读到一个位

MOV R3,#23;

RE3:

DJNZ R3,RE3 ;等待50us

RRC A ;把读得的位值循环移给A

DJNZ R2,RE1 ;读取下一位

MOV @R1,A;

DEC R1

DJNZ R4,RE0;

RET

注:当从DS18B20 读数据时,主机生成读时间隙。当主机把数据从高电平拉

到低电平时,读时间隙开始,数据线必须保持至少1μs;从DS18B20输出的数据在读时间隙的下降沿出现后15μs 内有效。

因此,主机在读时间隙开始后必须把I/O 脚驱动拉为的电平保持15μs,以

读取I/O 脚状态。在读时间隙的结尾,I/O 引脚将被外部上拉电阻拉到高电平。所有读时间隙必须最少60μs,包括两个读周期至少1μs的恢复时间。

读时序 图

-12

基于单片机的数字温度计,温度传感器用DS18B20

②获得实际测量温度(温度传感器DS18B20把数据信息传给单片机,完成数据信息的传输);

数据转化子程序部分:

TURN:

ANL 28H,#07H

ANL 29H,#0F0H

MOV A,28H

ORL 29H,A

MOV A,29H

SWAP A

MOV 29H,A

RET

注:温度传感器DS18B20所测得的温度数据低位存入29H,高位存入28H,将28H中的低4位移入29H中的高4位,获得一个新字节,这个字节就是实际测量的温度。

③将测量的温度数据在两位数码管上显示出来(单片机把数据信息传给LED数码管显示器,实现温度的数字化显示)。

温度显示子程序部分:

DISPLAY:

MOV A,29H;

MOV B,#10;

DIV AB

MOV B_bit ,A ;十位在A

MOV A_bit,B ;个位在B

MOV DPTR ,#TABLE ;指定查表起始地址

MOV R0,#4;

DP1:

MOV R1,#250 ;显示1000次

LOOP:

MOV A,A_bit ;取个位数

MOVC A,@a+DPTR ;查个位数的7段代码

MOV P0,A ;送出个位的7段代码

基于单片机的数字温度计,温度传感器用DS18B20

CLR P2.3 ;开个位显示

ACALL DELAY

SETB P2.3

MOV A,B_bit ;取十位数

MOVC A,@A+DPTR ;查出十位数的7段代码

MOV P0,A ;送出十位的7段代码

CLR P2.2 ;开十位显示

ACALL DELAY ;显示1ms

SETB P2.2

DJNZ R1,LOOP ;250次未完循环

DJNZ R0,DP1 ;4个250次未完循环

RET

5、实例测试

实例测试:将写入程序的单片机插入实验板插座内,检查温度传感器DS18B20连接正常后接通电源,此时,在两位7段LED数码管上将会准确的显示环境温度,无需作任何调整。

为了观察温度传感器DS18B20对稳定变化的灵敏度,可以用手握住DS18B20管,会看到数码管上显示的稳定很快上升至人体温度值,再将手离开DS18B20管,温度又会很快降至环境温度值,温度传感器DS18B20的测量范围为-55℃~+125℃,在-10℃~+85℃时精度为±0.5℃。

基于单片机的数字温度计,温度传感器用DS18B20

总结:温度传感器DS18B20外形像一个小三极管,硬件连接非常简单,应用非常方便。它不仅能测量温度,而且也是一个ADC转换器,它能将测得的温度信号直接转换成数字信号输入到单片机。硬件开销较小,相对需要复杂的软件进行补偿,DS18B20软件编程比较复杂,但是可以把复位、读和写3个基本操作的子程序看成是3个固定的基本模块。

从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

最后,还要感谢我的指导老师和热心的同学,在他们的帮助下我的毕业设计才能顺利完成,谢谢你们!

基于单片机的数字温度计,温度传感器用DS18B20

主要参考文献:

[1] 王守中.单片机的开发入门与典型实例.北京.人民邮电出版社.2007年8月

[2] 张国秀.单片机C语言程序设计教程与实训.北京.北京大学出版社.2008年6月

[3] 王守中.51单片机开发入门与典型实例.北京.人民邮电出版社.2007年8月

[4] 李玉梅.基于MCS—51系列单片机原理的应用设计.北京.国防工业出版社.2006年5月

[5]大明.单片机控制实训指导及综合应用实例.北京.机械工业出版社.2007年4月

[6] 孙俊逸 盛秋林 张铮.单片机原理及应用.北京.清华大学出版社.2007年2月

[7] 王为青 程国钢.单片机KeilCx51应用开发技术.北京.人民邮电出版社.2007年2月

[8] 李朝青.单片机原理及接口技术.杭州.北京航空航天大学出版社.2006年3月

[9] 李广弟.单片机基础.北京.北京航空航天大学出版社.2007年5月

[10]阎石.单片机技术与应用基础.北京.高等教育出版社.2006年7月

本文来源:https://www.bwwdw.com/article/g524.html

Top