温度转换命令子程序主要是发温度转换开始命令。当采用12位分辨率时,转换时间约为750 ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如图8所示。 4 计算温度子程序
计算温度子程序将RAM中读取的值进行BCD码的抓换运算,并进行温度值正负的判断。其流程图如图9所示。 5 显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。显示数据刷新子程序流程图如图10所示。
初始化 显示调用子程序
N 1s到?
Y Y 初次上电?
N 读出温度值 温度计算处理 显示数据刷新
发温度转换开始命令
图 6 主程序流程图
发DS18B20复位命令 发跳过ROM命令 发读取温度命令 读取操作,CRC校验 N 9字节完? Y CRC校验正确? N Y 移入温度暂存器 结束
发DS18B20复位命令 图7 读出温度子程序流程图
发跳过 ROM 命令
结束 发温度转换开始命令 图8 温度转换命令
子程序流程图
开始 N 温度零下? Y 温度值取补码置“—”标志 置“+”标志 计算小数位温度BCD值 计算整数位温度BCD值 结束 图9 计算温度子程序流程图
温度数据移入显示寄存器 N 十位数0? Y N 百位数0? Y 十位数显示符号 百位数不显示 百位数显示数据 (不显示符号) 结束 图10 显示数据刷新子程序流程图
右图为DS18B20 引脚图DS18S20采用3脚PR35封装(或8脚SOIC封装),DQ为数据输入/输出脚,VDD为电源电压。
五 汇编程序
;================================================================
;DS18B20温度计
;采用4位LED共阳显示器显示测温值,显示精度0.1℃,测温范围-55~+125℃ ;用AT89C51单片机,12MHz晶振 ;============================常数定义============================= TIMEL EQU 0E0H ;20ms,定时器0时间常数 TIMEH EQU 0B1H TEMPHEAD EQU 36H
;==========================工作内存定义============================ BITST DATA 20H
TIME1SOK BIT BITST.1 TEMPONEOK BIT BITST.2 TEMPL DATA 26H TEMPH DATA 27H TEMPHC DATA 28H TEMPLC DATA 29H
;============================= 引脚定=========================== TEMPDIN BIT P3.7
;============================= 中断向量========================= ORG 0000H LJMP START ORG 00BH LJMP T0IT
;=============================系统初始========================== ORG 100H START: MOV SP,#60H CLSMEM: MOV R0,#20H MOV R1,#60H
CLSMEM1: MOV @R0,#00H INC R0 DJNZ R1,CLSMEM1 MOV TMOD,#00100001B ;定时器0工作方式1(16BIT) MOV TH0,#TIMEL MOV TL0,#TIMEH ;20ms SJMP INIT ERROR: NOP LJMP START NOP INIT: NOP SETB ET0 SETB TR0 SETB EA MOV PSW,#00H CLR TEMPONEOK LJMP MAIN
;====================== 定时器0中断服务程======================= T0IT: PUSH PSW MOV PSW,#10H MOV TH0,#TIMEH MOV TL0,#TIMEL
义
区
化
序
相关推荐: