资源描述
无锡职业技术学院毕业设计说明书
第一章 引言
在工、农业生产和日常生活中,对温度的测量及控制占据着极其重要地位。首先让我们了解一下多点温度检测系统在各个方面的应用领域:消防电气的非破坏性温度检测,电力、电讯设备之过热故障预知检测,空调系统的温度检测,各类运输工具之组件的过热检测,保全与监视系统之应用,医疗与健诊的温度测试,化工、机械…等设备温度过热检测。温度检测系统应用十分广阔。
本设计运用主从分布式思想,由一台上位机(PC微型计算机),下位机(单片机)多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统。该系统采用 RS-232串行通讯标准,通过上位机(PC)控制下位机(单片机)进行现场温度采集。温度值既可以送回主控PC进行数据处理,由显示器显示。也可以由下位机单独工作,实时显示当前各点的温度值,对各点进行控制。
下位机采用的是单片机基于数字温度传感器DS1820的系统。DS1820利用单总线的特点可以方便的实现多点温度的测量,轻松的组建传感器网络,系统的抗干扰性好、设计灵活、方便,而且适合于在恶劣的环境下进行现场温度测量。本系统可以应用在大型工业及民用常温多点监测场合。如粮食仓储系统、楼宇自动化系统、温控制程生产线之温度影像检测、医疗与健诊的温度测试、空调系统的温度检测、石化、机械…等。
基本功能以及技术要求:
1. 采用单片机进行室温的监测。
2. 对室温进行实时的显示;当室温达到报警设定值时,应能报警。
3. 能设定室温的报警值。
4. 室温的测量范围为0――100℃,测量精度0.1℃。
5. 当某处的实际室温超过设定的上下限时,该处的蜂鸣器报警。
第二章 基于DS1820的室温监测装置系统工作原理
在多点测温系统中,传统的测温方法是将模拟信号远距离采样进行AD转换,而为了获得较高的测温精度,就必须采用措施解决由长线传输,多点测量切换及放大电路零点漂移等造成的误差补偿问题。采用数字温度芯片DS1820测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100摄氏度时,最大线形偏不大于1摄氏度。
采用温度芯片DS1820测量温度,可以体现系统芯片化这个趋势。部分功能电路的集成,使总体电路更简洁,搭建电路和焊接电路时更快。而且,集成块的使用,有效地避免外界的干扰,提高测量电路的精确度。所以集成芯片的使用将成为电路发展的一种趋势。本方案应用这一温度芯片,也是顺应这一趋势。
图1 系统硬件连接框图
至从单片机
至PC机
交流电源
AC/DC开关电源模块
通讯端口1
声、光报警
输出控制
显示电路
主
单片机
通讯端口2
自检电路
图2-2 主单片机系统硬件连接框图
至主单片机
交流电源
AC/DC开关电源模块
DS1820-3
声、光报警
输出控制
DS1820-2
DS1820-1
从
单片机
通讯端口
DS1820-4
图3 从单片机系统硬件连接框图
第三章 硬件结构
3.1 开关电源及看门狗电路
a、电源电路
因为单片机工作电源为+5V,且底层电路功耗很小。采用7805三端稳压片即可满足要求。
具体电路图如下:
图4 开关电源电路
b、看门狗电路
考虑到底层电路板的工作环境相对恶劣,单片机会受到周围环境的干扰,而出现程序跑飞,死机…等一些不可预知的不正常工作现象。工作人员也不可能到现场对单片机重起,本设计为单片机电路添加一个外部看门狗电路。定时查询单片机的工作状态,一但发现异常即对单片机延时重起。保证系统安全可靠的运行。
NE56604能为多种微处理器和逻辑系统提供复位信号,其门限电平为4.2V 。在电源突然掉电或电源电压下降到低于门限电平时。NE56604将产生精确的复位信号。NE56604内置一个看门狗定时器,用于监控微处理器,以确保微处理器的正常运行。看门狗能产生一个系统复位信号用来终止任何由于微处理器故障而引发的不正常的系统操作。NE56604的看门狗的监控周期为100mS(典型值)。
特性:
.正负双逻辑输出的有效复位信号。
.精准的门限电平监测。
.上电复位内部延时。
.可利用外部电阻调节的内部看门狗定时器。
.看门狗定时器的监控周期为100mS 典型值。
.VCC=0.8VDC时产生有效的复位信号典型值。
.仅需很少的外围元件。
具体电路图如下:
图4 看门狗电路
3.2 键盘及显示电路
键盘电路:
单片机应用系统中除了复位按键有专门的复位电路,以及专一的复位功能外,其它的按键或键盘都是以开关状态来设置控制功能或输入数据。键盘有编码和非编码两种。非编码键盘硬件电路极为简单。故本系统采用拨码开关来控制。具体电路如下:
图5 键盘电路电路
A、开关状态的可靠输入
键开关状态的可靠输入有两种解决方法。一种是软件去抖动:它是在检测到有键按下时,执行一个10ms的延时程序后,再确认该键电平是否仍保持闭合状态电平,如保持闭合状态电平则确认为真正键按下状态,从而消除了抖动影响。另一种为硬件去抖动:即为按键添加一个锁存器。两种方法都简单易行,本设计采用的是硬件去抖。
B. 对按键进行编码给定键值或给出键号
对于按键无论有无编码,以及采用什么编码,最后都要转换成为与累加器中数值相对应的键值,以实现按键功能程序的散转转移。为使编码间隔小,散转入口地址安排方便,常采用依次序排列的键号。
拨码开关值
含义
0000
实时显示通道一的温度值
0001
实时显示通道二的温度值
0010
实时显示通道三的温度值
0011
实时显示通道四的温度值
0100
实时显示通道五的温度值
0101
实时显示通道六的温度值
0110
实时显示通道七的温度值
0111
实时显示通道八的温度值
1***
自动循环显示所有通道的温度
C. 选择键盘监测方法
对是否有键按下的信息输入方式有中断方式与查询方式两种。本设计采用的查询法,即在在CPU空闲时调用键盘扫描子程序。
温度显示电路:
设计采用的是共阴极七段数码管。显示方式有动态扫描和静态显示,两种方法在本设计中皆可。由于静态扫描要用到多片串入并出芯片,考虑到电路板成本计算。本人采用是节约硬件资源的动态扫描方式。即用两块芯片就可以完成显示功能。显示数据由4511译码器输出,ULN2003为位驱动扫描信号。
具体电路图如下:
图6 温度显示电路
3.3 温度测试电路
这里我们用到温度芯片DS1820。DS1820是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式。测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出。其工作电源既可在远端引入,也可采用寄生电源方式产生。CPU只需一根端口线就能与诸多DS1820通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
DS1820支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
3.4 串口控制电路
AT89C51有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。
具体电路如下:
图7 单片机至RS-232转换电路
我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对本设计来说已经足够使用了,电路如上图所示。通信线采用交叉接法,即两者信号线对应成为R—T,T—R。
具体连接电路如下:
图8 PC机9针串口电路接线图
第四章 元器件的选择
4.1 电源部分
采用开关电源模块供电,本设计共需要两个等级的电源电压。第一:单片机及其外围接口电路工作需要使用标准的+5V直流电压;第二:的声光报警电路本设计采用了+12V的直流电源供电,目的就是为了提高声光报警的功率,加大声光报警作用的范围,使得操作人员在附近不远处询查时出现转速异常时也可以较清晰的听到或看到报警信息。
为了降低成本,同时考虑到线路中的所需使用较大功耗仅在声光报警时,所以选用AC/DC模块为AC220V—DC+12V,将此开关电源模块的输出直接向声光报警电路提供电源,同时将一片LM7805的输入端与开关电源模块的输出端相连,这样开关电源模块输出的+12V直流电压经LM7805变换成单片机及其外围接口电路需要的+5V的直流电源电压。
4.2 温度传感器的选择
1、DS1820简介
DS1820是美国DALLAS半导体公司生产的可组网数字式温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。
2、DS1820引脚及功能
DS1820的引脚见右图:
GND:接地
DQ : 数据输入/输出脚(单线接口,可作寄生供电)
VDD:电源电压
3、DS1820的内部结构如下图所示
图9 DS1820内部结构图
(1)DS1820有4个主要的数据部件:
① 64位激光ROM。64位激光ROM从高位到低位依次为8位CRC、48位序列号和8位家族代码(28H)组成。
② 温度灵敏元件。
③ 非易失性温度报警触发器TH和TL。可通过软件写入用户报警上下限值。
④ 配置寄存器。配置寄存器为高速暂存存储器中的第五个字节。DS18B20在0工作时按此寄存器中的分辨率将温度转换成相应精度的数值,其各位定义如图所示。
TM
R1
R0
1
1
1
1
1
MSB
DS18B20配置寄存器结构图
LSB
图10 DS1820内部结构图
其中,TM:测试模式标志位,出厂时被写入0,不能改变;R0、R1:温度计分辨率设置位,其对应四种分辨率如下表所列,出厂时R0、R1置为缺省值:R0=1,R1=1(即12位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率。
(2) 高速暂存存储器
高速暂存存储器由9个字节组成,其分配如下图所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如图所示。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
配置寄存器与分辨率关系表 :
表10 配置寄存器与分辨率关系表
R0
R1
温度计分辨率/bit
最大转换时间/us
0
0
9
93.75
0
1
10
187.5
1
0
11
375
1
1
12
750
温度低位
温度高位
TH
TL
配置
保留
保留
保留
8位CRC
LSB
DS1820 存储器映像图
MSB
图11 DS1820存储器映像图
温度值格式图DS1820 温度数据表:
23
22
21
20
2-1
2-2
2-3
2-4
MSB
LSB
S
S
S
S
S
26
25
24
对DS1820的设计,需要注意以下问题
(1)对硬件结构简单的单线数字温度传感器DS1820 进行操作,需要用较为复杂的程序完成。编制程序时必须严格按芯片数据手册提供的有关操作顺序进行,读、写时间片程序要严格按要求编写。尤其在使用DS1820 的高测温分辨力时,对时序及电气特性参数要求更高。
(2)有多个测温点时,应考虑系统能实现传感器出错自动指示,进行自动DS1820 序列号和自动排序,以减少调试和维护工作量。
(3)测温电缆线建议采用屏蔽4 芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。DS1820 在三线制应用时,应将其三线焊接牢固;在两线应用时,应将VCC与GND接在一起,焊接牢固。若VCC脱开未接,传感器只送85.0 ℃的温度值。
(4)实际应用时,要注意单线的驱动能力,不能挂接过多的DS1820,同时还应注意最远接线距离。另外还应根据实际情况选择其接线拓扑结构。
典型对应的温度值表:
表10 典型对应的温度值表
温度/℃
二进制表示
十六进制表示
+125
+25.0625
+10.125
+0.5
0
-0.5
-10.125
-25.0625
-55
00000111 11010000
00000001 10010001
00000000 10100010
00000000 00001000
00000000 00000000
11111111 11111000
11111111 01011110
11111110 01101111
11111100 10010000
07D0H
0191H
00A2H
0008H
0000H
FFF8H
FF5EH
FE6FH
FC90H
4、DS1820的室温监测装置结构原理
(1)传感器部分
采用数字温度芯片DS1820测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100摄氏度时,最大线形偏差小于1摄氏度。DS1820的最大特点之一采用了单总线的数据传输,由数字温度计DS1820和微控制器AT89C51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大,且由于AT89C51可以带多个DS1820,因此可以非常容易实现多点测量.轻松的组建传感器网络。
采用温度芯片DS1820测量温度,体现了系统芯片化这个趋势。部分功能电路的集成,使总体电路更简洁,搭建电路和焊接电路时更快。而且,集成块的使用,有效地避免外界的干扰,提高测量电路的精确度。
(2)主控制部分
此次设计采用AT89C51八位单片机实现。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现简单,安装方便。既可以单独对多DS1820控制工作,还可以与PC机通信.运用主从分布式思想,由一台上位机(PC微型计算机),下位机(单片机)多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统,实现远程控制。另外AT89C51在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
4.3 单片机
本模块采用的主要芯片是AT89C52,该单片机是ATMEL公司生产的低功耗、高性能的8位CMOS微处理器,它自带8K的快速擦写可编程的程序存储器,芯片的制造工艺采用了ATMEL公司的高集成固定存储技术,在程序指令的设置与输出方面和工业标准80C52相兼容。可擦写的特性是程序存储器在系统中能被重写或者通过一种惯用的固化内存的设备来完成,通过结合一种通用8位CPU激光擦除功能整合在一个芯片中。AT89C52是一款功能强大的微处理器,给嵌入式系统提供了较强的灵活性和极为有效的解决方法。AT89C52内部包含有1个8位CPU、振荡器和时钟电路,8K字节的程序存储器,128字节的数据存储器,可寻址外部程序存储器和数据存储器(各64K字节),21个特殊功能寄存器,4个并行I/O口,1个全双工串行口,3个16位定时器/计数器,6个中断源,提供2个中断优先级,可实现二级中断优先级。具有位寻址功能,有较强的布尔处理能力。
考虑单片机的运行速度,选用常用的12M晶振频率。再此频率下,单片机一个机器周期为1微妙,运行速度较快。
4.4 看门狗监视芯片
本设计一般应用于工业现场需要监测设备转速的场合,外界干扰较多且必须要考虑,从系统可靠性角度出发,单片机选用同时具有上电复位方式和监视功能的看门狗监视芯片。其性能介绍如下。
监控芯片可为系统提供上电、掉电复位功能,也可提供其它功能,如后备电池管理,存储器保护、低电压告警或看门狗等。“看门狗”计时器电路英文名为Watch Dog Timer,简称WDT。其作用是监测单片机的运行,一旦发现“死机”就发出复位信号恢复程序的正常运行。WDT电路种类很多,但基本原理相同。MAX813L是美国MAXIUM公司生产的系统μP监控芯片,具有价格低、功能完善、低功耗的优点,而且工作温度范围宽(-40~+80℃),使用简单。它能在上电、掉电期间或手动情况下产生复位信号,它内含一个1.6s的看门狗定时器的4.40V的电源电压监视器。另外,还有一个1.25V门限的电源故障报警电路,可用于检测电池电压和非5V的电源。PFI为电源故障电压监控输入,当PFI小于1.25V时,PFO变为低电平,PFO为电源故障输出端,通过外接电阻R1﹑R2可组成不同门限电压监视网络。当电源电压低于容限电压时即视为报警输出。监控电路还具有上电复位输出和外部手动复位输出功能,芯片内部有一个上电比较器,当电源电压上升到可靠的工作电压后,即在 RESET端输出一个200ms的复位信号,保持单片机系统的正常复位。芯片内有一个看门狗定时器WDT,WDI为看门狗输入,接单片机P1.7,其最短的状态改变周期为1.6秒,当WDI保持高电平或低电平达1.6s时可使内部定时器完成计数,并置WDO为低。WDO为看门狗输出,如果连接到MR将会触发复位信号使单片机系统复位。
4.5 声光报警
虽然单片机AT89C2051的P1口、P3口低电平时的吸收电流可达20mA,不需要外接驱动电路,可直接驱动发光二极管,但是为了降低单片机本身的功耗提高其工作的稳定性我们仍使用+12V电源加限流电阻经单片机引脚控制的三极管开启点亮数码管,。所以选用LED共阳极发光二极管BT311057,经限流电阻直接连到三极管的集电极上。单片机高电平时,发光二极管不亮;低电平时点亮发光二极管。发光二极管的发光亮度强弱由流过它的电流决定,通常2mA以上就能保证发光二极管可靠发光,它的正常工作电流为8~10mA,发光二极管的压降为1.5V。所以,选择发光二极管的正常工作电流为10mA,则它的限流电阻可由以下公式计算:RL=(12-1.5×2)V/10mA=900Ω,取限流电阻为910Ω。
蜂鸣器用来作为报警指示,选用直流型FM12-12V型号。蜂鸣器工作电压为+12V,工作电流在20mA以上。单片机的驱动电流不够,不能直接驱动,必须外接功率驱动。因此,选用PNP型三极管9012作为蜂鸣器的功率驱动,与基极相连的电阻取2K阻值,保证三极管工作在饱和状态。
4.6 继电器输出控制电路
继电器是感性元件,驱动电流较大,单片机不能直接驱动,必须经过电路的转换。继电器选用SRS-12DC-SL型号,用直流+12V供电。三极管选用常用的NPN型9013作为继电器的功率开关。为了起到隔离的作用,三极管9013的基极通过光电耦合器进行隔离和驱动。
如图6所示,当P3.4为高电平时,光电耦合器不通,所以三极管9013也不通即继电器J没有得电时可以控制被监测设备正常运转,当P3.4为低电平时,光电耦合器导通,所以三极管9013也导通即继电器J得电时可以控制被监测设备紧急停止运转。
第五章 软件设计
5.1 软件设计流程图
1、 概述
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。
首先要根据系统的总体功能和键盘设置选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。
2、主程序方案
主程序调用了4个子程序,分别是数码管显示程序、键盘扫描以及按键处理程序、温度测试程序、中断控制程序、单片机与PC机串口通讯程序。
键盘扫描电路及按键处理程序:实现键盘的输入按键的识别及相关处理。
温度测试程序:对温度芯片送过来的数据进行处理,进行判断和显示。
数码管显示程序:向数码的显示送数,控制系统的显示部分。
中断控制程序:实现循环显示功能。
串口通讯程序:实现PC机与单片机通讯,将温度数据传送给PC机。
将各个功能程序以子程序的形式写好,当写主程序的时候,只需要调用子程序,然后在寄存器的分配上作一下调整,消除寄存器冲突和I/O冲突即可。程序应该尽可能多的使用调用指令代替跳转指令。因为跳转指令使得程序难以看懂各程序段之间的结构关系。而调用指令则不同,调用指令使得程序结构清晰,无论是修改还是维护都比较方便。将功能程序段写成子程序的形式,除了方便调用之外,还有一个好处那就是以后写程序的时候如果要用到,就可以直接调用这个单元功能模块。
图12 程序结构图
主程序流程图如图:
图13 主程序流程图
3、各模块子程序的设计
下面对主要几个子程序的流程图做介绍:
(1)温度测试子程序设计
见附录一:温度测试子程序流程图
(2)中断控制程序设计
如下图:
图14 中断控制程序流程图
(3)串行程序设计
本次通讯中,测控系统分位上位机和下位机之间的通信,系统中单片机负责数据采集、处理和控制,上位机进行现场可视化检测,通信协议采用半双工异步串行通信方式,通过RS232的RTS信号进行收发转换,传输数据采用二进制数据,上位机与下位机之间采用主从式通讯。本人采用的VB环境下PC机与单片机之间实现串行通讯的软硬件方案。VB是Microsoft公司推出的Windows应用程序开发工具,因其具有界面友好,编程简便等优点而受到广泛的使用,而且Visual Basic 6.0 版本带有专门实现串行通讯的MSCOMM控件。
MSComm控件串口具有完善的串口数据的发送和接收功能。通过此控件,PC机可以利用串行口与其它设备实现轻松连接,简单高效地实现设备之间的通讯。此控件的事件响应有两种处理方式。事件驱动方式:由MSComm控件的OnComm事件捕获并处理通讯错误及事件;查询方式:通过检查CommEvent属性的值来判断事件和错误。
1) MSComm控件的主要属性和方法
a. CommPort:设置或返回串行端口号,其取值范围为1—99,缺省为1
b. Setting:设置或返回串行端口的波特率、奇偶校验位、数据位数、停止位。
c. PortOpen:打开或关闭串行端口。
d. RThreshold:该属性为一阀值,它确定当接收缓冲区内字节个数达到或超过该值后就产生MSComml-OnComm事件。
e. Input:从接收缓冲区移走一串字符。
f. Output:向发送缓冲区传送一字符串。
软件流程图如下:
图15 PC机软件流程图
单片机程序流程图:
参数设定:通信端口选择COM1,波特率设定为1200B/S
MSCOmm.CommPort=1
MSComm.Setting=“1200, n, 8, 1”。
START: MOV SP,#60H
MOV TMOD,#20H
MOV TH1,#0E6H
MOV TL1,#0E6H ;1200B/S,晶振为12MHZ
MOV PCON,#00H
MOV SCON,#50H
SETB TR1
图16 单片机通讯程序流程图
5.2 软件设计要求
(1)、整个程序延时地方较多,因此设立了软件延时子程序和定时器中断两种延时方法
(2)、按钮检测中采用软件延时方法执行按键的去抖动
(3)、正常工作时:采用动态的显示方法显示当前温度,即高速循环点亮四位数码管中的每一位。
(4)、当转温度限时:秒循环显示。1秒钟内,蜂鸣器报警750ms,不报警250ms,根据电路的实际连接情况,当蜂鸣器报警时的同时LED发光二极管也被点亮。
5.3 软件清单:
温度传感器ds1820 的汇编程序------------------------------------
;___________________________________________________________________________
;端口介绍:P1.0:加 P1.1:减 P3.2:DS1820数据脚 P0:数码管 P2.1退出设定指示灯
; P2.7:数码管个位控制 P2.6:数码管十位控制 P2.5:数码管百位控制
;采用AT89C51单片机,晶振11.0592MHZ
;P3.2为温度测量芯片DS18B20的数据脚
;P3.5超限报警的标志位0为允许,1为禁止
;位地址38H是否检测到DS18B20标志位,1为检测到,0为检测不到
;位地址39H为温度过低标志位,1为过低,0正常
;位地址3AH为温度过高标志位,1为过高,0正常
;20H--温度百位整数存放地址
;21H--温度十位整数存放地址
;22H--温度个位整数存放地址
;2FH--温度超高预设值
;2EH--温度过低预设值
;功能介绍:加减按键同时按下进入温度设定状态,然后按加或减按键进行温度设定,然后再次同时按加减键退出
; 设定温度
;**************************************************************************************************
;///////////////////单片机内存分配申明!//////////////////////////////
TEMPER_L EQU 29H;用于保存读出温度的低8位
TEMPER_H EQU 28H;用于保存读出温度的高8位(可位寻址)
FLAG1 EQU 38H;是否检测到DS18B20标志位
FLAG2 EQU 01H;进入设定状态标志位
;////////////////////////////////入口//////////////////////////////////////
ORG 0000H
AJMP MAIN;转入主程序
ORG 0030H
;//////////////////////////////////主程序开始//////////////////////////////
MAIN: MOV 2FH,#27;设定高于27度为温度过高
SETB P2.1 ;关闭等待指示灯
CLR FLAG2
main1:
;////////对温度过高预定值取出百位(40H)、十位(42H)、个位(41H)/////////////////////////
mov a,2FH ;存储的最高温度27度
mov b,#10 ;取出十位和个位
div ab
ORL A,#00110000B
mov 41H,a ;十位
mov 42H,b ;个位
MOV A,42H
ORL A,#00110000B;转化成ASCII码
mov 42H,A
mov a,2FH
mov b,#100 ;取出百位
div ab
ORL A,#00110000B
mov 40H,a ;百位
;//////////////////////DS1820参数读取////////////////////////////////////////////
duqu:LCALL GET_TEMPER ;调用读温度子程序并初始化DS1820
LCALL DISP ;调用显示当前温度
;/////////////////温度比较///////////////////////////////
MOV A,29H;将现场实际温度传递给A
CJNE A,2FH,LL1;比较当前的温度与设定的温度是否相等
CLR P2.0;开启电风扇
SJMP ANJIAN
LL1:SETB P2.0;关闭电风扇
;/////////////////////////////////按键判断//////////////////////////////
ANJIAN: LCALL DISP
MOV A,P1 ;读取当前按键的值
ANL A,#0FH ;屏蔽高位
sheding:CJNE A,#0CH,jia ;加减按键一起按就进入温度设定状态
ACALL DELAY100 ;消除键抖动
CJNE A,#0CH,jia ;加减按键一起按就进入温度设定状态
setb flag2 ;启动设定
sjmp duqu
jia: CJNE A,#0EH,jian ;加处理
ACALL DELAY100 ;消除键抖动
CJNE A,#0EH,jian ;加处理
JNB FLAG2,DUQU ;在加减键没有同时按下的时候,只按加按键时不执行任何功能,并跳到读取当前温度
MOV A,2FH ;先读取原先设定的温度值
INC A ;原先设定的温度值加1,当设定的温度值不能超过125
MOV 2FH,A ;将当前设定的温度值保存
SJMP BAOCUN
jian: CJNE A,#0DH,duqu ;减处理
ACALL DELAY100 ;消除键抖动
CJNE A,#0DH,duqu ;减处理
JNB FLAG2,DUQU ;在加减键没有同时按下的时候,只按加按键时不执行任何功能,并跳到读取当前温度
MOV A,2FH ;先读取原先设定的温度值
DEC A ;原先设定的温度值减1,当设定的温度值不能超过-25
MOV 2FH,A ;保存当前设定的温度
baocun:CJNE A,#0CH,TUICHU;加减按键一起按就保存温度设定状态 并退出设定
ACALL DELAY100 ;消除键抖动
CJNE A,#0CH,TUICHU;加减按键一起按就保存温度设定状态 并退出设定
clr flag2 ;关闭设定
SJMP QUIT
TUICHU:CPL P2.1;等待退出设定状态
LCALL DELAY100
LCALL DELAY100
LCALL DELAY100
LCALL DELAY100
LCALL DELAY100
SJMP BAOCUN
quit:LCALL DISP
ljmp main1
disp:
;//////////////////////////取出温度整数部分的百位/十位/个位/////////////////////////////
JNB FLAG2,DQ
MOV A,2FH;显示设定温度值
SJMP XS
DQ:mov a,29H;显示当前温度值
XS:mov b,#10 ;取出十位和个位
div ab
MOV DPTR,#WORDTAB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.7;开启个位数码管显示
SETB P2.6
SETB P2.5
LCALL DELAY100
SETB P2.7
MOV A,B
MOV DPTR,#WORDTAB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6;开启十位数码管显示
SETB P2.7
SETB P2.5
LCALL DELAY100
SETB P2.6
mov a,29H
mov b,#100 ;取出百位
div ab
MOV DPTR,#WORDTAB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.5
SETB P2.6
SETB P2.7
LCALL DELAY100
SETB P2.5
RET
;100毫秒延时子程序,占用R4、R5
DELAY100:MOV R4,#100
D222:MOV R5,#248
DJNZ R5,$
DJNZ R4,D222
RET
;////////////DS18B20复位初始化及判断是否检测到器件的程序///////////////
INIT_1820:
SETB P3.2
NOP
CLR P3.2
MOV R0,#06BH;主机发出延时537微秒的复位低脉冲
MOV R1,#03H
TSR1:
DJNZ R0,TSR1
MOV R0,#6BH
DJNZ R1,TSR1
SETB P3.2;然后拉高数据线
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB P3.2,TSR3;等待DS18B20回应
DJNZ R0,TSR2
LJMP TSR4 ; 延时
TSR3:
SETB FLAG1 ; 置标志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 ; 清标志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH
TSR6:
DJNZ R0,TSR6 ; 时序要求延时一段时间
TSR7:
SETB P3.2
RET
;///////////写DS18B20的子程序(有具体的时序要求)//////////////////
WRITE_1820:
MOV R2,#8;一共
展开阅读全文