正文内容

多功能数字温度计-文库吧

2025-01-02 23:38 本页面


【正文】 、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,℃/LSB式表示。当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令做出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。分别说明如下:初始化 单总线的所有处理均从初始化开始。初始化过程是主机通过向作为从机的DS18B20芯片发一个有时间宽度要求的初始化脉冲实现的。初始化后,才可进行读写操作。2 、ROM操作命令 总线主机检测到DS18B20的存在 便可以发出ROM操作命令之一 这些命令表3。表3 ROM操作指令指令代码Read ROM(读ROM)[33H]Match ROM(匹配ROM)[55H]Skip ROM(跳过ROM)[CCH]Search ROM(搜索ROM)[F0H]Alarm search(告警搜索)[ECH]存储器操作命令如表4。 表4 存储器操作指令指令代码Write Scratchpad(写暂存存储器)[4EH]Read Scratchpad(读暂存存储器)[BEH]Copy Scratchpad(复制暂存存储器)[48H]Convert Temperature(温度变换)[44H]Recall EPROM(重新调出)[B8H]Read Power supply(读电源)[B4H]六、硬件系统框图温度计电路设计总体硬件设计框图如图5所示。图5 硬件系统框图七、系统软件设计框图本次课程设计采用的是protel软件仿真。软件部分由主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图6所示。返回 开始 初始化 调显示子程序 得出温度总子程序图6 主程序流程读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图7所示。发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束 NNYY图7 读出温度子程序流程二进制转换BCD码命令子程序 二进制转换BCD码命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。二进制转换BCD码命令子程序流程图,如图8所示。发DS18B20复位命令发跳过ROM命令发温度转换开始命令结束图8 二进制转换BCD码流程图计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图9所示。开始温度零下?N Y置“+”标志温度值取补码置“”标志计算小数位温度BCD值 计算整数位温度BCD值 结束图9 测量温度流程图八、心得体会 本次的课程设计使我们进一步巩固了书本上的知识,做到了学以致用。这是我们第二次自己动手设计的电路,通过系统仿真软件protel,使我们进一步了解了单片机的设计制作过程,其中最为困难的是软件部分,即编程部分。由于protel并不是很熟练,在使用的过程中有很多原件的名称不知道,从而花费了大量的时间在网上查找,今后应该在这方面多多努力。总结经验的时候我们得出这样的结论,学习应该学以致用,有目的的去学习,如果学了不用等于没学。其次,要学以致用,理论联系实际,这样才会取得事半功倍的效果。九、各部分程序的详细设计步骤。*************************************************。DS18B20的读写程序, *。显示数据通过P1口传输, *。, *。, *。显示温度55到+125度, *。显示采用4位LED共阴显示测温值 *。*************************************************TEMPER_L EQU 40H 。用于保存读出温度的低8位TEMPER_H EQU 41H 。用于保存读出温度的高8位FLAG1 EQU 38H 。是否检测到DS18B20标志位TEMPL EQU 30H 。用于保存读出正确温度值的低8位TEMPH EQU 31H 。用于保存读出正确温度值的高8位TEMPHC EQU 32H 。温度转换寄存器低8位TEMPLC EQU 33H 。温度转换寄存器高8位BUF1 EQU 34H 。显示缓冲寄存器小数位BUF2 EQU 35H 。显示缓冲寄存器个数位BUF3 EQU 36H 。显示缓冲寄存器十数位BUF4 EQU 37H 。显示缓冲寄存器百数位TEMPDIN BIT 。数据脚定义DIN BIT 。小数点控制。********************************************** ORG 0000H 。主程序入口地址 AJMP MAIN 。转主程序 ORG 0003H 。外中断0中断入口 DB 00H,00H,00H,00H,00H,00H,00H。 RETI 。跳至INTEX0执行中断服务程序 ORG 000BH 。定时器T0中断入口地址 DB 00H,00H,00H,00H,00H,00H,00H 。 RETI 。跳至定时器T0执行中断服务程序 ORG 0013H 。外中断1中断入口 DB 00H,00H,00H,00H,00H,00H,00H 。 RETI 。跳至INTEX1执行中断服务程序 ORG 001BH 。定时器T1中断入口地址 DB 00H,00H,00H,00H,00H,00H,00H 。 RETI 。中断返回(不开中断) ORG 0023H 。串行口中断入口地址 DB 00H,00H,00H,00H,00H,00H,00H 。 RETI 。中断返回(不开中断)。**********************************************。两位数码管来显示温度,显示范围00到99度,显示精度为1度。,我们不要求显示小数所以可以抛弃29H的低4位。将28H中的低4位移入29H中的高4位,这样获得一个新字节,这
点击复制文档内容
公司管理相关推荐
文库吧 www.wenkub.com
备案图鄂ICP备17016276号-1