READ: MOV R6, #8 ; 循环次数为8
SETB DAT ; 读出一位程序,执行传感器读时序
NOP
NOP
RD11: CLR DAT
MOV R4, #4
NOP ; 持续低电平2us
SETB DAT ; 释放数据线
RD12: DJNZ R4, RD12 ; 等待8us
MOV C, DAT ; 读入一位
RRC A ; 将读入数据移入累加器A
MOV R5, #28
RD13: DJNZ R5, RD13 ; 保证一个读周期持续60us
DJNZ R6, RD11 ; 循环8次读一个字节
SETB DAT
RET
上述程序执行完毕,可将温度传感器的64位序列号存放在单片机内部RAM 30H ~ 37H单元中。
4.分布式测温系统中温度显示
分布式测温系统中,采用液晶显示可以实现房间号的显示,实际温度的显示,报警上限值的显示以及报警发生时的时间。还可以循环显示多个房间的实际温度和上限值。如图5所示。
图5 分布式测温系统中对应房间温度以及报警上限显示
5.结束语
正确读取多个单总线数字温度传感器DS18B20的温度在分布式测温系统中是非常重要的。由于在程序设计时必须根据严格的时序关系,因此本文作者创新点是详细阐述了初始化时序、读写时序等复杂逻辑关系,设计了正确的温度序列号读取程序和温度读写程序并能够进行液晶显示。由于单总线数字温度传感器DS18B20各个功能的实现是通过各种ROM命令与操作功能命令实现的,这些命令一环扣着一环,每个环都是一个时序的集合。在进行程序调试时,不能像调试其它程序一样用单步执行来进行跟踪,因此对错误查找和程序优化带来了很大的难度。在遇到程序运行出错时,只能够根据错误现象来分析、推测、修改和再运行来解决,而不能直接定位。文中所介绍的单总线数字温度传感器DS18B20程序设计思路与方法,目前已较好地应用于分布式测温系统中,并且满足一定精度要求。