搜索
您的当前位置:首页正文

基于单片机的数字温度计毕业设计

来源:易榕旅网


开封大学毕业设计

指导老师 肖兴达

09电气一班 叶彬彬 2011/12/27 2009061111

目 录

1 设计内容及性能指标„„„„„„„„„„„„„„„„„„„„„„3 2

系统框架„„„„„„„„„„„„„„„„„„„„„„4

3系统器件选择„„„„„„„„„„„„„„„„„„„„„„„„„„5 3.1 单片机的选择„„„„„„„„„„„„„„„„„„„„„„„„„„5 3.2 89S513.3

引脚介绍„„„„„„„„„„„„„„„„„„„5

温度传感器的选择„„„„„„„„„„„„„„„„„„„6

4 硬件设计电路„„„„„„„„„„„„„„„„„„„„„„„„„„„„13 4.1显示电路„„„„„„„„„„„„„„„„„„„„„„„„„„„„14 4.2 温度检测电路„„„„„„„„„„„„„„„„„„„„„„„„„„„„14 4.3 温度报警电路„„„„„„„„„„„„„„„„„„„„„„„„„„„„16 5软件设计„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„17 5.1 概述„ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „„ 17 5.2主程序模块„ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ 17 5.3各模块流程设计„ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ „ 18 6.源程序„„„„„„„„„„„„„„„„„„„„„„„„„„„„22 附录1:参考文献„„„„„„„„„„„„„„„„„„„„„„„„34 附录

2:元件清单 „„„„„„„„„„„„„„„„„„„„„35

附录3: 电气原理图„„„„„„„„„„„„„„„„„„„„„„„„36

1

摘要

随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,单片机已经在测控领域中获得了广泛的应用

本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,该设计控制器使用单片机AT89S51,测温传感器使用DS18B20,用LCD数码管以串口传送数据,实现温度显示,能准确达到以上要求。

关键词 AT89S51 单片机 传感器 DS18B20

2

1 设计内容及性能指标

本设计主要是介绍了单片机控制下的温度检测系统,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下:

●利用温度传感器(DS18B20)测量某一点环境温度

●测量范围为-50℃~+150℃,精度为±0.5℃ ●用液晶进行实际温度值显示

●能够根据需要方便设定上下限报警温度

2系统框架

采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89S51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20

控制工作,还可以与PC 机通信上传数据,另外AT89S51 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。

该系统利用AT89S51芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。

图 3.3 系统框图

3

3系统器件选择

3.1 单片机的选择

AT89S51 是CMOS8 位单片机,它集 Flash 程序存储器既可在线编程(ISP),也可用传统方法进行编程,所以低价位 AT89S51单片机可为提供许多高性价比的应用场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。单片机AT89S51 具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。主要特性如下

●与MCS-51 兼容

●4K字节可编程闪烁存储器 ●寿命:1000写/擦循环 ●数据保留时间:10年 ●全静态工作:0Hz-24Hz ●三级程序存储器锁定 ●128*8位内部RAM ●32可编程I/O线

●两个16位定时器/计数器

●5个中断源 图 4.1 AT89S51单片机引脚图

●可编程串行通道

●低功耗的闲置和掉电模式 ●片内振荡器和时钟电路

3.2 89S51 引脚功能介绍

AT89S51 单片机为40 引脚双列直插式封装。 其引脚排列和逻辑符号如图4.1 所示。 各引脚功能简单介绍如下:

●VCC:供电电压 ●GND:接地

●P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的

4

管脚写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高。

●P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL

门电流。P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 ●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”后,它们被内部上拉为高电平,并用作输入。 ●RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ●ALE / PROG :当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位

字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。 ●PSEN:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期

PSEN两次有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。 ●EA/VPP:当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;

当EA端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 ●XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 ●XTAL2:来自反向振荡器的输出。

3.3温度传感器的选择

由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。这里采用DALLAS公司的数字温度传感器DS18B20作为测温元件。

3.3.1 DS18B20的介绍

5

DALLAS 最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。温度测量范围为-50~+150 摄氏度,可编程为9位~12 位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3 根或2 根线上,CPU只需一根端口线就能与诸多DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

DS18B20 的性能特点如下:

● 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯

● DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温

● DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内

● 适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电 ● 温范围-50℃~+150℃ ● 零待机功耗

● 可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温

● 在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快 ● 用户可定义报警设置

● 报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件

● 测量结果直接输出数字温度信号,以\"一线总线\"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力

● 负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作

3.3.2 DS18B20 使用中的注意事项

DS18B20 虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:

●DS18B20 从测温结束到将温度值转换成数字量需要一定的转换时间,这是必须保证的,不然会出现转换错误的现象,使温度输出总是显示85。

●在实际使用中发现,应使电源电压保持在5V 左右,若电源电压过低,会使所测得的温度精度降低。

6

●在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。

●在DS18B20的有关资料中均未提及单总线上所挂DS18B20 数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此,当单总线上所挂DS18B20 超过8 个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。

●在DS18B20测温程序设计中,向DS18B20 发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20 接触不好或断线,当程序读该DS18B20 时,将没有返回信号,程序进入死循环,这一点在进行DS18B20硬件连接和软件设计时也要给予一定的重视。

3.3.3 DS18B20 内部结构

图为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。

DS18B20采用3脚PR-35 封装或8脚SOIC封装,其内部结构框图如图 4.4所示

图 4.4 DS18B20内部结构框图

64 b闪速ROM的结构如下:

7

开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48 位,最后8位是前面56 位的CRC 检验码,这也是多个DS18B20 可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。主机操作ROM的命令有五种,如表所列

指 令 读ROM(33H) 匹配ROM(55H) 跳过ROM(CCH) 搜ROM(F0H) 报警搜索(ECH)

说 明

读DS1820的序列号

继读完64位序列号的一个命令,用于此命令执行后的存储器操作将针对识别总线上各器件的编码,为操作各仅温度越限的器件对此命令作出响

DS18B20 温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可

电擦除的EERAM。高速暂存RAM 的结构为8字节的存储器,结构如图 4.5所示。

图 4.5 高速暂存RAM结构图

前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。

温度低温度高TH TL 配

8

保保保8位CRC

位 MSB

位 置 留 留 留 LSB

当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.062 5 ℃/LSB形式表示。温度值格式如下:

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。图中,S表示位。对应的温度计算:当符号位S=0时,表示测得的温度植为正值,直接将二进制位转换为十进制;当S=1时,表示测得的温度植为负值,先将补码变换为原码,再计算十进制值。例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较,若T>TH或T在64位ROM的最高有效字节中存储有循环冗余校验码(CRC)。主机根据ROM的前 56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数 据是否正确。

3.3.4 DS18B20测温原理

DS18B20的测温原理如图2所示,图中低温度系数晶振的振荡频率受温度的影响很小用于产生固定频率的脉冲信号送给减法计数器1,高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入,图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量.计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将50 ℃所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在50 ℃所对应的一个基数值。

9

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器 1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温图2中的斜率累加器用于补偿和修正测温过程中的非线性其输出用,于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值,这就是DS18B20的测温原理。另外,由于DS18B20单线通信功能是分时完成的,他有严格的时隙概念,因此读写时 序很重要。系统对DS18B20的各种操作必须按协议进行。操作协议为:初始化DS18B20 (发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。

图(2) DS18B20测温原理图

3.3.5 提高DS1820测温精度的途径

1 .DS1820高精度测温的理论依据

DS1820正常使用时的测温分辨率为0.5℃,这对于水轮发电机组轴瓦温度监测来讲

略显不足,在对DS1820测温原理详细分析的基础上,我们采取直接读取DS1820内部暂存寄存器的方法,将DS1820的测温分辨率提高到0.1℃~0.01℃.

DS1820内部暂存寄存器的分布如表1所示,其中第7字节存放的是当温度寄存器停止增值时计数器1的计数剩余值,第8字节存放的是每度所对应的计数值,这样,我们就可以通过下面的方法获得高分辨率的温度测量结果。首先用DS1820提供的读暂存寄存器指令(BEH)读出以0.5℃为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度整数部分T整数,然后再用BEH指令读取计数器1的计数剩余值M剩余和每度计数值M每度,考虑到DS1820测量温度的整数部分以0.25℃、0.75℃为进位界限的关系,实际温度T实际可用下式计算得到:T实际=(T整数-0.25℃)+(M每度-M剩余)/M每度。

10

表1 DS18B20暂存寄存器分布

该字节各位的定义如下:

TM R1 R0 1 1 1 1 1

低5位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,

即是来设置分辨率,如表1所示(DS18B20出厂时被设置为12位)。

表2 R1和R2模式表

R1 0 0 1 1 R0 分辨率 温度最大转换时/mm 0 9位 93.75 1 0 1 10位 11位 12位 187.75 275.00 750.00 由表1可见,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间权衡考虑。高速暂存存储器除了配置寄存器外,还有其他8个字节组成,其分配如下所示。其中温度信息(第1,2字节)、TH和TL值第3,4字节、第6~8字节未用,表现为全逻辑1;第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。

根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一

次读写之前 都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

2 .测量数据比较

11

表2为采用直接读取测温结果方法和采用计算方法得到的测温数据比较,通过比较可以看出,计算方法在DS1820测温中不仅是可行的,也可以大大的提高DS1820的测温分率。

表3 DS18B20 直度测温结果与计算测温结果数据比较

4 硬件设计电路

温度计电路设计原理图如图5.1所示,控制器使用单片机AT89C2051,温度计传感器使用DS18B20,用液晶实现温度显示。本温度计大体分三个工作过程。首先,由DS18820温度传感器芯片测量当前的温度,并将结果送入单片机。然后,通过AT89S51单片机芯片对送来的测量温度读数进行计算和转换,井将此结果送入液晶显示模块。最后,SMC1602A芯片将送来的值显示于显示屏上。 由图1可看到,本电路主要由DSl8820温度传感器芯片、SMCl602A液晶显示模块芯片和AT89S51单片机芯片组成。其中,DSI8B20温度传感器芯片采用“一线制”与单片机相连,它独立地完成温度测量以及将温度测量结果送到单片机的工作。

4.1 显示电路

显示电路采用SMCI602A液晶显示模块芯片该芯片可显示16×2个字符,比以前的七段数码管LED显示器在显示字符的数量上要多得多。另外,由于SMCl602芯片编程比较简单,界面直观,因此更加易于使用者操作和观测。SMCl602A芯片的接口信号说明如表1所列。

表1 SMCl602A芯片的接口信号说明

12

4.2 温度检测电路

DS18B20 最大的特点是单总线数据传输方式,DS18B20 的数据I/O 均由同一条线来完成。DS18B20 的电源供电方式有2 种: 外部供电方式和寄生电源方式。工作于寄生电源方式时, VDD 和GND 均接地, 他在需要远程温度探测和空间受限的场合特别有用, 原理是当1 W ire 总线的信号线DQ 为高电平时, 窃取信号能量给DS18B20 供电, 同时一部分能量给内部电容充电, 当DQ为低电平时释放能量为DS18B20 供电。但寄生电源方式需要强上拉电路, 软件控制变得复杂(特别是在完成温度转换和拷贝数据到E2PROM 时) , 同时芯片的性能也有所降低。因此, 在条件允许的场合, 尽量采用外供电方式。无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电。在这里采用前者方式供电。DS18B20与芯片连接电路如图 5.2所示:

图 5.2 DS18B20与单片机的连接

外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC 降到3V 时,依然能够保证温度量精度。

由于DS18B20 只有一根数据线,因此它和主机(单片机)通信是需要串行通信,而AT89S51 有两个串行端口,所以可以不用软件来模拟实现。经过单线接口访问DC18B20 必须遵循如下协议:初始化、ROM 操作命令、存储器操作命令和控制操作。要使传感器工作,一切处理均严格按照时序。

主机发送(Tx)--复位脉冲(最短为480μs 的低电平信号)。接着主机便释放此线并进入接收方式(Rx)。总线经过4.7K的上拉电阻被拉至高电平状态。在检测到I/O 引脚上的上升沿之后,DS18B20 等待15~60μs,并且接着发送脉冲(60~240μs 的低电平信号)。然后以存在复位脉冲表示DS18B20 已经准备好发送或接收,然后给出正确的ROM 命令和存储操作命令的数据。DS18B20 通过使用时间片来读出和写入数据,时间片用于处理

13

数据位和进行何种指定操作的命令。它有写时间片和读时间片两种:

 写时间片:当主机把数据线从逻辑高电平拉至逻辑低电平时,产生写时间片。有

两种类型的写时间片:写1 时间片和写0 时间片。所有时间片必须有60 微秒的持续期,在各写周期之间必须有最短为1微秒的恢复时间.  读时间片:从DS18B20 读数据时,使用读时间片。当主机把数据线从逻辑高电平

拉至逻辑低电平时产生读时间片。数据线在逻辑低电平必须保持至少1 微秒;来自DS18B20 的输出数据在时间下降沿之后的15 微秒内有效。为了读出从读时间片开始算起15微秒的状态,主机必须停止把引脚驱动拉至低电平。在时间片结束时,I/O 引脚经过外部的上拉电阻拉回高电平,所有读时间片的最短持续期为60 微秒,包括两个读周期间至少1μs 的恢复时间。 一旦主机检测到DS18B20 的存在,它便可以发送一个器件ROM 操作命令。所有ROM 操作命令均为8位长。

所有的串行通讯,读写每一个bit 位数据都必须严格遵守器件的时序逻辑来编程,同时还必须遵守总线命令序列,对单总线的DS18B20 芯片来说,访问每个器件都要遵守下列命令序列:首先是初始化;其次执行ROM 命令;最后就是执行功能命令(ROM 命令和功能命令后面以表格形式给出)。如果出现序列混乱,则单总线器件不会响应主机。当然,搜索ROM命令和报警搜索命令,在执行两者中任何一条命令之后,要返回初始化。 基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机,且准备就绪。 在主机检测到应答脉冲后,就可以发出ROM 命令。这些命令与各个从机设备的唯一64 位ROM 代码相关。在主机发出ROM命令,以访问某个指定的DS18B20,接着就可以发出DS18B20支持的某个功能命令。这些命令允许主机写入或读出DS18B20便笺式RAM、启动温度转换。软件实现DS18B20的工作严格遵守单总线协议:

(1)主机首先发出一个复位脉冲,信号线上的DS18B20 器件被复位。

(2)接着主机发送ROM命令,程序开始读取单个在线的芯片ROM编码并保存在单片机数据存储器中,把用到的DS18B20 的ROM 编码离线读出,最后用一个二维数组保存ROM 编码,数据保存在X25043中。

(3)系统工作时,把读取了编码的DS18B20 挂在总线上。发温度转换命令,再总线复位。 (4)然后就可以从刚才的二维数组匹配在线的温度传感器,随后发温度读取命令就可以获得对应的度值了。

在主机初始化过程,主机通过拉低单总线至少480us,来产生复位脉冲。接着,主机释放总线,并进入接收模式。当总线被释放后,上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15~60us,接着通过拉低总线60~240us,以产生应答脉冲。 写时序均起始于主机拉低总线,产生写1 时序的方式:主机在拉低总线后,接着必须在15us之内释放总线。产生写0 时序的方式:在主机拉低总线后,只需在整个时序期间保持低电平即可(至少60us)。在写字节程序中的写一个bit 位的时候,没有按照通常的分别写0时序和写1 时序,而是把两者结合起来,当主机拉低总线后在15us 之内将要写的位c 给DO:如果c 是高电平满足15us 内释放总线的要求,如果c是低电平,则DO=c这条语句仍然是把总线拉在低电平,最后都通过延时58us 完成一个写时序(写时序0或写时序1)过

14

程。

写时间时序:当主机把数据从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。有两种写时间隙,写1 时间隙和写0 时间隙。所有写时间隙必须最少持续60μs,包括两个写周期至少1μs 的恢复时间。I/O线电平变低后,DS18B20 在一个15μs 到60μs 的窗口内对I/O 线采样。如果线上事高电平,就是写1,如果是低电平,就是写0。主机要生成一个写时间隙,必须把数据线拉到低电平然后释放,在写时间隙开始后的15μs 内允许数据线拉到高电平。主机要生成一个写0 时间隙,必须把数据线拉到低电平并保存60μs。

每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时序之后,单总线器件才开始在总线上发送0 或1。所有读时序至少需要60us。

4.3温度报警电路

本此设计可以采用发光二级管报警电路,如过需要报警,则只需将相应位置1,当参数判断完毕后,再看报警模型单元ALARM 的内容是否与预设一样,如不一样,则发光报警。但本次设计采软件处理报警,利用有源蜂鸣器进行报警输出,采用直流供电。当所测温度超过获低于所预设的温度时,数据口相应拉高电平,报警输出。报警电路硬件连接见图 5.10。

图 5.10蜂鸣器电路连接图

5 软件设计

5.1 概述

整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和

15

接口定义。各执行模块规划好后,就可以规划监控程序了。首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。

5.2主程序模块

主程序需要调用4 个子程序,分别为数码管显示程序,温度测试及处理子程序,报警子程序,中断设定子程序。各模块程序功能如下:

●数码管显示程序:向数码的显示送数,控制系统的显示部分。

●温度测试及处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。 ●报警子程序:进行温度上下限判断及报警输出。 ●中断设定程序:实现设定上下限报警功能。

图 6.1主程序 图 6.2 DS18B20初始化流程图

16

5.3各模块流程设计

下面对主要子程序的流程图做介绍

5.3.1 温度检测流程

DS18B20在单片机控制下分三个阶段: ●18B20 初始化:初始化流程图见

●读18B20时序:读DS18B20流程见图 6.3: ●写18B20时序:写18B20 流程见图6.4

图 6.3读DS18B20流程图 图 6.4写DS18B20流程图

17

5.3.2 中断设定流程

中断模块采用了外中断和内中断套用方法。当设计需要实现上下限报警时,利用INT0口进行中断,set 键进行上下限报警温度设定,进入温度设定状态后(按一下温度设定键),首先会提示显示“UP”字母,表示要用户设定高温报警温度,按S3 键 ,表示本位数字+1,按S4 表示移向下一位,如果4 位高温设定完毕,则显示“DO”,表示要用户设定低温报警温度。4位低温设定完毕,如果用户设置的高温比设定的低温高的话则显示“ERRO”表示错误提示,同时会有蜂鸣器及时报警提示,然后自动显示“UP”,让用户重新进行温度设定。中断设定子程序流程图见下图

18

图6.6 中断设定子程序流程图

19

源程序

TIMEL EQU 0E0H TIMEH EQU 0B1H TEMPHEAD EQU 36H; BITST TIME1SOK TEMPONEOK TEMPL TEMPH TEMPHC TEMPLC TEMPDIN START: CLSMEM: CLSMEM1:

DATA BIT BIT DATA DATA DATA DATA BIT ORG LJMP ORG LJMP ORG MOV MOV MOV MOV INC 20H BITST.1 BITST.2 26H 27H 28H 29H; P3.7; 0000H START 00BH T0IT; 100H SP,#60H R0,#20H R1,#60H @R0,#00H R0

20

DJNZ R1,CLSMEM1 MOV TMOD,#00100001B MOV TH0,#TIMEL MOV TL0,#TIMEH SJMP INIT ERROR: INIT: TOIT:

NOP

LJMP NOP NOP

SETB SETB SETB MOV CLR LJMP PUSH MOV MOV MOV INC CJNE MOV SETB START ET0 TR0 EA PSW,#00H TEMPONEOK MAIN; PSW PSW,#10H TH0,#TIMEH TL0,#TIMEL R7

R7,#32H,T0IT1 R7,#00H TIME1SOK

21

T0IT1: POP PSW RETI;

MAIN: LCALL DISP1

JNB TIME1SOK,MIAN CLR TIME1SOK

MIAN: INITDS1820:

JNB LCALL LCALL LCALL LCALL LCALL SETB SETB NOP NOP

CLR MOV DJNZ MOV DJNZ SETB MOV DJNZ TEMPONEOK,MAIN2 READTEMP1 CONVTEMP DISPBCD DISP1 READTEMP TEMPONEOK; TEMPDIN TEMPDIN R6,#0A0H R6,$ R6,#0A0H R6,$ TEMPDIN R6,#32H R6,$

22

MOV R6,#3CH LOOP1820: MOV C,TEMPDIN JC INITDS1820OUT DJNZ R6,LOOP1820 MOV R6,#064H DJNZ SJMP RET

INITDS1820OUT: SETB RET;

READDS1820: MOV SETB NOP NOP

READDS1820LOOP: CLR NOP NOP NOP

SETB MOV DJNZ MOV MOV

R6,$ INITDS1820 TEMPDIN R7,#08H TEMPDIN TEMPDIN TEMPDIN R6,#07H R6,$ C,TEMPDIN R6,#3CH

23

DJNZ R6,$ RRC A SETB TEMPDIN

DJNZ R7,READDS1820LOOP MOV R6,#3CH DJNZ RET;

WRITEDS1820: MOV SETB NOP NOP

WRITEDS1820LOP: CLR MOV DJNZ RRC MOV MOV DJNZ SETB DJNZ RET;

READTEMP: LCALL MOV

R6,$ R7,#08H TEMPDIN TEMPDIN R6,#07H R6,$ A

TEMPDIN,C R6,#34H R6,$ TEMPDIN

R7,WRITEDS1820LOP INITDS1820 A,#FoH

24

LCALL WRITEDS1820 MOV R6,#34H DJNZ R6,$ MOV A,#44H LCALL WRITEDS1820 READTEMP1: READTEMP2:

MOV DJNZ RET

LCALL MOV LCALL MOV DJNZ MOV LCALL MOV DJNZ MOV MOV MOV LCALL MOV INC R6,#34H R6,$ INITDS1820 A,#0CCH WRITEDS1820 R6,#34H R6,$ A,#0BEH WRITEDS1820 R6,#34H R6,$ R5,#09H R0,#TEMPHEAD B,#00H READDS1820 @R0,A R0

25

READTEMP21: LCALL CRC8CAL DJNZ R5,READTEMP2 MOV A,B

JNZ READTEMPOUT MOV A,TEMPHEAD+0 READTEMPOUT: CONVTEMP:

MOV MOV MOV RET;

MOV ANL JZ CLR MOV CPL ADD MOV MOV CPL ADDC MOV MOV SJMP TEMPL,A A,TEMPHEAD+1 TEMPH,A A,TEMPH A,#80H TEMPC1 C A,TEMPL A A,#01H TEMPL,A A,TEMPH A A,#00H TEMPH,A TEMPHC,#0BH TEMPC11

26

TEMPC1: MOV TEMPHC,#0AH TEMPC11: MOV A,TEMPHC SWAP A

MOV TEMPHC,A MOV A,TEMPL ANL MOV MOVC MOV MOV ANL SWAP MOV MOV ANL SWAP ORL LCALL MOV ANL SWAP ORL MOV A,#0FH

DPTR,#TEMPDOTTAB A,@A+DPTR TEMPLC,A A,TEMPL A,#0F0H A TEMPL,A A,TEMPH A,#0FH A A,TEMPL HEX2BCD1 TEMPL,A A,#0F0H A

A,TEMPHC TEMPHC,A

27

MOV A,TEMPL ANL A,#0FH SWAP A ORL A,TEMPLC MOV TEMPLC,A MOV A,R7 JZ TEMPC12 ANL A,#0FH SWAP A MOV R7,A MOV A,TEMPHC ANL A,#0FH ORL A,R7 MOV TEMPHC,A TEMPC12: RET ;

TEMPDOTTAB:

00H,01H,01H,02H,03H,03H,04H,04H,05H,06H

DB 06H,07H,08H,08H,09H,09H ;

DISPBCD: MOV A,TEMPLC ANL A,#0F0H MOV 70H,A

28

DB

MOV A,TEMPLC SWAP A ANL A,#0F0H MOV 71H,A MOV A,TEMPHC DISPBCD0:

ANL MOV MOV SWAP ANL MOV MOV ANL CJNE SJMP MOV ANL JNZ MOV SWAP ANL MOV MOV A,#0FH 72H,A A,TEMPHC A A,#0FH 73H,A A,TEMPHC A,#0FH

A,#010H,DISPBCD0 DISPBCD2 A,TEMPHC A,#0F0H DISPBCD2 A,TEMPHC A A,#0FH 73H,#0AH 72H,A

29

DISPBCD2: RET ;

DISP1: MOV R1,#70H MOV R5,#0FEH PLAY: MOV P1,#0FFH LOOP5: ENDOUT:

MOV MOV MOV MOV MOVC MOV MOV JB CLR LCALL INC MOV JNB RL MOV AJMP MOV MOV A,R5 P3,A A,@R1 DPTR,#TAB A,@A+DPTR P1,A A,R5 ACC.1,LOOP5 P1.7 DL1MS R1 A,R5

ACC.3,ENDOUT A R5,A PLAY P1,#0F0H P3,#0F0H

30

RET TAB:

DB

0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH; DL1MS: MOV R6,#14H DL1: MOV R7,#19H DL2: HEX2BCD1: CRC8CAL: CRC8LOOP1:

DJNZ DJNZ RET

MOV DIV MOV MOV XCH DIV SWAP ORL RET

PUSH MOV XRL RRC MOV JNC R7,DL2 R6,DL1 B,#064H AB R7,A A,#0AH A,B AB A A,B ACC R7,#08H A,B A A,B CRC8LOOP2

31

XRL A,#18H CRC8LOOP2: RRC A MOV B,A POP ACC RR A PUSH ACC

DJNZ R7,CRC8LOOP1 POP ACC RET

END

附录1 参考文献

[1]孙育才.《单片微型计算机及其应用》.东南大学出版社.2004

[2]沈德金 陈粤初.《单片机接口电路与应用程序实例》.北京航天航空大学出版社.1990. [3]潘新民 王燕芳.《微型计算机控制技术》.电子工业出版社2003

[4]李朝青.单片机原理及接口技术(简明修订版).杭州:北京航空航天大学出版社,1998 [5]李广弟.单片机基础[M].北京:北京航空航天大学出版社,1994 [6]阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989 [7]廖常初.现场总线概述[J].电工技术,1999.

[8]王勇 叶敦范.《基于AT89S51 的便携式实时温度检测仪》

32

附录2元件清单

元件名称 单片机 电阻 电阻 电阻 电解电容 芯片 扬声器 晶振管 按钮 三极管 型号/规格 个数 1 4 1 1 1 1 1 1 6 5 AT89S51 RJ1-0.25W-1K RJ1-0.5W -5.8K RJ1-0.5W -6.8K CD-30PF 74HC244 5V 0.5W 8Ω MJ12MHZ-6.3V KB PNP

33

附录3 电气原理图

温度计电路设计原理图

34

因篇幅问题不能全部显示,请点此查看更多更全内容

Top