单片机温度采集与显示_第1页
单片机温度采集与显示_第2页
单片机温度采集与显示_第3页
单片机温度采集与显示_第4页
单片机温度采集与显示_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计目的(1)利用单片机及相应温度传感器设计单检测节点或多检测节点数字温度计(2)精度误差:0.5摄氏度以内;测温范围:10-50摄氏度(3)LED数码管或LCD直接显示(4)完成对设计系统测试2、数字温度计正文 摘要:随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术,本文主要介绍了一个基于89C52单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行介绍,该系统可以方便的实现温度采集和显示,并可根据需要任意设定上下限报警温度,使用起来相当方便,适合于我们日常生活和嵌入其它系统中,作为其AT89C52结合最简温度检测系统,该系统恶劣环境下进行现场温度测量,有广泛的应用前景。本文将介绍一种基于单片机往制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。关键词:单片机,数字控制,温度计,DSIBB20, AT89C522.1引言随着科技的不断发展,现代社会对各种信息参数的准确度和精确度的要求都有了几何级的增长,而如何准确而又迅速的获得这些参数就需要受制于现代信息基础的发展水平。在三大信息信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机技构中,传感器属于信息技术的前沿尖端产品,尤其是温度传感器技术,在我国各领域己经引用的非常广泛,可以说是渗透到社会的每一个领域,人民的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段传统的分立式温度传感器模拟集成温度传感器智能温度传感器目前的智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的,它是微电子技术、计算机技术和自动测试技术(ATE)的结晶,特点是能输出温度数据及相关的温度控制量,适配各种微控制器(MCU)。社会的发展使人们对传感器的要求也越来越高,现在的温度传感器正在基于单片机的基础上从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展,并朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展,本文将介绍智能集成温度传感器DS18B20的结构特征及控制方法,并对以此传感器,AT89C52单片机为控制器构成的数字温度测量装置的工作原理及程序设计作了详细的介绍。与传统的温度计相比,其具有读数方便,测温范围广,测温准确,输出温度采用数字显示,主要用于对测温要求比较准确的场所,或科研实验室使用。该设计控制器使用ATMBL公司的AT89C52单片机,测温传感器使用DALLAS公司DS18B20,用液晶来实现温度显示。2.2系统方案论证该系统主要由温度测量和数据采集两部分电路组成,实现的方法有很多种,下面将列出一种在日常生活中和工农业生产中经常用到的实现方案:2.2.1系统设计方案数字温度芯片DS18B20测量温度,输出信号全数字化.便于单片控制,省去传统的测温方法的很多外围电路。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单体积也不大。采用51单片机控制,软件编程的自由度大,可通过控制工作,还可以与PC机通信上传数据,另外AT89C52在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。 该系统利用AT89C52芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。2.2.1.1 数字温度计设计方案论证由于本设计是测温电路,可以使用温度传感器利用其感温效应,在将随被测温度变化的电压或电流采集过来,在其内部进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,将被测温度显示出来,这种设计不需要用到A/D转换电路,感温电路比较容易,所以采用了温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。2.2.2 方案的总体设计框图温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89C52,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示。 单片机 温度传感器LED显示温度时钟震荡温度报警单片机复位 图l 总体设计方框图2.3系统器件的选择和性能介绍2.3.1单片机的性能介绍AT89C52单片机为40引脚双列直插式封装。引脚排列和逻辑符号如图2所示:各引脚功能简单介绍VCC:供电电压GND:接地P0口:P0口为一个8位漏级开路双向1/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写“1”时,被定义为高阻态输入。PO能够用于外部程序数据存储器,它可以被定义为数据地址的第八位. 在FLASH编程时,PO口作为原码输入口,当FLASH进行校验时,PO输出原码,此时PO外部电位必须被拉高P1口:P1口是一个内部提供上拉电阻的8位双向1/0口,P1口缓冲器能接收输出4TTL门电流.P1口管脚写入“1后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。图2 AT89C52单片机引脚图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口也可作为AT89C52的一些特殊功能口:P3.0 RDX(串行输入口)P3.1 RDX(串行输出口)P3.2 INTO(外部中断0)P3.3 INTO(外部中断1)P3.4 T0(记时器0外部输入)P3.5 Tl(记时器1外部输入)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通) 同时P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,Al王端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部偷出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFRBEH地址上置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温度传感器的选择和性能介绍这里采用DALLAS公司的数字温度传感器DS18B20作为测温元件 2.3.2.1 DS18B20性能介绍DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。温度测量范围为-55+125摄氏度,可编程为9位12位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。被测温度用符号扩展的16位数字量方式串行输出:其工作电源既可以在远端引入,也可以采用寄生电源方式产生:多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。 DS18B20的性能特点如下:独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内适应电压范围更宽,电压范围:3.0-5.5V,在寄生电源方式下可由数据线供电测温范围-55+125,在-10+85时精度为+/-0.5零待机功耗可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快用户可定义报警设置报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作以上特点使DSISB20非常适用与多点、远距离温度检测系统。DSISB20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列、各种封装形式如图4.2所示,DQ为数据输刀输出引脚.开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源;GDN为地信号;VDD为可选择的VDD引脚。当工作于寄生电源时,此引脚必须接地。其电路图3所示: 图 3外部封装形式和传感器电路图2.3.2.2 DS18B20使用中的注意事项DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题: DS18B20从测温结束到将温度值转换成数字量需要一定的转换时间,这是必须保证的,不然会出现转换错误的现象,使温度输出总是显示85。在实际使用中发现,应使电源电压保持在5V左右,若电源电压过低,会使所测得的温度精度降低。较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此,当单总线上所挂DS18B20超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,程序读该DS18B20时,将没有返回信号,程序进入死循环,这一点接和软件设计时也要给予一定的重视。 2.3.2.3 DS18B20内部结构图4为DS18B20的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。DS18B20采用3脚PR-35封装或8脚SOIL封装,其内部结构框图如图4所示: 图4 DS18B20内部结构64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18320可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入报警上下限。 DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图5所示。低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和RO决定温度转换的精度位数,来设置分辨率。 图5 DS18B20字节定义 表1 DS18B20温度转换时问表 由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。高速暂存RAM的第6、7, 8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据读数据时低位在先,高位在后,数据格式以0.0625/ LSB形式表示。表2 LSB和MSB的位定义当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表3是一部分温度值对应的二进制温度数据。DS18B20完成温度转换后,就把测得的温度值与RAN中的TH, T L字节内容作比较。若T TH或TTL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。 在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,井和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。DS18020的测温原理是这样的器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振的振荡频率随温度变化明显改变,所产生的信号作为减法计数器2的脉冲输入。器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度侧量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55C所对应的一个基数分别置入减法计数器1I温度寄存器中,计数器1和温度寄存器被预置在-55C所对应的一个基数值。减法计数器1对低温度系数晶振所产生的脉冲信号进行减法计数,当减法计数器1的数值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振所产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。其输出用于修正减法计数器的预置值,只要计数器门仍未关闭就重复上述过程,直到温度寄存器值大致被测温度值。 表3 一部分温度对应值表DS18B20有六条控制命令,如表所示:指令约定代码操作说明温度转换44H启动DS18B20进行温度转换读暂存器BEH读暂存器9个字节内容写暂存器4EH将数据写入暂存器的TH, TL字节复制暂存器48H把暂存器的TH, TL字节写到E2RAh1中重新调E2RAMB8H把E2RAh1中的TH, TL字节写到暂存器TH, TL字节读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPU 2.3.2.4 DS18B20的通信协议 DS18B20器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲,应答脉冲时隙;写0,写1时隙;读0,读1时隙。a)复位和应答脉冲时隙每个通信周期起始于微控制器发出的复位脉冲,其后紧跟DS18B20发出的应答脉冲,在写时隙期间,主机向DS18B20器件写入数据,而在读时隙期间,主机读入来自DS18B20的数据。在每一个时隙,总线只能传输一位数据。b)写时隙当主机将单总线DQ从逻辑高拉到逻辑低时,即启动一个写时隙,所有的写时隙必须在60120us完成,且在每个循环之间至少需要1us的恢复时间。时隙期间,微控制器在整个时隙中将总线拉低;而写1时隙期间,微控制器将总线拉低,然后在时隙起始后15us之释放总线。c)0读时隙DS18B20器件仅在主机发出读时隙时,才向主机传输数据。在主机发出读数据命令后,必须马上产生时隙,以便DS18B20能够传输数据。每个读时隙都由主机发起,至少拉低总线1us。在主机发起读时隙之后,DS18B20器件才开始在总线上发送0或1,若DS18B20发送1,则保持总线为高电平。若发送为0,则拉低总线当发送0时,DS18B20在该时隙结束后,释放总线,由上拉电阻将总线拉回至高电平状态DS18B20发出的数据,在起始时隙之后保持有效时间为15us。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要,系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲) 发ROM劝能命令 发存储器操作命令 处理数据。2.3.3 DS18B20温度传感器与单片机的接口电路DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图5所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。 当S18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时问最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的.图5 DS18B20与单片机连接2.4 系统整体硬件电路2.4.1 主板电路系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,见附录。其中蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示。2.4.2 显示电路显示电路是使用74HC373锁存器和74LS138译码器分别控制段选和位选,利用动态显示。好处是LED数码管数量大时,电路简单。2.4.3 温度报警电路本设计的发挥部分,是加入了报警,如果我们所设计的系统是监控某一设备,当设备的温度超过我们所设定的温度值时,系统会产生报警.报警时由单片机产生一定频率的脉冲,由P2.7引脚输出,P2.7外接一只PNP的三极管来驱动杨声器发出声音,以便操作员来维护,从而达到报警的目的。如下图. 图6 温度报警电路2.5 系统软件2.5.1 程序分析主机发送(Tx)一复位脉冲(最短为480 us)的低电平信号。接着主机使释放此线并进入接收方式(Rx)总线经过4.7K的上拉电阻被拉至高电平状态。在检测到I/引脚上的上升沿之后,DS18B20等待1560us并且接着发送脉冲(60240us的低电平信号)。然后以存在复位脉冲表示DSI8B20已经推备好发送或接收,然后给出正确的ROM命令和存储操作命令的数据。DS1SB20通过使用时间片来读出和写入数据时间片用于处理数据位和进行何种指定操作的命令。它有写时间片和读时间片两种:写时间片:当主机把数据线从逻辑高电平拉至逻辑低电平时,产生写时间片,有两种类型的写时间片:写1时间片和写0时间片。所有时间片必须有60微秒的持续期,在各写周期之间必须有最短为l微秒的恢复时间。读时间片:从DSI8B20读数据时,使用读时间片。当主机把数据线从逻辑高电平拉至逻辑低电平时产生读时间片。数据线在逻辑低电平必须保持至少1微秒来自DS18B20的输出数据在时间下降沿之后的15微秒内有效。为了读出从读时间片开始算起15ms的状态,主机必须停止把引脚驱动拉至低电平。在时间片结束时,I/O引脚经过外部的上拉电阻拉回高电平.所有读时向片的最短持续期为60微秒,包括两个读周期间至少lus的恢复时间。一旦主机检测到DSI8B20的存在,它便可以发送一个ROM操作命令,所有ROM操作命令均为8位长。所有的串行通讯,读写每一位数据都必须严格遵守器件的时序逻辑来编程,同时还必须遵守总线命令序列,对单总线的DS18B20芯片来说,访问每个器件都要遵守下列命令序列:首先是初始化,其次执行ROM命令;最后是执行功能命令(ROM命令和功能命令后面以表格形式给出)。如果出现序序混乱,则单总线器件不会响应主机。当然,搜索ROM命令和报警搜索命令、在执行两者中任何一条命令后,要返回初始化。2.5.2 各程序设计与实现2.5.2.1 主程序主程序需要调用5个子程序,各模块程序功能如下:DS18B20复位程序:每次重新从DS18B20读数据时需要系统复位DS18B20写命令程序:DS18B20有六条控制命令,通过此程序来进行控制DS18B20DS18B20读1字节程序:从引脚接收数据并保存数据读出温度程序:对DS18B20进行读数据,并进行处理温度数据处理程序:向5个LED送数,控制系统的显示部分其中因为DS18B20有两个,所以前4个子程序分别有两个,对应相应的DS18B20。主流程图见图7。其中主程序的源程序为:void main()DP=1;while(1)for(w1=0;w15;w1+)for(w2=0;w250;w2+)init1();P2=3;P0=0x06;temp=read_temperature1();display1();for(w3=0;w35;w3+)for(w4=0;w450;w4+)init2();P2=3;P0=0x5b;temp=read_temperature2();display2();2.5.2.2 DS18B20复位程序每次重新从DS18B20读数据时都需要系统复位,这是为了防止原来的操作影响新的数据的正确性。且因为AT89C52工作在12M晶振下,机器周期大约为600us。复位时序:复位要求主CPU数据线下拉500us,然后释放。DS18B20收到信号后等待1660us左右,后发出60240us的存在低脉冲,主CPU收到此信号表示复位成功。复位流程图见图8.源程序:void init1()DQ1=1;delay(8);DQ1=0;delay(80); DQ1=1;delay(15); 图7 主流程图 图8 复位流程图2.5.2.3 DS18B20写命令程序写时序均起始于主机拉低总线,产生写1时序的方式:主机在拉低总线后,接着必须在15us之内释放总线。产生写0时序的方式:在主机拉低总线后,只需在整个时序期间保特低电平即可(至少60us)。在写字节程序中的写一位的时候,没有按照通常的分别写0时序和写1时序,而是把两者结合起来,当主机拉低总线后在15us之内将要写的位c给DQ。如果c是高电平,满足15us内释放总线的要求;如果c是低电平,则DQ=0这条语句仍然是把总线拉在低电平,最后都通过延时58us,完成一个写时序(写时序O或写时序1)过程.写时间时序:当主机把数据从逻辑高电平拉到逻辑低电平的时候,写时间隙开始,有两种写时间隙,写1时间隙和写0时间隙。所有写时间隙必须最少持续60us,包招两个写周期至少1us的恢复时间。I/O线电平变低后,DS18B20在一个15us到60us的窗口内对I/O线采样。如果线上是高电平,就写1.如果是低电平,就写0.主机要生成一个写0时间隙,必须把数据缓拉到低电平然后释放,在写时间隙开始后的15us内允许数据线拉到高电平。主机要生成一个写0时间隙,必须把数据线拉到低电平并保存60us。每个读时隙部由主机发起,至少拉低总线1us,在主机发起读时序之后,单总线器件才开始在总线上发送0或1。所有读时序至少需要60us。写命令流程图见图9。源程序:假设要写1B的数据,且数据放在dat中/向1-WIRE 总线上写1个字节void write_byte1(int dat) /写一个字节for(i=0;i=1;delay(4);2.5.2.4 DS18B20读1字节程序读时间时序:当从DS18B20读数据时,主机生成读时间隙。当主机把数据从高电平拉到低电平时,写时间隙开始,数据线必领保持至少1us;从DS18B20输出的数据在读时间隙的下降沿出现后15us内有效.因此,主机在读时间隙开始后必须把I/O脚驱动拉为的电平保持l5us,以读取I/O脚状态。在读时间隙的结尾,I/O引脚将被外部上拉电阻拉到高电平。所有读时间隙必须最少60us,包括两个读周期至少1us的恢复时间。读数据流程图见图10。源程序:从总线上取1个字节int read_byte1() /读一个字节for(k=0;k=1;DQ1=1; /释放总线if(DQ1)value=value|0x80;delay(4);return value;图10 读数据流程图 图9 写命令流程图2.5.2.5读温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。把读到的数据分别转化成整数部分和小数部分。当符号位为1,即温度为零下时,进行报警程序。其程序流程图如图11所示.源程序:int read_temperature1() /读温度函数init1();write_byte1(0xcc); /跳过ROM命令write_byte1(0x44); /写转换指令delay(300);init1();write_byte1(0xcc);write_byte1(0xbe); /写读温度指令LSB=read_byte1();MSB=read_byte1();ss=MSB&0x0f8;if(ss=0x00)MSB4; /整数部分elseDP=0;delay(50);DP=1;P2=7;P0=table0;MSB=0x00;return MSB; 图11 读温度程序流程图2.5.2.6 温度数据处理程序温度数据处理部分在硬件上使用74HC373锁存器和74LS138译码器分别控制段选和位选,利用动态显示。好处是LED数码管数量大时,电路简单。而软件部分则通过向74LS138译码器发送信号选中某个LED后再将相应的数据发给74HC373锁存器进行显示。本设计运用了5个LED,其中第1个为两个DS18B20的序号,第2个显示“”,后三个为温度,其中最后一位为小数部分。如当前1号DS18B20所测得的温度为30.5,则显示“130.5”。而且,当温度不在1050之间时,蜂鸣器响且灯亮。源程序:void display1() /显示函数while(MSB50)DP=0;delay(50);DP=1;P2=7;P0=table0;read_temperature1();P2=4;P0=0x40;delay_50us(5);P2=5;P0=tabletemp/10+1;delay_50us(5);P2=6; /整数部分显示P0=tabletemp%10+1|0x80;delay_50us(5);LSB=LSB&0x0f;P2=7;P0=tableLSB%10+1; /小数部分显示delay_50us(5);2.5.3 整体源程序#includesbit DQ1=P13;sbit DQ2=P14;/温度输入口sbit DP=P12;int table=0xff,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,i,k,value,MSB,LSB,temp,ss,w1,w2,w3,w4;void delay_50us(int m)int j;for(;m0;m-)for(j=5;j0;j-);void delay(int t)while(t-);/*DS18B20复位函数*/void init1()DQ1=1;delay(8);DQ1=0;delay(80); /大约600u秒,在12M晶振下DQ1=1;delay(15);/*DS18B20写命令函数*/向1-WIRE 总线上写1个字节void write_byte1(int dat) /写一个字节for(i=0;i=1;delay(4);/*DS18B20读1字节函数*/从总线上取1个字节int read_byte1() /读一个字节for(k=0;k=1;DQ1=1; /释放总线if(DQ1)value=value|0x80;delay(4);return value;/*读出温度函数*/int read_temperature1() /读温度函数init1();write_byte1(0xcc); /跳过ROM命令write_byte1(0x44); /写转换指令delay(300);init1();write_byte1(0xcc);write_byte1(0xbe); /写读温度指令LSB=read_byte1();MSB=read_byte1();ss=MSB&0x0f8;if(ss=0x00)MSB4; /整数部分?elseDP=0;delay(50);DP=1;P2=7;P0=table0;MSB=0x00;return MSB;/*温度数据处理函数*/void display1() /显示函数while(MSB50)DP=0;delay(50);DP=1;P2=7;P0=table0;read_temperature1();P2=4;P0=0x40;delay_50us(5);P2=5;P0=tabletemp/10+1;delay_50us(5);P2=6; /整数部分显示P0=tabletemp%10+1|0x80;delay_50us(5);LSB=LSB&0x0f;P2=7;P0=tableLSB%10+1; /小数部分显示delay_50us(5);/*DS18B20复位函数*/void init2()DQ2=1;delay(8);DQ2=0;delay(80); /大约600u秒,在12M晶振下DQ2=1;delay(15);/*DS18B20写命令函数*/向1-WIRE 总线上写1个字节void write_byte2(int dat) /写一个字节for(i=0;i=1;delay(4);/*DS18B20读1字节函数*/从总线上取1个字节int read_byte2() /读一个字节for(k=0;k=1;DQ2=1; /释放总线if(DQ2)value=value|0x80;delay(4);return value;/*读出温度函数*/int read_temperature2() /读温度函数init2();write_byte2(0xcc); /跳过ROM命令write_byte2(0x44); /写转换指令delay(300

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论