基于DS18B20的数字温度计的设计.doc_第1页
基于DS18B20的数字温度计的设计.doc_第2页
基于DS18B20的数字温度计的设计.doc_第3页
基于DS18B20的数字温度计的设计.doc_第4页
基于DS18B20的数字温度计的设计.doc_第5页
免费预览已结束,剩余27页可下载查看

下载本文档

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

文档简介

本科生课程设计(论文) 单片机原理及接口技术课程设计(论文)题目:基于DS18B20的数字温度计的设计院(系): 专业班级: 学 号: 学生姓名: 指导教师: (签字)起止时间: 26课程设计(论文)任务及评语院(系): 教研室:学 号学生姓名专业班级课程设计(论文)题目基于DS18B20的数字温度计的设计课程设计(论文)任务课题完成的功能、设计任务及要求、技术参数实现功能由DS18B20数字温度传感器对温度进行采样,将测量结果送单片机,单片机与内部的设定值进行比较,若检测值在设定范围之内,在显示器上显示温度值,若检测值在设定范围之外,通过报警电路报警。可在LED数码管上直接显示温度,可以任意设定温度的上下限,可以根据设定温度值控制加热电路。设计任务及要求1、分析设计要求,明确性能指标,确定设计方案;2、完成单片机最小系统电路设计;3、完成温度检测、电源电路、报警电路、键盘电路、显示电路的设计;4、编写系统工作流程图和相应程序,并加注释;6、要求认真独立完成所规定的全部内容;所设计的内容要求正确、合理。7、撰写、打印设计说明书一份;设计说明书应在4000字以上。功能要求1加热电路有2组电阻丝组成,控制系统有2个选择开关,2个开关都接通,选择快速加热;一个开关接通,另一个断开,选择慢速加热:2加热器工作期间,绿色指示灯亮;达到预定温度值,则停止加热,绿色指示灯熄灭。技术参数:1、基本范围-50-110; 2、精度误差小于0.5; 3、1路温度。进度计划1、布置任务,查阅资料,确定系统的控制方案。(1天)2、确定系统主控芯片,完成单片机最小系统设计。(1天)3、绘制检测电路、电源电路、键盘电路、报警电路、显示电路硬件原理图(2天)4、编写系统流程图、软件。(2天)5、调试程序。(1天)6、撰写、打印设计说明书(2天)7、答辩(1天)指导教师评语及成绩平时: 论文质量: 答辩: 总成绩: 指导教师签字: 年 月 日注:成绩:平时20% 论文质量60% 答辩20% 以百分制计算摘 要随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。对于温度的测量方法与装置的研究就显得非常重要。由单片机与温度传感器构成的测温系统可广泛应用于很多领域。本文将介绍一种基于单片机控制的数字温度计,从硬件和软件两方面介绍了单片机温度控制系统的设计,对硬件原理图和程序框图作了简洁的描述。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,该设计控制器使用单片机AT89C51 ,测温传感器使用DS18B2O ,用4 位共阳极LED 数码管以串口传送数据,实现温度显示,能准确达到以上要求。DS18B20 数字温度传感器是单总线器件与51 单片机组成的测温系统,具有线路简单、体积小等特点,而且在一根通信线上,可以挂接多个DS18B20 ,因此可以构成多点温度测控系统。关键词:单片机;数字控制;LED数码管;DS18B20温度传感器目 录第1章 绪论1第2章 课程设计方案22.1 方案的选择22.2 整体功能说明22.3 硬件功能模块组成22.4 软件功能模块组成32.5 系统结构框图3第3章 硬件设计43.1 系统的组成43.2 主控器的介绍43.3 数字温度传感器63.3.1 DS18B20介绍63.3.2 DS18B20内部结构及功能63.3.3 DS18B20测温原理73.3.4 DS18B20的特性及引脚83.4 系统电路的设计83.4.1 单片机最小系统83.4.2 显示电路93.4.3 报警电路103.4.4 键盘电路103.4.5 电源电路103.4.6 总电路的设计11第4章 软件设计134.1 程序设计内容134.1.1 主程序134.1.2 读出温度子程序144.1.3 温度转换命令子程序144.1.4 计算温度子程序154.1.5 显示数据刷新子程序164.2 程序设计16第5章 课程总结25参考文献26第1章 绪论本文设计的简单实用的数字式温度测控系统,亦可广泛引用与各种定时、温度控制领域,如工业工控过程的温度控制,发电厂、热电厂、大型中央空调设备用户端、自动化生产线、农业养殖、温棚、温室、干燥房、粮食仓库、井下温度控制等场合。系统能够随时测量环境温度并且先上当前的温度变化值,因此,研究和开发经济、实用的定时温度测控系统具有现实意义,也有着广泛的应用器上当前室温的显示等等。不同的温度传感器测量的精度以及功能强弱各不相同应用前景。温度采集与显示系统在工业、民用、军事等领域占有重要的地位,比如空调遥控,因此在不同的应用场合可以设计不同的系统对温度进行检测和控制,如在普通室内温度检测中,可用一般的温度传感器,通过A/D转换之后,由数码管直接显示该室内温度。但是普通型传感器芯片不仅体积大,而且传输的信号都是模拟信号,必须经过A/D转换后才能被处理器识别,而且不能实现多点温度的检测,最大的缺点就是它的精度不高。而在要求精度很高的温度控制中,显然普通的温度采集和显示系统已不能满足设计的需要。因此,针对此现状,本文设计了一种由单片机控制的智能温度采集与显示系统。它以AT89C51单片机为核心,实现对温度信号的采集和显示。在温度信号的采集方面,利用单总线数字温度传感器的特点及功能实现对温度的采集,由DALLAS半导体公司生产的DS18B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式,可在-50+110的范围内测量温度。从中央处理器到DS18B20仅需连接一条信号线和地线,其指令信息和数据信息都经过单总线接口与DS18B20进行数据交换,且每个DS18B20有唯一的序列号。因此同一条单总线上可以接多个DS18B20,构成主从结构的多点测温传感器网络。而在显示方面采用数码管显示。此系统具有结构简单、价格低廉、易于操作及系统扩展、性价比高等特点。它利用AT89C51单片机的强大功能和可扩充性为后盾,可实现对某一路温度和温度上下限进行有效的控制与输出。第2章 课程设计方案2.1 方案的选择方案一:由于本设计是测量电路,可以使用热敏电阻类的器件利用其感温效应,在将随时测得的温度转变为电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据处理,在显示电路上就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。方案二:考虑到用温度传感器,在单片机的电路设计中,大多都使用传感器,所以可采用温度传感器DS18B20,这种传感器可以很容易直接读取被测量的温度值,用起来非常方便,进行转换后,就可以满足设计要求。以上两种方案很容易看出来,方案二电路比较简单,软件设计也相对简单,故本设计采用方案二。2.2 整体功能说明 以AT89C51单片机为主控制器,以数字式温度传感器DS18B20为传感原件,以LED数码管最为显示器件实时显示测量温度。数字式温度计测温范围在-50-110,精度误差小于0.5。通过键盘扩展,实现温度上下限的设定及温度报警功能。对温度采样值实现数字滤波。通过硬件或软件的方法实现时间显示。利用温度传感器DS18B20对温度进行采样,将测量结果送单片机,单片机与内部的设定值进行比较,若检测值在设定范围之内,在显示器上显示温度值,若检测温度在设定值范围之外,通过报警电路报警。可在LED数码管上直接显示温度,可以任意设定温度的上下限,可以根据设定温度值控制加热电路。2.3 硬件功能模块组成温度计的控制器使用单片机AT89C51,温度传感器使用DS18B20,用四位共阴极LED数码管以动态扫描法实现温度显示。主控制器:单片机AT89C51具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要。显示电路:显示电路采用4位共阴极LED数码管,从P1口输出断码,列扫描用P3.0-P3.3口来实现,列驱动用74LS04来驱动数码管。2.4 软件功能模块组成 系统程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和显示数据刷新子程序等。主程序:主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。温度测量每1s进行一次。读出温度子程序:主要功能是读出RAM中的9字节。在读出时须进行CRC校验,校验有错时不进行温度数据的改写。温度转换命令子程序:主要是发温转换开始命令。计算温度子程序:将RAM中读取值进行BCD码的转换运行,并进行温度值正负的判断。显示数据刷新子程序:主要是对显示缓冲中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。2.5 系统结构框图单片机控制的基于DS18B20的数字温度计设计的系统结构框图如图2.1所示:单 片 机芯 片AT89C51驱动电路温度传感器DS18B20LED数码管报 警键 盘电 路复 位电 路图2.1 数字温度计的设计的结构框图第3章 硬件设计3.1 系统的组成该设计的硬件电路有主控电路部分(单片机AT89C51)、温度采集检测部分(DS18B20)、显示部分(四位八段数码管)、DS18B20与单片机的接口部分以及电源部分等这几个部分组成。各部分之间相互协作,构成一个统一的有机整体,实现数字温度计的功能。各部分的硬件电路设计如下。3.2 主控器的介绍单片机AT89C51的引脚图:图3.1 AT89C51引脚图AT89C51是美国ATMEL公司生产的低电压,高性能的CMOS8位单片机片内4Kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存储器(RAM),器件采用ATMEL公司的高密度、非易失存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大。AT89C51单片机可为你提供许多高性价的应用场合,可灵活的应用于各种控制领域。引脚及功能介绍:与MCS-51 兼容,4K字节可编程闪烁存储器,寿命:1000写/擦循环,数据保留时间:10年,全静态工作:0Hz-24MHz ,三级程序存储器锁定,1288位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路,管脚说明:VCC:供电电压。GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,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”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器。3.3 数字温度传感器3.3.1 DS18B20介绍DALLAS 最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。温度测量范围为-55+125 摄氏度,可编程为9位12 位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3 根或2 根线上,CPU只需一根端口线就能与诸多DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。3.3.2 DS18B20内部结构及功能DS18B20的内部结构如图3.3所示。主要包括:寄生电源、温度传感器、64位激光ROM和单总线接口、存放中间数据的高位暂存器RAM、用于存储用户设定温度上下限值的TH和TL触发器、存储与控制逻辑、8位循环校验码(CRC)发生器等8部分。C64位RAM和单线接口高速暂存器存储器控制逻辑温度传感器高温触发器TH低温触发器TL配置寄存器8位CRC发生器图3.2 DS18B20内部结构3.3.3 DS18B20测温原理DS18B20的测温原理如图3.5所示,图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给定时器1。高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为计数器2的脉冲输入。计数器和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1 的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。图3.3 测温原理图3.3.4 DS18B20的特性及引脚DS18B20具有如下特性:1. 采用单总线技术,与单片机通信只需要一根I/O线,在一根线上可以挂接多个DS18B20。2. 每只DS18B20具有一个独有的,不可修改的64位序列号,根据序列号访问地应的器件。3. 低压供电,电源范围从35V,可以本地供电,也可以直接从数据线上窃取电源(寄生电源方式)。4. 测温范围为-55+125,在-1085范围内误差为0.5。5. 可编辑数据为912位,转换12位温度时间为750ms(最大)。6. 用户可自设定报警上下限温度。7. 报警搜索命令可识别和寻址哪个器件的温度超出预定值。8. DS18B20的分辩率由用户通过EEPROM设置为912位。9. DS18B20可将检测到温度值直接转化为数字量,并通过串行通信的方式与主控制器进行数据通信。 DS18B20采用3引脚封装,如图图3.4所示。其中,VCC和GND是电源和接地的引脚,DQ是输入/输出引脚(单线接口时,可作寄生供电)。图3.4 DS18B20引脚图3.4 系统电路的设计3.4.1 单片机最小系统主控制器AT89C51单片机的有最小系统、键盘电路、外围接口扩展电路、故障报警电路。其中键盘电路可以用来进行参数设定,外围扩展电路可以扩展I/O口,增强驱动能力。其外部接收转速偏差电压信号及电流转差反馈信号,经过内部软件进行相应的调节,输出信号至驱动电路控制晶闸管的触发角。单片机最小系统如图3.5所示。图3.5 AT89C51最小系统3.4.2 显示电路显示电路需要用4位LED数码管来显示温度值。利用单片机的I/O口驱动LED数码管的亮灭。如图3.6所示。图3.6 显示电路接口图3.4.3 报警电路数字温度计通过蜂鸣器发出间隔频率不一样的报警声音,实现分级报警。工作电路如图3.7所示。当P2.5口输入低电平是,三极管导通,蜂鸣器响;当P2.5口述如高电平时,三极管截止,蜂鸣器不工作。图3.7 报警器工作电路3.4.4 键盘电路键盘电路如图3.8所示。S1控制系统复位清零;当S2按下时,控制单片机升温;当S3按下时,控制单片机降温;当S4按下时,确定单片机的设定值。图3.8 键盘电路3.4.5 电源电路 电源是应用于系统的重要组成部分,与单片机电路翔连,电源设计的不可靠将影响到整个系统的稳定。由于本实验单片机所需提供电电源为5V直流稳压电源,而供电电源为220V的交流电,因此,本设计中选用7805三端稳压器。其工作原理:220V/50HZ的交流电压经变压器变压为9Vd交流电输入到电桥中,交流信号经桥路进行整流后转化为直流电压,得到单相全波脉冲波形,再经电解电容的滤波得到波动不太大的信号,经过一个无极性电容滤掉外部带来的高频干扰进入7805芯片,在7805的输出端输出一个平稳的+5V直流电平。如图3.9所示。图3.9 电源电路3.4.6 总电路的设计系统设计电路如图3.10所示:图3.10 设计总电路第4章 软件设计4.1 程序设计内容 系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。4.1.1 主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。主程序需要调用四个子程序,分别为数码管显示程序,温度测试及处理子程序,报警子程序,中断设定子程序。各模块功能如下:(1)数码管显示程序:向数码的显示送数,控制系统的显示部分。(2)温度测试及处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。(3)报警子程序:进行温度上下限判断及报警输出。主程序流程图如图4.1所示:图4.1 主程序流程图4.1.2 读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节。在读出是须进行CRC检验,这是一种使用广泛、检错能力很强的差错检测方法。它对数据进行多项式计算,并将得到的和数作为这个文件的一个实用特征码。检验有错时不进行温度数据的改写。其流程图如图4.2所示:Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY 图4.2 读DS18B20流程图 4.1.3 温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令。其流程图如图4.3所示:发DS18B20复位命令发跳过ROM命令发温度转换开始命令 结束图4.3 温度转换命令子程序流程图4.1.4 计算温度子程序计算温度子程序的主要功能是将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图4.4所示 开始温度零下?温度值取补码置“”标志计算小数位温度BCD值 计算整数位温度BCD值 结束置“+”标志NY图4.4 计算温度子程序流程图4.1.5 显示数据刷新子程序显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图4.5所示:温度数据移入显示寄存器十位数0?百位数0?十位数显示符号百位数不显示百位数显示数据(不显示符号) 结束NNYY图4.5 显示数据刷新子程序流程4.2 程序设计 程序设计:S1OK EQU 5FHTEMPUTER EQU 39HTEMPH EQU 5EHTEMPL EQU 5DHMS50 EQU 5CHSIGN EQU 5BHS1 BIT P1.0S2 BIT P1.1S3 BIT P1.2S4 BIT P1.3ORG 0000HLJMP MAINORG 000BH LJMP TOIT ORG 0030HMAIN: MOV SP, #60H MOV TMOD, #01H MOV TH0, #3CH MOV TL0, #0B0H SETB ET0 SETB TR0 SETB EA MOV TEMPH, #30 MOV TEMPL, #9 MOV TEMPUTER, #15 ;温度最始值 MOV S1OK, #00H MOV SIGN, #00H MOV 38H, #0BH MOV 37H, #0CH MOV 36H, #0BH ACALL DISP ACALL T1S; *; 主程序START: JB S1, NET1 ACALL T12MS JB S1, NET1 JNB S1, $ INC SIGN MOV A, SIGN CJNE A, #1, TIAO ACALL TIAOTL TIAO: CJNE A, #2, NET1 MOV SIGN, #0 ACALL TIAOTH; * NET1: MOV A, S1OK CJNE A, #1, START MOV A, TEMPUTER SUBB A, TEMPH JNB ACC.7, ALEM MOV A, TEMPUTER SUBB A, TEMPL JB ACC.7, ALEM SETB P2.1 ACALL WENDU ACALL DISP MOV S1OK, #00H AJMP START ALEM: MOV 36H, #0CH MOV 37H, #0CH MOV 38H, #0CH CLR P2.1 ACALL DISP ACALL T1S LCALL WENDU LCALL DISP MOV S1OK, #00H SJMP START;*TIAOTL:MOV 50H, TEMPUTER MOV 37H, TEMPL ACALL BIN_BCD ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS MOV 36H, #0AH MOV 37H, #0AH MOV 38H, #0AH ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS JB S2, ADD1 ACALL T12MS JB S2, ADD1 JNB S2, $ INC TEMPL MOV A, TEMPL CJNE A, #100, ADD1 MOV TEMPL, #0 ADD1: JB S3, ADD2 ACALL T12MS JB S3, ADD2 JNB S3, $ DEC TEMPL MOV A, TEMPL CJNE A, #00 , ADD2 MOV TEMPL,#100 ADD2: JB S4, TIAOTL ACALL T12MS JB S4, TIAOTL JNB S4, $ MOV TEMPUTER, 50H LJMP START ; 高位调整; *TIAOTH:MOV 50H, TEMPUTER MOV 37H, TEMPH ACALL BIN_BCD ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS MOV 36H, #0AH MOV 37H, #0AH MOV 38H, #0AH ACALL DISP ACALL T12MS ACALL T12MS ACALL T12MS ACALL T12MS JB S2, ADD11 ACALL T12MS JB S2, ADD11 JNB S2, $ INC TEMPH MOV A, TEMPH CJNE A, #100, ADD11 MOV TEMPH, #0 ADD11: JB S3, ADD22 ACALL T12MS JB S3, ADD22 JNB S3, $ DEC TEMPH MOV A, TEMPH CJNE A, #00 , ADD22 MOV TEMPH,#100 ADD22: JB S4, TIAOTH ACALL T12MS JB S4, TIAOTH JNB S4, $ MOV TEMPUTER, 50H LJMP START; 一秒定时中段; *TOIT: PUSH PSW PUSH ACC MOV TH0, #3CH MOV TL0, #0B0H INC MS50 MOV A, MS50 CJNE A, #14H, RETURN MOV S1OK, #1 MOV MS50, #00H RETURN:POP ACC POP PSW RETI; *;温度总子程序; *wendu: ACALL INIT_1820 ACALL RE_CONFIG ACALL GET_TEMPER ACALL TEMPER_COV RET; *;DS18B20初始化程序; * INIT_1820: SETB P2.0 NOP CLR P2.0 MOV R0,#06BH MOV R1,#03HTSR1: DJNZ R0,TSR1 ; 延时 MOV R0,#6BH DJNZ R1,TSR1 SETB P2.0 NOP NOP NOP MOV R0,#25HTSR2: JNB P2.0,TSR3 DJNZ R0,TSR2 LJMP TSR4 ; 延时TSR3: SETB 20H.1 ; 置标志位,表示DS1820存在 LJMP TSR5TSR4: CLR 20H.1 ; 清标志位,表示DS1820不存在 LJMP TSR7TSR5: MOV R0,#06BH MOV R1,#03HTSR6:DJNZ R0,TSR6 ; 延时 MOV R0,#6BH DJNZ R1,TSR6TSR7:SETB P2.0 RET; *; 重新写DS18B20暂存存储器设定值; *RE_CONFIG:JB 20H.1,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1 RETRE_CONFIG1: MOV A,#0CCH ; 发SKIP ROM命令 LCALL WRITE_1820 MOV A,#4EH ; 发写暂存存储器命令 LCALL WRITE_1820 MOV A,#00H ; TH(报警上限)中写入00H LCALL WRITE_1820 MOV A,#00H ; TL(报警下限)中写入00H LCALL WRITE_1820 MOV A,#1FH ; 选择9位温度分辨率 LCALL WRITE_1820 RET; *; 读出转换后的温度值; *GET_TEMPER: SETB P2.0 ; 定时入口 LCALL INIT_1820 JB 20H.1,TSS2 RET ; 若DS18B20不存在则返回TSS2: MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820 LCALL INIT_1820 MOV A,#0CCH ; 跳过ROM匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 MOV 37H,A ; 将读出的温度数据保存 RET; *; 写DS18B20的程序; *WRITE_1820: MOV R2,#8 CLR CWR1:CLR P2.0 NOP NOP NOP NOP RRC A MOV P2.0,C MOV R3,#35 DJNZ R3,$ SETB P2.0 NOP DJNZ R2,WR1 SETB P2.0 RET; *; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据; *READ_18200: MOV R4,#2 ; 将温度高位和低位DS18B20中读 RE00:MOV R2,#8RE01:CLR C SETB P2.0 NOP NOP CLR P2.0 NOP NOP NOP SETB P2.0 NOP NOP MOV C,P2.0 MOV R3,#35RE20: DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV R1,A DEC R1 DJNZ R4,RE00 RET; *; 将从DS18B20中读出的温度数据进行转换; *TEMPER_COV: MOV A,#0F0H ANL A,36H ; 舍去温度低位中小数点 SWAP A MOV 37H,A MOV A,36H JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值 INC 37HTEMPER_COV1:MOV A,35H ANL A,#07H SWAP A ADD A,37H MOV 37H,A ; 保存变换后的温度数据 LCALL BIN_BCD RET; *; 将16进制的温度数据转换成压缩BCD码; 38H中放百位,37十位,36个位; *BIN_BCD:MOV 39H,37H MOV A,37H MOV B,#100 DIV AB MOV 38H,A MOV 37H,B XCH A,B MOV B,#10 DIV AB MOV 37H,A MOV 36H,B RETDISP: SETB RS0 MOV R0, #36H MOV R7, #3LOOPP: MOV A, R0 MOV DPTR, #TAB MOVC A, A+DPTR MOV SBUF, A JNB TI, $ CLR TI INC R0 DJNZ R7, LOOPP CLR RS0 RETTAB: DB 11H, 0D7H, 32H, 92H, 0D4H, 98H, 18H, 0D1H, 10H, 90H ,0FFH, 070H, 0FEH ; 延时子程序T12MS: SETB RS1 MOV R7, #18H TM: MOV R6, #0FFH TM6: DJNZ R6, TM6 DJNZ R7, TM CLR RS1 R

温馨提示

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

评论

0/150

提交评论