温度巡回检测实验教学研究
李元斌
(华中科技大学生命科学与技术学院,湖北武汉430074)
摘 要:温度的巡回检测控制与数字显示在生活、生产中有着广泛的应用。实验是基于8051单片机控制的温度巡回检测控制与数字显示,采用温度传感器DS18B20进行温度检测,用七段数码管LED实时显示温度,采集及显示温度精度可以达到0.1℃。然后利用汇编语言编写程序,从而达到对温度的监测和显示。
关键词:温度传感器DS18B20 8051单片机 七段数码管LED 汇编语言
1 实验目的
(1)掌握应用51单片机进行温度巡回检测的硬件接口技术。
(2)掌握51单片机软件编程方法。
(3)掌握51单片机控制系统的硬件电路及软件程序的调试技术。
2 实验要求
(1)设计出8051与DS18B20的接口电路,及LED动态显示控制电路。
(2)设计温度巡回检测的温度采集,温度转换及LED动态的实时显示的控制程序。
(3)在硬件电路设计和软件程序控制上配合实现温度的实时采集与实时显示,并确保显示温度精度达到0.1℃,尽量减少温度采集与实时显示之间的延时。
3 实验原理
3.1 温度传感器DS18B20工作原理
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。
图1 DS18B20内部结构图
3.2 DS18B20的内部结构
DS18B20采用3脚PR35封装,其内部结构框图如图1所示。
(1)64b闪速ROM的结构如下:
开始8位是产品类型的编号,接着是每个器件的唯一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。
(2)非易失性温度报警触发器TH和TL,可通过软件写入用户报警上下限。
(3)高速缓存存储器。
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM。后者用于存储TH,TL值。数据先写入RAM,经校验后再传给E2RAM。而配置寄存器为高速缓存器中的第5个字节,它的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。该字节各位的定义如下:
低5位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,设置分辨率,如表1所示(DS18B20出厂时被设置为12位)。
表1 R1和R0模式表
由表1可见,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间之间权衡考虑。
高速缓存存储器除了配置寄存器外,还有其他8个字节组成,其分配如下所示。其中温度信息(第1、2字节)、TH和TL值(第3、4字节),以及第6~8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。
当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.062 5℃/LSB形式表示。温度值格式如下:
对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变换为原码,再计算十进制值。表2是对应的一部分温度值。
DS18B20完成温度转换后,就把测得的温度值与TH,TL作比较,若T>TH或T<TL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行告警搜索。
表2 部分温度值
4 实验参考电路图
通过8051的P1.7口与DS18B20的数据线DQ连接,实现传感器与微控制器之间的数据传输。通过I/O接口芯片8155的PB,PC口分别控制4块7段LED显示的段码和位码。
其中PA口预留给系统进行扩展功能,如可以添加键盘(一个4×4的行列式键盘)控制电路,通过软件程序可以使键盘操作实现对传感器相关参数的设置,提高系统的智能性。
通过8051的P1.5口和P1.6口控制2个发光二极管用于当温度不在设置的温度域内时报警显示。
图2 实验参考电路
5 实验参考程序
温度巡回检测系统实验参考程序。
;程序主体
ORG2000H
START:CLR P1.5
CLR P1.6
MAIN:LCALL READTEMP
LCALL TEMPBCD
LCALL TEMPALARM
SJMP MAIN
;获取温度子程序
READTEMP:
LCALL INIT ;先复位
MOV A,#0CCH
LCALL WRITE ;发跳过ROM操作命令
MOV A,#44H
LCALL WRITE ;发启动转换命令
MOV A,#0BEH
LCALL WRITE;发读存储器命令
LCALL READ
MOV 40H,A ;存储读取的转换温度的高8位
LCALL READ
MOV 41H,A ;存储读取的转换温度的低8位
RET
;初始化子程序
INIT:CLR EA
INIT_0:SETB DQ
MOV R2,#200
INIT_1:CLR DQ
DJNZ R2,INIT_1;主机发复位脉冲3*200=600μs
SETB DQ;主机释放总线,改状态为输入
MOV R2,#30
INIT_2:DJNZ R2,INIT_2;1820等待2*30=60μs
CLR C
ORL C,DQ;检测数据线上是否有应答的低电平
JC INIT_0;未准备好,重新初始化
MOV R6,#80
JC INIT_4;数据线变高,初始化成功
DJNZ R6,INIT_3;数据线低电平可持续3*80=240μs
SJMP INIT_0;初始化失败,重来
INIT_4:MOV R2,#240
INIT_5:DJNZ R2,INIT_5;DS18B20应答最少2*240=480μs
RET
;18B20写入数据子程序
WRITE:
CLR EA
MOV R3,#8 ;循环写入8个位,一个字节
WR_1:SETB DQ
MOV R4,#8
RRC A ;写入位从A中移到C
CLR DQ
WR_2:DJNZ R4,WR_2 ;等待16μs
MOV DQ,C ;发送一位数据
MOV R4,#20
WR_3:DJNZ R4,WR_3 ;保证写过程持续60μs
DJNZ R3,WR_1 ;未送完一个字节继续
RET
;读1820数据子程序
READ:CLR EA
MOV R6,#8 ;循环8次,读一个字节
RD_1:CLR DQ
MOV R4,#4
NOP ;低电平持续2μs
SETB DQ ;总线状态为输入
RD_2:DJNZ R4,RD_2 ;等待8μs
MOV C,DQ ;按位读入
RRC A ;读入数据移到A
MOV R5,#30
RD_3:DJNZ R5,RD_3 ;保证读一位数据持续60μs
DJNZ R6,RD_1 ;读完后数据在A中
SETB DQ
RET
;温度数据转换程序,将读取的16位2进制补码数转换为待显示的BCD数据
TEMPBCD:
MOV FLAG,#00H ;将符号标志位清0,0表示为正温度值
MOV R1,TEMPH ;取高8位补码温度值
MOV R2,TEMPL ;取低8位补码温度值
CLR C
MOV A,R1 ;判断温度值是否为负数温度的补码值
SUBB A,#80H
JC NNOP ;温度值为正,不用求其补数
MOV FLAG,#01H ;温度为负值,将符号标志位置1,1表示为负数
CLR C ;求负值温度的绝对值
MOV A,R2
ADD A,#01H
CPL A
ADDC A,#00H
MOV R1,A
NNOP:MOV A,R2 ;将温度的绝对值转换为BCD数
ANL A,#0FH ;将低4位补码值(对应10进制温度值的小数位)
MOV B,#10
MUL AB
MOV B,#16
DIV AB ;将温度值的低4位转换为对应的小数位,保证精度达到0.1℃
MOV 50H,A
MOV A,R2 ;取温度值的整数值(TEMPH的低4位与TEMPL的高4位组成)
ANL A,#0F0H
MOV R2,A
MOV 55H,A ;将温度值对应的整数部分存储用于报警温度域的判断
MOV R4,#3
MOV R1,#51H
LOP1:MOV B,#10 ;将温度值对应的整数值位转换为相应的BCD数
DIV AB
MOV@R1,B
DJNZ R4,LOP1
LOP2:MOV A,R1 ;存储实际温度值的整数值部分对应的位数
SUBB A,#50H
MOV BCDNUM,A
RET
END
6 实验调试
整个系统功能的实现,最关键的阶段是调试。包括硬件的调试,确保电路正常工作;控制程序的调试,保证系统按照既定的目标去工作。对硬件电路的调试首先是动态显示部分的调试,可以将驱动电路与LED显示电路部分一起调试,直接给高或低电平对应特殊的段码或位码,看显示的效果,以此判断LED是否正常,查看各个通路是否正常。软件调试可以分3块:温度采集模块,温度转换为BCD数模块,以及动态显示模块。先调试温度采集模块的DS18B20复位部分,看是否能够使DS18B20复位,以此判断DS18B20是否正常工作,然后确保写和读时序的控制正常。待看到温度能够正确采集到预定存储区后,再调试后续的转换与显示控制模块,后2个模块可与硬件隔离开来调试,可以预设一些数据,看是否能够转换为其对应的BCD数,以此判断算法的正确性。最后是整个软硬件系统的联调,根据显示的效果去检查硬件电路与显示连接部分的通路,检查动态显示的延时控制。经过这几步的调试后,可以得到初步的实验效果,再根据一些如精度要求的细节去细调系统使之完善。
参考文献
沙占友.集成化智能传感器原理与应用[M].北京:电子工业出版社,2004.
万光毅,严义.单片机实验与实践教程[M].北京:北京航空航天大学出版社,2003.
肖来胜.单片机技术实用教程[M].武汉:华中科技大学出版社,2004.
徐仁贵,廖哲智.单片微型计算机应用[M].北京:机械工业出版社,2001.
康华光.电子技术基础(数字部分)[M].北京:高等教育出版社,1999.
林家瑞.微机式医学仪器设计[M].武汉:华中科技大学出版社,2004.
胡欣.DS18S20及其在温度巡回检测中的应用[J].电子技术,2002(5):45~47.
谭家玉.单片机原理及接口技术[M].哈尔滨:哈尔滨工业大学出版社,2003.
姜忠良,陈秀云.温度的测量与控制[M].北京:清华大学出版社,2005.
马云峰.数字温度传感器DS18B20的原理与应用[J].世界电子元器件,2002(1):47~48.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。