1、本科毕业论文,设计提目:单片机室内温度自动控制系统的设计SCM indoor temperature automatic control system design,学 院(部):班 级:姓 名:指 导 老 师:,2012年6月1日,基于单片机室内温度自动控制系统的设计,1. 摘要 在人们的日常生活及生产过程中,经常要用到温度的检测和控制,在新世纪科学技术得到了空前的发展,科学技术有力推动了社会生产力的发展和社会信息化程度提高,同时也是现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。通过毕业设计学习和研究新技术具有实际意义。不仅可以学好专业知识,还可以增强动手能力。 温度控制系统广泛
2、应用于社会生活的各个领域 ,如家电、汽车、材料、电力电子等 ,常用的控制电路根据应用场合和所要求的性能指标有所不同 , 在工业企业中,如何提高温度控制对象的运行性能一直以来都是控制人员和现场技术人员努力解决的问题。这类控制对象惯性大,滞后现象严重,存在很多不确定的因素,难以建立精确的数学模型,从而导致控制系统性能不佳,甚至出现控制不稳定、失控现象。传统的继电器调温电路简单实用 ,但由于继电器动作频繁 ,可能会因触点不良而影响正常工作。控制领域还大量采用传统的PID控制方式,但PID控制对象的模型难以建立,并且当扰动因素不明确时,参数调整不便仍是普遍存在的问题。而采用数字温度传感器DS18B20
3、,因其内部集成了A/D转换器,使得电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。数字温度传感器DS18B20只用一个引脚即可与单片机进行通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。由于DS18B20芯片的小型化,更加可以通过单跳数据线就可以和主电路连接,故可以把数字温度传感器DS18B20做成探头,探入到狭小的地方,增加了实用性。更能串接多个数字温度传感器DS18B20进行范围的温度检测。,关键词:AT89S51单片机 DS18B20温度芯片 温度控制 串口通讯,2.设计要求 设计基于单片机的室内温度自动控制系统,用于控制温度,具体要求如下: 1.温度连
4、续可调,范围为0-40 2.超调量%20% 3.温度误差0.53.工作原理 温度传感器 DS18B20 从设备环境的不同位置采集温度,单片机 AT89S51 获取采集的温度值,经处理后得到当前环境中一个比较稳定的温度值,再根据当前设定的温度上下限值,通过加热和降温对当前温度进行调整。当采集的温度经处理后超过设定温度的上限时,单片机通过三极管驱动继电器开启降温设备 (压缩制冷器) ,当采集的温度经处理后低于设定温度的下时 , 单片机通过三极管驱动继电器开启升温设备 (加热器) 。 当由于环境温度变化太剧烈或由于加热或降温设备出现故障,或者温度传感头出现故障导致在一段时间内不能将环境温度调整到规定
5、的温度限内的时候,单片机通过三极管驱动扬声器发出警笛声。 系统中将通过串口通讯连接PC机存储温度变化时的历史据,以便观察以后整个温度控制过程及监控温度变化的全过程。,PC机,MAX232电平转换芯片 片,AT89S518BIT CPU,数据显示,超温报警,键盘电路,DS18B20 温度芯片数据传输,输入电源,继电器1,继电器2,加热器,压缩制冷器,工作原理图,4.方案设计,1.温度测量方案 DS18B20是DALLAS公司生产的一线式数字温度传感器,它具有微型化、低功耗、高性能抗干扰能力、强易配处理器等优点,特别适合用于构成多点温度测控系统,可直接将温度转化成串行数字信号(按9位二进制数字)给
6、单片机处理,且在同一总线上可以挂接多个传感器芯片,它具有三引脚TO-92小体积封装形式,温度测量范围55125,可编程为912位A/D转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,业可采用寄生电源方式产生,多个DS18B20可以并联到三根或者两根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。从而可以看出DS18B20可以非常方便的被用于远距离多点温度检测系统。 综上,在本系统中我采用温度芯片DS18B20测量温度。该芯片的物理化学性很稳定,它能用做工业测温元件,且此元件
7、线形较好。在0100摄氏度时,最大线形偏差小于1摄氏度。该芯片直接向单片机传输数字信号,便于单片机处理及控制。,温度芯片DS18B20,2.主控制部分方案 AT89S51 是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(in-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89
8、S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAR,), 32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的
9、需求。 由于系统控制方案简单 ,数据量也不大 ,考虑到电路的简单和成本等因素 ,因此在本设计中选用 A TMEL 公司的 A T89S51单片机作为主控芯片。主控模块采用单片机最小系统是由于 A T89S51芯片内含有4 KB的 E2PROM ,无需外扩存储器 ,电路简单可靠 ,其时钟频率为 024 MHz ,并且价格低廉 ,批量价在 10元以内。 其主要功能特性: 兼容MCS-51指令系统 4k可反复擦写(1000次)ISP Flash ROM 32个双向I/O口 4.5-5.5V工作电 2个16位可编程定时/计数器 时钟频率0-33MHz 全双工UART串行中断口线 128x8 bit内部
10、RAM 2个外部中断源 低功耗空闲和省电模式 中断唤醒省电模式 3级加密位 看门狗(WDT)电路 软件设置空闲和省电功能 灵活的ISP字节和分页编程 双数据寄存器指针 可以看出AT89S51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时器/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟。同时,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式何在RAM中的内容,但振荡
11、器停止工作并禁止其它所有部件工作直接到一个硬件复位。 AT89S51引角功能说明 Vcc:电源电压 GND:地 P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口,作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端口。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1口:P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写
12、“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号校验期间,P1接收低8位地址。下表为P1口第二功能。,P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流I。在访问位地址的外部数据存储器(如执行:MOVX Ri 指令)时,P2口线上的内(也即特殊功能寄存器,在整个访问期间不改变。Flash 编程或校验时,P2也接收高位地址和其它控制信号。)
13、,RST:复位输入。当振荡工作时,RST引脚出现两个机器周期上高电平将使单片机复位。WDT益出将使该引脚输出高电平,设置SFR AUXR 的 DISRTO 位(地址8EH)可打开或关闭该功能。DISRTO 位缺省为RESET输出高电平打开状态。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出的正脉冲信号,因此它可对外输出时钟或用于定时目地,要注意的是:第当访问外部数据存储器时将跳过一个ALE脉冲。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止A
14、LE操作。该位禁位后,只有一条MOVX 和MOVC指令ALE才会被激活。此外,该引脚伎被微弱拉高,单片机执行外部程序时,应设置ALE无效。 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。当访问外部数据存储器,高有两次有效的PSEN信号。EA/VPP:外部访问允许。欲使CPU公访问外部程序存储器(地址0000HFFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的
15、指令。Flash存储器编程时,该引脚加上12V的编程电压Vpp。 XTAL1:振荡器反相放大器及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。 AT89S51单片机内部构造及功能: 特殊功能寄存器:特殊功能寄存器的片内空间分存如下图3-2所示。这些地址并没有全部占用,没有占用的地址不可使用,读这些地址将得到一个随意的数值。而写这些地址单元将不能得到预期的结果。 中断寄存器:各中断允许控制位于IE寄存器,5个中断源的中断优先级控制位于IP寄存器。图4-2为AUXR辅助寄存器。,AUXR辅助寄存器,双时钟指针寄存器:为方便地访问内部和外部数据存储器,提供了两个16位数据指针寄存储
16、器:PD0位于SFR区块中的地址82H、83H和DP1位于地址84H、85H,当SFR中的位DPS=0时选择DP0,而DPS=1时选择DP1。在使用前初始化DPS。,双时钟指针寄存器,电源空闲标志:电源空闲标志(POF)在特殊功能寄存储器SFR中PCON的第4位(PCON.4),电源打开时POF置“1”,它可由软件设置睡眠状态并不为复位所影响。 存储器结构:MCS-51单片机内核采用程序存储器和数据存储器空间分开的结构,均具有64KB外部程序和数据的寻址空间。 程序存储器:如果EA引脚接地(GND),全部程序均执行外部存储器。在AT89S51,假如接至Vcc(电源),程序首先执行从地址0000
17、H0FFFH(4KB)内部程序存储器,再执行地址为1000HFFFFH(60KB)的外部程序存储器。 数据存储器:在AT89S51的具有128字节的内部RAM,这128字节可利用直接或间接寻址方式访问,堆栈操作可利用间接寻址方式进行,128字节均可设置为堆栈区空间。 看门狗定时器(WDT):WDT是为了解决CPU程序运行时可能进入混乱或死循环而设置,它由一个14bit计数器和看狗复位SFR(WDTRST)构成。外部复位时,WDT默认为关闭状态,要打开WDT,必按顺序将01H和0E1H写到WDTRST寄存器,当启动了WDT,它会随晶体振荡器在每个机器周期计数,除硬件复位或WDT溢出复位外没有其它
18、方法关闭WDT,当WDT溢出,将使RST引脚输出高电平的复位脉冲。引脚图详见下图:,AT89S51单片机引脚图,5 各单元的设计,1.键盘单元 单片机应用系统中除了复位按键有专门的复位电路,以及专一的复位功能外,其它的按键或键盘都是以开关状态来设置控制功能或输入数据。 键开关状态的可靠输入 :为了去抖动我采用软件方法,它是在检测到有键按下时,执行一个10ms的延时程序后,再确认该键电平是否仍保持闭合状态电平,如保持闭合状态电平则确认为真正键按下状态,从而消除了抖动影响 在这种行列式矩阵键盘非编码键盘的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一
19、步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。 对照图示的4*4键盘,说明线反转法工作原理。首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下是通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与
20、零电平行线相交的交点上的那个键。键盘共有16个按键,用于方便设定温度。,0,9,数字按键,输入数字0-9,确认,设置的确认,修改设置温度时进行确认,清除,设置的清除,修改设置温度时进行删除,开启,开启电源,关闭,关闭电源,F1,显示及设置转换到温度点1,按此按键后,显示预设置温度的数码管闪烁,F2,显示及设置转换到温度点2,按此按键后,显示预设置温度的数码管闪烁,2.温度控制及超温和超温警报单元,当采集的温度经处理后超过规定温度上限时,单片机通过 P1.4 输出控制信号驱动三极管 D1 ,使继电器 K1 开启降温设备 ( 压缩制冷设备) :当采集的温度经处理后低于设定温度下限时,单片机通过 P
21、1.5 输出控制信号驱动三极管 D2 ,使继电器 K2 开启升温设备 ( 加热器1) 当由于环境温度变化太剧烈或由于加热或降温设备出现故障,或者温度传感头出现故障导致在一段时间内不能将环境温度调整到规定的温度限内的时候,单片机通过三极管驱动扬声器发出警笛声。具体电路连接如下图 所示 :,具体电路连接图,3.温度测试单元,采用温度芯片DS18B20。使用集成芯片,能够有效的减小外界的干扰,提高测量的精度,简化电路的结构 。,4.温度控制器件电路,单片机通过三极管控制继电器的通断,最后达到控制电热器的目的。当温度未达到要求时,单片机发送高电平信号使三极管饱和导通,继电器使电源与电热器接通,电热器加
22、热。温度慢慢升高。当温度上升到预定温度时,单片机发送低电平信号三极管进入截止状态,继电器的弹片打到另一侧,使电热器与电源断开,电热器停止加热。继电器电路中有一个三极管8050的保护电路,即将一个二极管反向接到三机管的两端。连接方法如下图所示,单片机控制信号,其原理是:当继电器突然断电时,继电器产生很大的反向电流。二极管的作用是将反向电流分流,使流过三级管8050的电流比较小,达到保护三极管8050的作用。,5.七段数码管显示单元,本部分电路主要使用七段数码管和移位寄存器芯片74LS164。单片机通过I2C总线将要显示的数据信号传送到移位寄存器芯片74LS164寄存,再由移位寄存器控制数码管的显
23、示,从而实现移位寄存点亮数码管显示。由于单片机的时钟频率达到12M,移位寄存器的移位速度相当快,所以我们根本看不到数据是一位一位传输的。从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样。具体见实际连线图如下图。,当清除端(CLEAR)为低电平时,输出端(QAQH)均为低电平。 串行数据输入端(A,B)可控制数据。当 A、B 任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下 Q0 为电平。当 A、B 有一个为高电平,则另一个就允许输入数据,并在 CLOCK 上升沿作用下决定 Q0 的状态,逻辑封装图如上图。引出端符号:CLOCK 时钟输入端;CLEAR 同步清除输
24、入端(低电平有效);A,B 串行数据输入端;QAQH 输出端。真值表如下表:,实际连线图,6.接口通讯单元 max232资料简介: 该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。由于电脑串口rs232电平是-10v +10v,而一般的单片机应用系统的信号电压是ttl电平0 +5v,max232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-
25、232-F电平。主要特点 :1、单5V电源工作2、 LinBiCMOSTM工艺技术3、 两个驱动器及两个接收器4、 30V输入电平5、低电源电流:典型值是8mA6、符合甚至优于ANSI标准 EIA/TIA-232-E及ITU推荐标准V.287、ESD保护大于MIL-STD-883(方 法3015)标准的2000V,51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但
26、是还是用专用芯片更简单可靠。 在本设计中采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接,串口通讯具体如下图:,通讯接口连线图,6 .电源输入部分,控制系统主控制部分电源需要用5V直流电源供电,其电路如下图所示,把频率为50Hz、有效值为220V的单相交流电压转换为幅值稳定的5V直流电压。其主要原理是把单相交流电经过电源变压器、整流电路、滤波电路、稳压电路转换成稳定
27、的直流电压。,由于输入电压为电网电压,一般情况下所需直流电压的数值和电网电压的有效值相差较大,因而电源变压器的作用显现出来起到降压作用。降压后还是交流电压,所以需要整流电路把交流电压转换成直流电压。由于经整流电路整流后的电压含有较大的交流分量,会影响到负载电路的正常工作。需通过低通滤波电路滤波,使输出电压平滑。稳压电路的功能是使输出直流电压基本不受电网电压波动和负载电阻变化的影响,从而获得稳定性足够高的直流电压。本电路使用集成稳压芯片7805解决了电源稳压问题。,7 程序设计,电源部分连线图,7.1 程序结构分析,主程序调用了5个子程序,分别是数码管显示程序、键盘扫描及按键处理程序、温度信号处
28、理程序、继电器控制程序、单片机与PC机串口通讯程序。键盘扫描电路及按键处理程序:实现键盘的输入按键的识别及进入相应的程序。温度信号处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。数码管显示程序:向数码的显示送数,控制系统的显示部分。继电器控制程序:控制继电器动作串口通讯程序:实现PC机与单片机通讯,将温度数据传送给PC机。,程序结构图,7.2主程序,程序开始的时候先设置初始化,然后就控制数码管显示当前温度。接着就判断F1、F2按键是否被按下。按下F1进入温度控制点1的程序、按下F2进入温度控制点2的程序。程序控制设置温度的两个数码管闪烁的,此时键盘输入有效。有按键按下的时候进入按键处
29、理程序。按下“确定”按键后,程序进入判断程序和继电器控制程序。继电器动作后,程序回到显示当前程序,并开始循环。 7.3 程序代码(详见附录 程序清单) 8. 测设分析 1、测试环境 环境温度28摄氏度,室内面积20平方米 测试仪器:数字万用表,温度计0-100摄氏度 2、测试方法 使系统运行,采用温度计同时测量室内度变化情况,得出系统 测量的温度。 3、测试结果 设定温度由0摄氏度到40摄氏度 标定温差=1摄氏度 调节时间 15s(具体视现场情况) 静态误差=0.5摄氏度 最大超调量1摄氏度 4、通过测试分析,对于实际室内的温度控制,可以再提出以下 2 点方法 : 增加传感器个数,对各个温度传
30、感器采集的数据进行求算术平均,可得到较为准确的温度值。 对实际室内的温度控制,可采用功率较大的电炉,并且通过风扇对箱内温度进行充分搅和,降温设备可采用空气压缩机等制冷设备。 5、通过实验测试和分析,发现虽然传感器的温度采集精度最高可得到 0.06 ,但测试得到的数据最小间隔为 0.03 。通过分析,当对浮点数求平均处理时,遇到同一时刻两个传感头采集的温度相差不大,使 0.06 时求出平均温度变为 0.03 为了解该数据是否真实,可采用一个高精度的数字温度计测试,发现读出的值与其基本一致,由此推断如果在同一,时间增加采集温度的个数,则可以进一步提高温度的精度。谢辞 本论文是在我的指导老师密切关心
31、和悉心指导下完成的。老师在课题开题期间和论文写作的过程中给予了我许多指导,导师总是以认真负责、一丝不苟的工作态度阅读并修改文章中不足的地方,他优良的作风和严谨治学的态度深深影响着我,至此,向恩师致以最真挚的感谢和最崇高的敬意! 同时我要感谢我的同学,特别是我的室友们,正是他们在这几年里陪我一起成长,一起学习,才让我有了今天的成绩。他们在平时的学习和生活中他们给予了我无私的关怀和帮助,在此表示我最诚挚的谢意。,程序清单,主程序: ORG 0000H ;DS18B20.ASM DS18SL EQU 41H ;用于保存读出温度的低8位 DS18SH EQU 40H ;用于保存读出温度的高8位DS18
32、FIG EQU 8H ;是否检测到DS18B20标志位A_BIT1 EQU 31H ;数码管个位数存放内存位置B_BIT1 EQU 32H ;数码管十位数存放内存位置D_BIT1 EQU 35H ;数码管百位数存放内存位置DS18CD1 EQU 42H ;DS18CD1-DS18CD8暂存64位ROMDS18CD2 EQU 43H ;从低到高DS18CD3 EQU 44HDS18CD4 EQU 45H DS18CD5 EQU 46HDS18CD6 EQU 47HDS18CD7 EQU 48HDS18CD8 EQU 49HDS1864B EQU 4AHDS18ADS EQU 4BHDS18DQ
33、EQU P1.0 ;30H,31H,32H,33H: X 个位 十位 XMOD7: MOV SP,#60HLCALL GET_TEMPER ;调用读温度子程序LCALL READCODEAJMP MOD7 INIT_1820: ;DS18B20初始化 SETB DS18DQ CLR DS18DQ ;延时,500US低MC MOV R7,#250 DJNZ R7,$ MOV R7,#150 DJNZ R7,$ SETB DS18DQ ;释放总线 LCALL DELAY60US ;15-60US的等待时间 MOV R6,#4 SETDSDQ:,LCALL DELAY60USJNB DS18DQ,S
34、ETDSDQFH ;60-240US内是否有返回信号,为0跳DJNZ R6,SETDSDQMOV R7,#250DJNZ R7,$CLR DS18FIGRETSETDSDQFH:SETB DS18FIGMOV R7,#250DJNZ R7,$MOV R7,#100DJNZ R7,$RET; 数据处理程序: TEMP0: INC AAJMP TEMP1TEMPCOV: MOV A,DS18SL ;数据处理子程序 TEMPCOVMOV B,#16DIV ABJB B.3,TEMP0TEMP1: MOV 34H,A ;将DS18SL的高四位右移四位,存入34H中(温度值)MOV A,B ;将DS18
35、SL的低四位X10/16得小数后一位数.MOV B,#10MUL ABMOV B,#16DIV ABMOV 30H,A ;将小数后一位数.存入30H中MOV A,DS18SH ;DS18SH中存放高8位数,权重16,MOV B,#16MUL ABADD A,34H ;34H中存入温度值的整数部分MOV B,#10 DIV ABMOV 31H,B ;个位存入31H中MOV B,#10 ;DIV AB ;MOV 32H,B ;十位存入32H中MOV B,#10 ;DIV AB ;MOV 35H,B ;百位存入33H中MOV A,DS18SHMOV 33H,#10H ;JB ACC.7,EXIT7M
36、OV 33H,#00HEXIT7: RET GET_TEMPER: ;读出转换后的温度值,并显示SETB DS18DQLCALL INIT_1820 ;先复位DS18B20JB DS18FIG,TSS2RET ;判断DS1820是否存在?若DS18B20不存在则返TSS2: MOV DS18ADS,#0DS18JX:LCALL DS18CODPMOV A,DS18ADSADD A,#9MOV DS18ADS,ACJNE A,#63,DS18JXRETDS18CODP:LCALL MRCOVT ;转换指定的DS18B20的温度LCALL MRRDTEDP ;显示温度,RETTEMP:LCALL
37、INIT_1820JB DS18FIG,NEXT4RETNEXT4:MOV DS18ADS,#9MOV A,#0CCH ;SKIP ROMLCALL WRITE_1820MOV A,#44H ;温度转换命令LCALL WRITE_1820LCALL DELAY1SLCALL MRRDTEDPRET;写DS18B20的子程序(有具体的时序要求)WRITE_1820: ;写DS18B20MOV R5,#8DS18JXWE:SETB DS18DQ ;初始化CLR DS18DQCLR DS18DQMOV R7,#5DJNZ R7,$ ;拉低15US内,写入数据CLR CRRC AMOV DS18DQ,
38、CLCALL DELAY60US ;持续60USSETB DS18DQ ;写完一个位DJNZ R5,DS18JXWERETREAD_1820_CODE: ;读取CODE 64位 MOV R4,#8 ;读8次数MOV R1,#DS18CD1 ;低位地址存在R1 DS18JXRD3:,MOV R5,#8 ;8位数据DS18JXRD2:SETB DS18DQCLR DS18DQ ;前两句完成初始化NOPNOP ;延时至少1USSETB DS18DQ ;上升沿,并在,15US内读数MOV R7,#5DJNZ R7,$MOV C,DS18DQRRC ALCALL DELAY60US ;读时序,最少60U
39、SDJNZ R5,DS18JXRD2MOV R1,AINC R1DJNZ R4,DS18JXRD3SETB DS18DQRET;读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_18200:MOV R4,#2 ;读两次数MOV R1,#DS18SL ;低位地址存在R1DS18JXRD1:MOV R5,#8 ;8位数据DS18JXRD:SETB DS18DQCLR DS18DQ ;前两句完成初始化NOPNOP ;延时至少1USSETB DS18DQ ;上升沿,并在,15US内读数MOV R7,#5DJNZ R7,$ MOV C,DS18DQRRC ALCALL DELAY
40、60US ;读时序,最少60US,DJNZ R5,DS18JXRDMOV R1,ADEC R1DJNZ R4,DS18JXRD1SETB DS18DQRETREAD_1820_1: ;读取1位SETB DS18DQCLR DS18DQCLR DS18DQCLR DS18DQSETB DS18DQMOV R7,#5DJNZ R7,$JB DS18DQ,WEFHLCALL DELAY10MSWEFH:LCALL DELAY60USRETREADCODE: ;读取64位ROM,并显示出来SETB DS18DQLCALL INIT_1820JB DS18FIG,NEXTRETNEXT:MOV A,#3
41、3HLCALL WRITE_1820LCALL READ_1820_CODELCALL DISPLAYCD RETDS1864SEN: ;送出64个位的数据MOV R4,#8MOV DPTR,#DS18TAB,DS1864SEN1:MOV A,DS1864BMOVC A,A+DPTRLCALL WRITE_1820INC DS1864BDJNZ R4,DS1864SEN1RETMATCHROM:LCALL INIT_1820MOV A,#55H ;MARCH ROMLCALL WRITE_1820MOV DS1864B,DS18ADSLCALL DS1864SENRETMRCOVT: ;匹配R
42、OM并发出温度转换命令LCALL MATCHROMMOV A,#44H ;发出温度转换命令LCALL WRITE_1820LCALL DELAY1SRETMRRDTEDP: ;匹配ROM并显示转换温度LCALL INIT_1820LCALL MATCHROMMOV A,#0BEH ;发出读取命令 LCALL WRITE_1820LCALL READ_18200LCALL TEMPCOVLCALL DISPLAY ;调用数码管显示子程序RET键盘子程序 START:NOP ;程序开始 LCALL CH_KEY ;检查键盘 AJMP START ;返回,CH_KEY:LCALL KS ;检查有没有
43、按键按下 JNZ LK1 AJMP CH_KEY LK1:LCALL T12MS ACALL KS JNZ LK2 RET LK2:NOP LCALL SBIE ;按键识别子程序 MOV BUFF, A ;送缓冲区以识别是数字键还是功能键? LCALL CH_KF ;判断按键功能。 JB FLAG1 ,KEY_FUN ;标志为1,则为功能键超温报警程序: DIV:MOVR2,#08H;1kz持续时间 DIV1:MOVR3,#0FAH DIV2:CPLP3.3;输出1khz方波LCALLD5ms;调用延时程序1DJNZR3,DLV2;持续1秒DJNZR2,DIV1MOVR2,#10H;2khz持
44、续时间 DIV3:MOVR3,#0FAH DI4:CPLP3.3;输出2khz方波LCALLD25ms;调用延时程序2DJNZR3,DIV4DJNZR2,DIV3SIMPDIV;反复循环 D5MS:MOVR7,#0FFH;延时子程序1 LOOP:NOPNOPDJNZR7,LOOPRET,D25MS:MOVR6,#0FFH;延时子程序2LIN:DJNZR6,LINRET继电器控制程序:START1:MOVSP,#60HJD: CPLP2.6;P2.6取反 LCALLDELAY;延时 NOP SJMPJDDELAY:MOVR0,#0AH;延时子程序(1秒)DELAY33:MOVR1,#00HDELAY44:MOVR2,#0B2H DJNZR2,$ DJNZR1,DELAY44 DJNZR0,DELAY33LJMPSTART1 RET,