已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
温度测量及显示仿真实现摘 要:单片机在检测和控制系统中得到广泛的应用,温度则是系统常需要测量、控制和保持的一个量。典型的温度测控系统是由模拟温度传感器、A/D 转换电路和单片机组成。但是由于模拟温度传感器输出为模拟信号,必须经过A/ D 转换环节获得数字信号后才能与单片机等微处理器接口,使得硬件电路结构复杂,成本较高。近年来,由于以DS18B20为代表的新型单总线数字式温度传感器的突出优点使得它得到充分利用。DS18B20 集温度测量和A/ D转换于一体,直接输出数字量,接口几乎不需要外围元件,硬件电路结构简单,传输距离远,可以很方便的实现多点测量;与单片机接口几乎不需要外围元件,使得硬件电路结构简单,广泛使用于距离远,节点分布多的场合。介绍了单总线数字温度传感器DS18B20 的特性及工作原理,给出了AT89C51 单片机与DS18B20 构成温度测量系统并详细介绍利用C语言编程实现对DS18B20 访问,并且通过键盘和LED 显示数码管对系统进行控制和显示。实际测试结果表明这种测温系统转换速度快、精度高,整个系统具有稳定性强等特点。关键词:温度测量;DS18B20;AT89C51单片机目 录第1 章 概述.1第2 章 单片机AT89C51.12.1 AT89C51的主要性能参数.12.2 功能特性概述.22.3 AT89C51方框图.22.4 引脚功能说明.22.5 时钟振荡器.42.6 AT89C51软件编程模式.52.7 程序存储器的加密.62.8 编程方法.62.9 Flash编程和校验82.10 编程接口9第3 章 数字温度传感器DS18B20.93.1 DS18B20技术性能描述 .93.2 DS18B20应用范围.103.3 数字温度传感器DS18B20的简单介绍.103.3.1 DS18B20的主要特性103.3.2 DS18B20的外形和内部结构.103.3.3 DS18B20工作原理.113.3.4 DS18B20的供电方式.123.3.5 DS18B20具体说明.12 3.4 AT89C51单片机与DS18B20的接口.143.5 AT89C51单片机读取DS18B20温度值的编程.163.6 DS18B20使用中注意事项.20第4章 显示驱动芯片MAX721920 4.1显示驱动芯片MAX7219的简单介绍.20 4.2 AT89C51单片机与MAV7219的接口与编程.24 4.2.1 向MAX7219传送数据.24 4.2.2 MAX7219的初始化26 4.2.3 数据显示.26第5章 温度的采集处理与显示程序27 5.1处理符号位.27 5.2处理小数部分.27 5.3 处理整数部分28第6章 结束语28参考文献.29致谢.30附录.31附录1:程序清单.31附录2:设计图纸.36附录3:元器件目录表.37盐城工学院本科生毕业论文( 2010)温度测量及显示仿真实现第1章 概 述本文给出了一个简单的单片机系统,该系统是单片机AT89C51采集温度信号并显示的实例,主要叙述了其硬件和软件设计的原理。温度传感器选用目前常用的数字温度传感器DS18B20,采用数码管LED显示,显示驱动为MAX7219。设计系统的总体框图如图1所示。电源输入8V24V 图1 温度采集与显示系统原理框图系统简单地分为5个模块,由外部提供的8V24V直流电源供电。电源模块将输入的8V24V直流电源转换为5V,为系统中的芯片供电,可以使用7805等常用的三端稳压器芯片;温度传感器采集温度信号,温度传感器有模拟输出和数字输出传感器两种形式,这里我将选用具有数字输出的DS18B20;单片机是系统的核心,选用AT89C51;系统采用LED数码管显示温度值;LED显示屏采用独立的显示驱动芯片MAX7219,单片机将待显示的字符写入MAX7219后,MAX7219将会动态地刷新显示内容,无需占用单片机过多的资源。尽管DS18B20的分辨率可以达到0.0625,但其测量精度为0.5。因此设计4位数的LED数码显示管就已足够,显示3位整数(负温度时,为2位整数),1位小数。根据系统的总体设计在充分理解选用的各个芯片的原理以及与单片机接口原理、编程原理的基础上,进行电路原理图的设计。原理图见附录2。第2章 单片机AT89C512.1 AT89C51的主要性能参数(1)与MCS-51产品指令系统完全兼容(2)4K字节可重复擦写Flash闪速存储器(3)1000次擦写周期(4)全静态操作:0Hz-24MHz(5)三级加密程序存储器(6)128*8字节内部RAM(7)32个可编程I/O口线(8)2个16位定时/计数器(9)6个中断源(10)可编程串行UART通道(11)低功耗空闲和掉电模式2.2 功能特性概述AT89C51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。2.3 AT89C51方框图AT89C51方框图如图2所示。图2 AT89C51方框图2.4 引脚功能说明 AT89C51的引脚排列如图3所示。下面简要介绍其各引脚的功能。图3 引脚排列图(1)VCC:电源电压(2)GND:地(3)P0口:P0口是一组8位漏极开关型双向I/O口。作为输出口时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分别转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。(4)P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。Flash编程和程序校验期间,P1接收低8位地址。(5)P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX R1指令)时,P2口线的内容(也即特殊功能寄存器SFR区中R2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。(6)P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被上拉电阻拉高并可作为输出端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。 P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表1所示。表1 P3口的第二功能端口引脚第二功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2INTO(外中断0)P3.3INT1(外中断1)P3.4T0(定时/计数器0)P3.5T1(定时/计数器1)P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通)P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。(7)RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。(8)ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡器频率的1/6输出固定的正脉冲信号,因此它对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。(9)PSEN:程序存储允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,这两次有效地PSEN信号不出现。(10)EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需要注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。(11)XTAL1:振荡器反相放大器的内部时钟发生器的输入端。(12)XTAL2:振荡器反相放大器的输出端。2.5 时钟振荡器AT89C51中有一个用于构成内部振荡器的高增益反向放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路如图4所示。外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路,对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低,振荡器工作的稳定性,起振的难易程度及温度稳定性,如使用石英晶体,推荐电容使用30pF 10pF,而如使用陶瓷谐振器择选择40pF 10pF。图4 内/外部振荡电路用户也可以采用外部时钟。这种情况下,外部时钟脉冲接地XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。由于外部时钟信号时通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。2.6 AT89C51软件编程模式 AT89C51有两种可用软件编程的省电模式,它们是空闲模式和掉电工作模式。其外部引脚状态如表2所示。这两种方式是控制专用寄存器PCON(即电源控制寄存器)中的PD(PCON.1)和IDL(PCON.0)位来实现的。PD是掉电模式,当PD=1时,激活掉电工作模式,单片机进入掉电工作状态。IDL是空闲等待方式,当IDL=1,激活空闲工作模式,单片机进入睡眠状态。如需同时进入两种工作模式,即PD和IDL同时为1,则先激活掉电模式。表2 空闲和掉电模式外部引脚状态模式程序存储器ALEPSENP0P1P2P3空闲模式内部11数据数据数据数据空闲模式外部11浮空数据地址数据掉电模式内部00数据数据数据数据掉电模式外部00浮空数据数据数据(1)空闲节电模式在空闲工作模式状态,CPU保持睡眠状态而所有片内的外设仍保持激活状态,这种方式由软件产生。此时,片内RAM和所有特殊功能寄存器的内容保持不变。空闲模式可由任何允许的中断请求或硬件复位终止。终止空闲工作模式的方法有两种,其一是任何一条被允许中断的事件被激活,IDL(PCON.0)被硬件清除,既刻终止空闲工作模式。程序会首先响应中断,进入中断服务程序,执行完中断服务程序并紧随RETI(中断返回)指令后,下一条要执行的指令就是单片机进入空闲模式那条指令后面的一条指令。其二是通过硬件复位也可将空闲工作模式终止。需要注意的是,当由硬件复位来终止空闲工作模式时,CPU通常是从激活空闲模式那条指令的下一条指令开始继续执行程序的,要完成内部复位操作,硬件复位脉冲要保持两个机器周期(24个时钟周期)有效,在这种情况下,内部禁止CPU访问片内RAM,而允许访问其它端口。为了避免可能对端口产生意外写入,激活空闲模式的那条指令后一条指令不应是一条对端口或外部存储器的写入指令。(2)掉电模式在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM和特殊功能寄存器的内容在终止掉电模式前被冻结。退出掉电模式的唯一方法是硬件复位,复位后将重新定义全部特殊功能寄存器但不改变RAM中的内容,在Vcc恢复到正常工作电平前,复位应无效,且必须保持一定时间以使振荡器重启动并稳定工作。2.7 程序存储器的加密AT89C51可使用对芯片上的3个加密位LB1、LB2、LB3进行编程(P)或不编程(U)来得到如表3所示的功能。表3 加密位保护功能表程序加密位保护类型LB1LB2LB31UUU没有程序保护功能2PUU禁止从外部程序存储器执行MOVC指令读取内部程序存储器的内容3PPU除上表功能外,还禁止程序校验4PPP除上表功能外,同时禁止外部执行当加密位LB1被编程时,在复位期间,EA端的逻辑电平被采样并锁存,如果单片机上电后一直没有复位,则锁存起的初始值是一个随机数,且这个随机数会一直保存到真正复位为止。为使单片机正常工作,被锁存的EA电平值必须与该引脚当前的逻辑电平一致。2.8 编程方法编程前,须按表4和图5设置好地址、数据及控制信号,编程单元的地址加在P1口和P2口的P2.0-P3.0(11位地址范围为0000H-0FFFH),数据从P0口输入,引脚P2.6、P2.7和P3.6、P3.7的电平设置见表4,PSEN为低电平,RST保持高电平,EA/Vpp引脚是编程电源的输入端,按要求加上编程电压,ALE/PROG引脚输入编程脉冲(负脉冲)。编程时,可采用4-20MHz的时钟振荡器,AT89C51编程方法如下:1、在地址上加上要编程单元的地址信号。2、在数据线上加上要写入的数据字节。3、激活相应的控制信号。4、在高电压编程方式时,将EA/Vpp端加上+12V编程电压。5、每对Flash存储列阵写入一个字节或每写入一个程序加密位,加上一个ALE/PROG编程脉冲。改变编程单元的地址和写入的数据,重复1-5步骤,直到全部文件编程结束。表4 Flash存储器编程真值表注:片擦除操作时要求PROG脉冲宽度为10ms图5 校验电路2.9 Flash编程和校验1、Ready/Busy:字节编程的进度可通过“RDY/BSY”输出信号监测,编程期间,ALE变为高电平“H”后P3.4(RDY/BSY)端电平被拉低,表示正在编程状态(忙状态)。编程完成后,P3.4变为高电平表示准备就绪状态。2、程序校验:如果加密位LB1、LB2没有进行编程,则代码数据可通过地址和数据线读回编写的数据,采用如图5所示的电路,程序存储器的地址由P1和P2口的P2.0-P2.3输入,数据由P0口读出,P2.6、P2.7和P3.6、P3.7的控制信号见表4,PSEN保持低电平,ALE|EA、RST保持高电平。校验时,P0口需接上10k左右的上拉电阻。加密位不可直接校验,加密位的校验可通过对存储器的校验和写入状态来验证。Flash存储器编程和程序校验时序图如图(高电压编程)6所示和图(低电压编程)7所示。图7 Flash编程和校验的波形时序(高电压编程方式Vpp=12V)3、芯片擦除:利用控制信号的正确组合并保持ALE/PROG引脚10ms的低电平脉冲宽度即可将PEROM阵列(4K字节)和三个加密位整片擦除,代码阵列在片擦除操作中将任何非空单元写入“1”,这步骤需再编程之前进行。4、读片内签名字节:读签名字节的过程和单元030H、031H和032H的正常校验相仿,只需将P3.6和P3.7保持低电平,返回值意义如下:(030H)=1EH声明产品由ATMEL公司制造。(031H)=51H声明为AT89C51单片机。(032H)=FFH声明为12V编程电压。(032H)=05H声明为5V编程电压。图8 Flash编程和校验的波形时序(高电压编程方式Vpp=5V)2.10 编程接口采用控制信号的正确组合可对和Flash闪速存储列阵中的每一代码字节进行写入和存储器的整片擦除,写操作周期是自身定时的,初始化后它将自动定时到操作完成。第3章 数字温度传感器DS18B203.1 DS18B20技术性能描述 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。 测温范围 55125,固有测温分辨率0.5。 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温 工作电源: 35V/DC 在使用中不需要任何外围元件 测量结果以912位数字量方式串行传送 不锈钢保护管直径6 适用于DN1525, DN40DN250各种介质工业管道和狭小空间设备测温 标准安装螺纹 M10X1, M12X1.5, G1/2任选 PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。3.2 DS18B20应用范围 该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域 轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。 汽车空调、冰箱、冷柜、以及中低温干燥箱等。 供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制3.3 数字温度传感器DS18B20的简单介绍3.3.1 DS18B20的主要特性 适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线DQ(和地线GND)即可实现微处理器与DS18B20的双向通讯 DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温 DS18B20在使用中不需要任何外围元件,全部 传感元件及转换电路集成在形如一只三极管的集成电路内 温范围55125,在-10+85时精度为0.5 可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温 在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快 测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力 负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。3.3.2 DS18B20的外形和内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20采用常见的小功率三极管相同的TO-92封装方式,其封装与引脚图如图9所示。引脚1为地线;引脚2为数据线,应与主CPU的I/O相接;引脚3接外部电源,如采用寄生电源方式,该引脚悬空。图9 DS18B20封装与引脚图3.3.3 DS18B20工作原理 DS18B20的内部结构如图10所示。图10 DS18B20内部结构图DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。DS18B20测温原理如图11所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。图10中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 图11 DS18B20测温原理框图3.3.4 DS18B20的供电方式DS18B20的电源可以外部提供从芯片的VDD输入,也可以由数据线本身提供而无需再接外部电源(从数据线“窃电”),称为寄生电源方式。(1)DS18B20寄生电源强上拉供电方式改进的寄生电源供电方式如下面图12所示,为了使DS18B20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到 E2存储器操作时,用MOSFET把I/O线直接拉到VCC就可提供足够的电流,在发出任何涉及到拷贝到E2存储器或启动温度转换的指令后,必须在最多10S内把I/O线转换到强上拉状态。在强上拉方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺点就是要多占用一根I/O口线进行强上拉切换。图12 寄生电源工作方式(2)DS18B20的外部电源供电方式 外部电源供电方式如图13所示。在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电的方式下,DS18B20的GND引脚不能悬空 ,否则不能转换温度,读取的温度总是85。图13 外部电源工作方式3.3.5 DS18B20的具体说明DS18B20内部具有地址分配如表5所示的9字节RAM。其实字节0和字节1存放DS18B20的温度测量值;字节4存放配置字节,用于设定温度测量的分辨率等参数;字节8是DS18B20自己生成的循环冗余校验码(CRC),在主CPU读取DS18B20数据时,用于校验读取数据的正确性。表5 DS18B20内部RAM分配字节0(Byte0)温度值低字节 TL字节5(Byte5)保留字节1(Byte1)温度值高字节 TH字节6(Byte6)保留字节2(Byte2)TL或用户Byte1字节7(Byte7)保留字节3(Byte3)TH或用户Byte2字节8(Byte8)CRC校验字节字节4(Byte4)配置字节 CONFIG主CPU经DQ向DS18B20发送温度测量(变换)等命令,DS18B20将测量的温度值存放在DS18B20的RAM 字节0和字节1中。除温度变换命令外,还有几个命令,见表6。 表6 DS18B20的部分命令指令代码(十六进制)指令代码(十六进制)Skip ROM(跳过ROM)CChRead Scratchpad(读RAM)BEhConvert Temperature(温度变换)44hWrite Scratchpad(写RAM)4Ehl 命令CCh,跳过ROM。该命令跳过ROM中64位长的序号,既不关心每一个DS18B20中唯一的序号,因此该命令只能在“一总线”上仅接有一个DS18B20时应用。在仅使用单只的DS18B20时,使用该命令可以简化编程。l 命令44h,温度变换。DS18B20接收到该命令后将触发温度测量,收到命令数百毫秒后,温度才能测量完毕,将测量的值存入RAM的字节0和字节1中。l 命令BEh,读RAM存储器。该命令读取DS18B20内部RAM中的数据。读取数据中的头两个字节就是测量的温度值。DS18B20收到BEh命令后,将内部RAM中的数据释放到“一总线”DQ上。设定DS18B20使用默认的12位转换,DS18B20内部RAM中温度值存放在字节0(记为TL)和字节1(记为TH)中,TL和TH的格式如下。TL(Byte0): TH(Byte1): 存储器TH中的bit15bit11为符号位,如果温度为负数,则bit15bit11全为1,否则全为0。存储器TH中的bit10bit0共11位存储温度值。TL的bit3bit0存储温度的小数部分,TL的LSB(最低位)的“1”表示0.0625。将存储器中的二进制数求补,再分别将整数部分和小数部分转换成十进制数合并后就得到被测温度值(-55125)。表7是DS18B20中的测量数据与温度值对应关系的例子。表7 输出与温度的对应关系举例温度二进制输出十六进制输出+1250000 0111 1101 000007D0h+850000 0101 0101 00000550h+25.06250000 0001 1001 00010191h+10.1250000 0000 1010 001000A2h+0.50000 0000 0000 10000008h00000 0000 0000 00000000h-0.51111 1111 1111 1000FFF8h-10.1251111 1111 0101 1110FE5Eh-25.06251111 1110 0110 1111FE6Fh-551111 1100 1001 0000FC90h比如,当DS18B20的数据为“0000 0000 1010 0010”时,即TH=(0000 0000)、TL=(1010 0010),根据TL和TH的格式计算温度值为:26*0+25*0+24*0+23*1+22*0+21*1+20*0+2(-1)*0+2(-2)*0+2(-3)*1+2(-4)*0=10.125 由于TH中的S为0,所以得到的数为正,即+10.125。3.4 AT89C51单片机与DS18B20的接口图14 AT89C51与DS18B20连接的电路原理图可以使用AT89C51的任意一个I/O口连接DS18B20。如图14所示,将DS18B20的数据引脚DQ与单片机的P1.7相连,DS18B20使用外接电源,R1为上拉电阻。只需要占用单片机的一个I/O口,使用非常方便。每只DS18B20都可以设置成两种供电方式,即数据总线供电方式和外部供电方式。采取数据总线供电方式可以节省一根导线,但完成温度测量的时间较长;采用外部供电方式则多用一根导线,但测量速度较快。注意:单片机与DS18B20通过一总线进行数据交换,无论读和写均是从最低位(LSB)开始。数据线DQ是双向的,既承担单片机向DS18B20传输命令,也是DS18B20向单片机回送温度等数据的通道。因此时序关系很重要,有3个关键时序需要掌握。(1)DS18B20的初始化DS18B20的初始化是由单片机控制的,是DS18B20一切命令的初始条件。DS18B20的初始化时序如图15所示。主机发送一个复位脉冲(最短时间为480us的低电平信号),接着释放总线并进入接收状态。DS18B20会在检测到上升沿后等待1560us,然后发送一个低电平的存在脉冲(60240us)告知主机,主机在60240us的期间接收到低电平,即表示DS18B20存在,并已知初始化成功。图15 DS18B20初始化时序图(2)DS18B20的写时序如图16所示,整个写时间隙需要持续至少60us,连续写2位数据的间隙最少1us。主机将总线由高电平拉至低电平后就触发了一个写时间隙,主机必须在15us内将所有的位送到总线上。DS18B20在1560us间开始对总线进行采样,如果此时总线上为低电平写入的位是0,若为高电平写入的位是1。(3)DS18B20的读时序如图16所示主机将总线由高电平拉至低电平并在保持1us后释放总线就产生了一个读时间隙。读时间隙产生后DS18B20会将1或0传至总线,若传送0则拉低总线,若传送1则保持总线为高电平。在读时间隙产生后的15us内主机采集数据时间。由以上的时序关系可见,DS18B20的时序关系十分严格,很好地掌握其时序关系也是编写AT89C51单片机与DS18B20接口程序的关键。图16 DS18B20读/写时序图3.5 AT89C51单片机读取DS18B20温度值的编程DS18B20使用外部供电方式,在转换进行时DS18B20会占用(拉低)总线,完成后会释放(拉高)总线。因此只要检测总线的状态即可得知转换是否完成。读DS18B20暂存存储器RAM功能时,在读取所需的存储器字节后即可由主机复位DS18B20中止,不必将9个字节完全读出。在此只需读出存储器的前两个字节(被测温度值)即可。因为单片机仅连接一个DS18B20,所以可以节省掉读序列号及匹配等过程,即直接使用命令CCh跳过ROM。按照操作DS18B20工作的操作顺序,先进行DS18B20的初始化(复位DS18B20)。一总线上DS18B20大的所以操作均从初始化开始。(1)对DS18B20的初始化(复位)对DS18B20进行初始化的函数为Init18B20()。先令P1.7口为高电平即保证总线处于高电平状态。延迟一段时间后令P1.7口为低,触发DS18B20的初始化。在按要求保证低电平持续480us后释放总线。然后读取P1.7口的状态,直到P1.7的状态再次回到高电平则证明初始化操作完成,可进行其他的操作。例如:编写对DS18B20初始化的函数。 sbit P1_7=P17 void Init18B20() /18B20初始化 unsigned char i=0; EA=0; /关中断 DQ18B20=1; /保证处于高的状态 delay(1); /延时 DQ18B20=0; /单片机将DQ拉低 delay(49); /延时 大于480us DQ18B20=1; /拉高总线 i=0; /延时 while(DQ18B20 =1) ; /等待,直到18B20有响应 EA=1; /开中断(2)向DS18B20的写命令单片机向DS18B20写入一个字节的程序为Write_18B20(unsigned char dat)。待写入的字节定义为dat。单片机向DS18B20写命令字节从最低位(LSB)开始,逐位写入。先令P1.7口为高电平即保证总线处于高电平状态。延迟一段时间后,开始进行写数据的操作。令P1.7口为低电平开始向DS18B20写入数据。dat的最低位是否为1,若为1则让P1.7口为高电平即传送1,否则保持低电平状态即传送0.然后将dat的字节右移一位为下次传送做好准备。重复8次即可将命令写入DS18B20。例如:编写向DS18B20写入一个字节的函数 sbit P1_7=P17 void write_18B20(unsigned char dat) char i,j; EA=0; /关中断 P1_7=1; /保证DQ处于高电平 Delay10us(1); for(i=0;i1); /准备下一次传送 delay10us(22); /延时200us以上 P1_7=1; /保证DQ处于高电平 Delay10us(1); /延时 EA=1; /开中断 例如调用Write_18B20函数,向DS18B20写入ROM操作命令Skip ROMCCh,以跳过读取序列号及匹配等的ROM操作。(3)从DS18B20中读数据单片机从DS18B20读取一个字节的程序为unsigned char Read_18B20(void),返回一个字节数据。DS18B20输出的数据是从最低位(LSB)开始的,逐位输出。先定义一个无符号的变量dat存储来自DS18B20的数据,然后开始读数据。首先令P1.7口为高电平即保证总线处于高电平状态。延迟一段时间后,开始进行读数据的操作。将dat清0为存储接收的数据做好准备。然后拉低总线触发DS18B20开始发送数据。P1.7口释放总线开始接收数据。判断总线的状态,如果为1则在dat的最高位存入1,否则不对dat做任何操作,当下一次dat右移时即存入了0.如此重复8次就完成了一个字节的读操作。例如:编写从DS18B20读入一个字节的函数。 sbit P1_7=P17unsigned char read_18B20(void) unsigned char I,j; unsigned char dat; EA=0; dat=0x00; for(i=0;i1); /存入0P1_7=0; /拉低总线j=0; /延时1us以上P1_7=1; /释放总线j+; /延时if(P1_7= =1) dat=dat|0x80; /存入1delay(1); /延时50usP1_7=1; /本次传送结束 return (dat); /返回数据 (4)单片机采集DS18B20中温度值的操作顺序因为单片机仅连接一个DS18B20,所以可以省掉读取序列号及匹配等过程。直接使用命令CCh跳过ROM。单片机启动DS18B20,并读取温度值的操作顺序为:(1)初始化DS18B20(2)跳过ROMCCh。(3)温度变换44h。(4)等待温度变换完成。(5)初始化DS18B20。(6)跳过ROMCCh。(7)读暂存存储器BEh。即使用以下程序的顺序进行。Init18B20(); /初始化18B20Write_18B20(0xCC); /执行Skip命令,直接进入功能命令Write_18B20(0x44); /温度转换While(P1_7=0); /等待18B20转换完成Init18B20(); /复位Write_18B20(0xCC); /执行Skip命令,直接进入功能命令Write_18B20(0xBE); /读取温度寄存器lowbyte=Read_18B20(); /读取温度值低字节highbyte= Read_18B20(); /读取温度值高字节在使用读取温度值命令BEh,读入温度存储器BEh TH、TL前,应使用温度转换命令启动DS18B20的温度转换44h,才能保证读入的是当前的温度值。转换过程中DS18B20会拉低总线直至转换完成。因此可通过读取总线的状态判断温度转换是否完成。或者根据DS18B20采用12位时最大转换时间为750ms的特点,延时750ms以上使转换完成再读取TH和TL。这里采用读取总线状态的方法判断温度转换是否完成。当转换完成后再次初始化DS18B20,仍用Skip ROMCCh命令跳过ROM直接进入Read Temperature BEh命令,读取温度值。因为温度值是存储在DS18B20的Byte0和Byte1中的,所以要进行两次读操作以读取全部的温度数据。然后分别将;两个字节的温度值存入先前设置好的变量lowbyte,highbyte中。这样就完成了DS18B20的温度采集过程。例如:编写从DS18B20采集温度存储器TH、TL的函数sbit P1_7=P17unsigned int read_temperature(void) unsigned char lowbyte; unsigned char highbyte;unsigned char temfrac; EA=0; /关中断 lowbyte=0x00; highbyte =0x00; Init18B20( ); /复位18B20 write_18B20(0xCC); /执行Skip命令,直接进入功能命令 write_18B20(0x44); /温度转换 while(P1_7= =0); /等待18B20转换 Init18B20( ); /复位 write_18B20(0xCC); /执行Skip命令,直接进入功能命令 write_18B20(0xBE); /读取温度寄存器 lowbyte=read_18B20; /读取温度低位 highbyte=r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业管理行业安全生产工作总结
- 门诊导医服务总结
- 传媒行业营销实践总结
- 娱乐行业客服岗位总结
- 《眼贴体验思路》课件
- 《罗兰贝格品牌战略》课件
- 2024年广东省东莞市公开招聘警务辅助人员辅警笔试自考题1卷含答案
- 2023年陕西省渭南市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2023年福建省莆田市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 2021年四川省资阳市公开招聘警务辅助人员辅警笔试自考题2卷含答案
- 形势任务教育宣讲材料第一讲——讲上情
- 物业安全员考核实施细则
- 中国地质大学(武汉)教育发展基金会筹备成立情况报告
- 第四章破产法(破产法)教学课件
- PE拖拉管施工方案标准版
- 7725i进样阀说明书
- 铁路建设项目施工企业信用评价办法(铁总建设〔2018〕124号)
- 时光科技主轴S系列伺服控制器说明书
- 无机非金属材料专业 毕业设计论文 年产240万平方米釉面地砖陶瓷工厂设计
- 社会组织绩效考核管理办法
- 密封固化剂配方分析
评论
0/150
提交评论