1、 黄河科技学院毕业设计(论文) 第33页 毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;
2、学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规
3、定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名:日期: 年 月 日导师签名: 日期: 年 月 日1 绪论温度是工业对象中主要的被控参数之一,像冶金、机械、食品、化工各类工业中,广泛使用的各种加热炉、热处理炉、反应炉等,对工件的处理温度要求严格控制。随着技术的发展,各种惯性器件的性能在不断提高,体积也在不断小型化。对于惯性器件(如加速度计、陀螺)性能的提高,温度补偿作为一种重要的修正方式越来越引起人们
4、的注意,因此如何在惯性器件极小的空间内精确地测量、传输、处理温度信息,温度成了能否使其性能和体积优势进一步提高的关键问题。目前,温度测控器主要是用单片机控制温度传感器来测量物体温度,温度传感器的发展大致经历了以下3个阶段:1、传统的分立式温度传感器(含热敏元件),主要能够进行非电量和电量之间的转换。2、模拟集成温度传感器/控制器。模拟集成温度传感器是在20世纪80年代问世的,它将温度传感器集成在一个芯片上,可完成温度测量及模拟信号输出等功能。3、智能温度传感器。21世纪后,智能温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、虚拟传感器和网络传感器的方向迅速发展,产品如DS1624
5、、 DS1629、DS18b20等。本次设计的数字式温度测控器选用DS18b20温度传感器,其特点与性能将在后面部分介绍。数字式温度测控器的原理:DS18B20是温度测量器件,测得某部件的温度后,采用串行通信的方式送到单片机,温度经过数字化处理后,再由串/并转换电路74LS164送到数码管显示。硬件框图如下:图1.1 硬件框图软件:1、主流程:(1)初始化:将DS18B20设置为相应的工作方式;设置定时器50毫秒中断;(2)将DS18B20温度读入内存;(3)输出到LED显示;(4)判断是否到设置的报警温度,是则输出报警;否则转向上一步即(3);2、定时器中断:定时器设定50毫秒中断一次,中断
6、20次共1秒钟,1秒钟到,单片机从DS18B20取温度数据,放入内存;2 总体方案分析与硬件的选择2.1 产品的设计性能:能够测量物体表面的温度,测量范围是55+125,误差0.5。用数码管显示温度的实际值。2.2 设计方案的选择:采用AT89C51单片机作为控制器件。DS18B20作为温度测量器件。LED数码管作为显示器件。74LS164(串入并出)来驱动LED。采用AC220V电源供电,AC/DC变换。继电器和蜂鸣器作为信号输出。2.3 原理介绍:DS18B20是温度测量器件,测得某部件的温度后,采用串行通信的方式送到单片机。经数字处理后,把温度值经过串/并转换电路74LS164送到LED
7、显示。2.4 硬件的特点与性能:2.4.1 AT89C51的特点:AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8 位单片机,片内含 4k bytes 的可反复擦写的只读程序存储器(PEROM)和 128bytes 的随机存取数据存储器(RAM),器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器(CPU)和 Flash 存储单元,功能强大 AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。主要性能参数:1、与MCS-51产品指令系统完全兼容;2、4k字节可擦除Flash闪速存储
8、器;3、1000次改写周期;4、全静态操作:0Hz24MHz;5、三级加密程序存储器;6、1288位内部RAM;7、32位可编程IO口线;8、2个16位定时计数器;9、5个中断源;10、可编程串行UART通道;11、低功耗空闲和掉电模式;12、有片内振荡器和时钟电路;2.4.2 DS18B20的特性1、独特的单线接口,只需1个接口引脚即可通信;2、多点(multidrop)能力使分布式温度检测应用得以简化;3、不需要外部元件;4、可用数据线供电;5、不需备份电源;6、测量范围从-55至+125,增量值为0.5。等效的华氏温度范围是-67至257,增量值为0.9;7、以9位数字值方式读出温度;8
9、、在1秒(典型值)内把温度变换为数字;9、用户可定义的,非易失性的温度告警设置;10、告警搜索命令识别和寻址温度在编定的极限之外的器件(温度告警情况);11、应用范围包括恒温控制,工业系统,消费类产品,温度计或任何热敏系统;2.4.3 74LS164的特点说明74LS164(图2.1)为8位移位寄存器(串行输入,并行输出)。当清除端()为低电平时,输出端(Q0Q7)均为低电平。串行数据输入端(A,B)可控制数据。当A、B任意一个为低电平,则禁 止新数据输入,在时钟端(CP)脉冲上升沿作用下Q0为低电平。当A、B有一个为高电平,则另一个就允许输入数据,并在CP上升沿作用下决定Q0的状态。A、B为
10、穿行数据输入端,Q0Q7为并行数据输出端,CP为串行时钟输入端,为串行输出清零端,Vcc为+5V电源输入端,GND为接地端。使用74LS164做静态显示,可以使用串口方式0来传递数据,即RXD接74LS164的A和B,TXD接74LS164的CP,接Vcc,74LS164的输出端接共阴的数码管。 图2.1 74LS164的引脚分布2.4.4 LED显示器的特点数码管具有很好的人机界面,设计简单、价格便宜,通过过程控制还可以拥有静态显示和动态显示两功能,故数码管显示在单片机的系统中具有很广泛的应用。在各种仪器仪表中数码管已经成为不可缺少的重要组成部分,是仪器和人进行对话的一种重要形式。LED显示
11、器一般分为两类数码管和点阵。数码管只能显示数字信息,而点阵可以显示更为复杂的文字和图像信息。数码管在单片机系统中是一种重要的输出装置。数码管体积小、重量轻、低功耗尤其适用于输出纯数字信息。3 硬件部分的结构与工作原理3.1 AT89C51介绍3.1.1 AT89C51引脚功能说明1、Vcc:电源电压。2、GND:地。3、P0口:P0口是一组8位漏极开路型双向IO口,也即地址数据总线复用口。作为输出口用时,每脚可吸收8个TTL门电流,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FIash编程时
12、,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。4、P1口:P1是一个带内部上拉电阻的8位双向IO口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。FIash编程和程序校验期间,P1接收低8位地址。5、P2口:P2是一个带有内部上拉电阻的8位双向IO口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时
13、,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVXRI指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。6、P3口:P3口是一组带有内部上拉电阻的8位双向IO口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的
14、P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的 IO 口线外,更重要的用途是它的第二功能,如下表3.1所示:表3.1 P3口的第二功能端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外中断 0)P3.3(外中断 1)P3.4T0(定时计数器 0 外部输入)P3.5T1(定时计数器 1 外部输入)P3.6(外部数据存储器写选通)P3.7(外部数据存储器读选通)7、RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。8、ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低
15、8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的 l6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。9、EAVPP:外部访问允许。欲使 CPU 仅访问外部程序存储器(地址为 0000HFFFFH),EA 端必须保持低电平(接 地)。需注意的是:如果加密位 LB1被编程,复位时内部会锁存 EA 端状态。如 EA 端为高电平(接 VCC 端),CPU 则执行内部程序存储器中的指令。 Flash 存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。10、XTAL1:振荡器
16、反相放大器的及内部时钟发生器的输入端。11、XTAL2:振荡器反相放大器的输出端。3.1.2 振荡器特性XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器,石英体振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。3.1.3 芯片擦除整个EPROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦出操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外
17、,AT89C51设有稳态逻辑。在闲置模式下,CPU停止工作。但RAM、定时器、计数器、串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止使用其他芯片功能,直到下一个硬件复位为止。3.1.4 AT89C51的极限工作参数:工作温度 -55 to +125储藏温度 -65 to+150任一脚对地电压 -1.0V to +7.0V最高工作电压 6.6V直流输出电流 15.0 mA1、外部程序存储器读周期如图3.1所示图3.1 外部程序存储器读周期时序2、外部数据存储器读周期如图3.2所示 图3.2 外部数据存储器读周期时序 3、外部数据存储器写周期如图3.3所示 图3.3 外
18、部数据存储器写周期时序3.1.5串行口的工作方式:根据串行通信数据格式和波特率的不同,MCS-51系列单片机的串行通信有4种工作方式,可以通过编程进行选择。本设计用到串口的工作方式0。1、方式0(移位寄存器方式)特点:(1)串行数据通过RXD输入或输出,TXD输出频率为fosc/12的时钟脉冲。(2)数据格式为8位,低位在前,高位在后。(3)波特率固定:波特率=fosc/12(fosc为单片机外接的晶振频率)(4)发送过程以写SBUF寄存器开始,当8位数据传送完,TI被置为1,方可再发送下一帧数据。接收方必须先置REN=1(允许接收)和RI=0,当8位数据接收完,RI被置为1,此时,可通过读S
19、BUF指令,将串行数据读入。(5)移位寄存器方式多用于接口扩展。当用单片机构成系统时,往往感到并行口不够用,此时可通过外接串入并出移位寄存器扩展输出接口;通过外接并入串出移位寄存器扩展输入接口。方式0也可应用于短距离的单片机之间的通信。2、 串行口的应用编程:(1)定好波特率,串行口的波特率有两种方式,固定波特率和可变波特率。当使用可变波特率时,应先计算T1的计数初值,并对T1进行初始化;如果使用固定波特率(方式0、方式2),则此步骤可省略。(2)填写控制字,即对SCON寄存器设定工作方式,如果是接收程序或双工通信方式,需要设置REN=1(允许接收),同时也将TI、RI进行清零。(3)串行通信
20、可采用两种方式,查询方式和中断方式。TI和RI是一帧数据是否发送完或一帧数据是否到齐的标志,可用于查询;如果设置允许中断,可引起中断。两种方式的编程方法如下:查询方式发送程序:发送一个数查询TI发送下一个数据(先发后查)。查询方式接收程序:查询RI读入一个数据查询RI读下一个数据(先查后收)。中断方式发送程序:发送一个数据等待中断,在中断中再发送下一个数据。中断方式接收程序:等待中断,在中端中再接收一个数据。(4)两种方式中,当发送或接收数据后都要注意清TI或RI。3.1.6 定时器/计数器AT89C51芯片包含有两个16位的定时/计数器:定时器/计数器T0和定时器/计数器T1。共有4种工作方
21、式。本设计用到定时器/计数器T0的方式1,下面来介绍工作方式0。当TMOD寄存器中M1M0=01时,定时/计数器工作在方式1。方式1为16位定时/计数方式,由THx提供高8位、TLx提供低8位的计数初值,最大计数值为65536.当C/=0时,工作于定时方式,以振荡源的12分频信号作为计数脉冲.当C/=1时,工作于计数方式,对外部脉冲输入端T0或T1输入的脉冲计数。启动计数前需预置计数初值。启动后计数器立即加1,TLx低8位的计数满并回零后,向THx进位,当16位计数满回零时,中断溢出标志TFx置1,产生中断请求,表示定时时间到或计数次数到。若允许中断(Etx=1)且CPU开中断(=1),则CP
22、U响应中断,转向中断服务程序,同时,TFx自动清0。1、串行口时序:移位寄存器测试条件如下表所示: Vcc=5.0V20%;负载容抗=80pF.2、移位寄存器时序波形如图3.4图3.4 移位寄存器时序波形图3.2 DS18B20的工作原理3.2.1 DS18B20的内部结构 DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非易失性温度报警触发器TH和TL、配置寄存器。DS18B20的内部结构框图(图3.5)所示,其中DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地) 图3.5 DS18B20的内部结构框图64位光刻ROM的结
23、构如下表所示: 8位CRC校验码48位序列号8位工厂代码MSB LSBMSB LSBMSB LSB在ROM中,开始8位是工厂代码,接着是每个器件的唯一序列号,共有48位,最后8位是前56位的CRC校验码。可用ROM操作命令读出其内容。DS18B20温度传感器的内部存储器字节顺序如下表所示:温度低位 温度高位THTL配置保留保留保留8位CRC字节0 字节8第1,2字节保存温度数值,其中第1字节为低位,第2字节为高位。第3,4字节锁存器TH和TL保存非易失性温度报警数据,可通过软件写入用户报警上下限值。第5字节是配置寄存器,其内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分
24、辨率将温度转换为相应精度的数值。改字节各位的定义如下表所示: TM R1 R0 1 1 1 1 1该寄存器低5位都是1。TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时该位被设置为0(工作模式),用户不要去改动。R1和R0决定温度转换的精度位数,即是用来设置分辨率的,如下表所示(DS18B20出厂时被设置为12位)。 R1R0分辨率最大温度转换时间(ms)00993.750110187.501011275.001112750.00由表可知,设定的分辨率越高,所需的温度数据转换时间就越长。第68字节未用,全为逻辑1。第9字节读出的是前面所有8个字节的循环冗
25、余校验码(CRC),可用来保证通信正确。CRC存储在64位ROM的最高字节中。单片机根据ROM的前56位来计算CRC值,并和存入DS18B20的CRC值做比较,以判断收到的ROM数据是否正确。3.2.2 温度格式当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在内部存储器的第1,2字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据以0.0625/LSB形式表示。温度值格式如下表所示:位76543210低字节22222222高字节SSSSS222当符号位S=0时,直接将二进制位转换为十进制数;当S=1时,先将补码变换
26、为原码,在计算十进制值。部分温度值对应表如下表所示温度() 二进制数十六进制数+1250000 01111101 000007D0H+25.06250000 00011001 00010191H+0.50000 00000000 10000008H00000 00000000 00000000H-0.51111 11111111 1000FFF8H-25.06251111 11100110 1111FE6FH-551111 11001001 0000FC90H3.2.3 读写时间片 通过使用时间片(time slots)来读出和写入 DSl820 的数据,时间片用于处理数据位和指定进行何种操作
27、的命令字。1、写时间片(Write Tim slots)图3.6当主机把数据线从高逻辑电平拉至低逻辑电平时,产生写时间片。有两种类型的写时间片:写 1 时间片和写 0 时间片。 所有时间片必须有最短为 60 微秒的持续期,在各写周期之间必须有最短为 l 微秒的恢复时间。在 I0 线由高电平变为低电平之后,DSl820 在 15us 至 60us 的窗口之间对 IO 线采样。如果线为高电平,写 1 就发生。如果线为低电平,便发生写 0对于主机产生写 1 时间片的情况,数据线必须先被拉至逻辑低电平,然后就被释放,使数据线在写时间片开始之后的 15 微秒之内拉至高电平。对于主机产生写 0 时间片的情
28、况,数据线必须被拉至逻辑低电平且至少保持低电平 60us。图3.6 DS18B20的写时序2、读时间片当从 DSl820 读数据时,主机产生读时间片。当主机把数据线从逻辑高电平拉至低电平时,产生读时间片。数据线必须保持在低逻辑电平至少 l 微秒;来自 DSl820 的输出数据在读时间片下降沿之后 15 微秒有效。因此,为了读出从读时间片开始算起 15 微秒的状态主机必须停止把 I0 引脚驱动至低电平(见图 3.7)。在读时间片结束时,IO 引脚经过外部的上拉电阻拉回至高电平。所有读时间片的最短持续期限为 60 微秒,各个读时间片之间必须有最短为 l 微秒的恢复时间。图3.7 DS18B20的读
29、时序3.3 LED显示器3.3.1 数码管结构LED是当外加电压超过额定电压值时发生击穿而发出可见光。LED的工作电流通常为2,工作压降为左右,使用时需加限流电阻。LED发光器件一般常用的有两类:数码管和点阵。单片机应用系统通常使用七段数码管。七段数码管又称七字型数码管,分为七段,即a、b、c、d、e、f、g,外加小数点dp,由8个发光二极管构成,通称七段LED,如图3.8 图3.8 LED管脚图从内部电路上看,数码管又可分为共阴极接法和共阳极接法。通过对公共端(COM)接地或接高电平的控制,可使共阴极或共阳极数码管根据由ag引脚输入的代码来显示数字或符号。对数码管公共端的电位控制操作称为位选
30、。为了数码管显示数字或符号,要为LED显示器提供代码,这些代码是为显示器显示字型的,所以也称之为字型代码、段选码。七段数码管由8个发光二极管的亮暗来构成字型,所以对应于adp的字型代码正好是一个字节,其对应关系如下表:位代码D7D6D5D4D3D2D1D0显示段dpgfedcba应用中要将一个8位并行段选码送至LED显示器对应的引脚,送入的段选码不同,显示的数字或字符也不同。共阴极与共阳极的段选码互为反码。3.3.2 静态显示器单片机驱动LED数码管的方法有很多,按显示方法可分为静态显示和动态显示。本设计用到静态显示。静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通和恒定截至。这种显
31、示方式的各位数码管相互独立,公共端固定接地或接正电源。每个数码管的8个字段分别与8位I/O口输出的1位相连.I/O口只要有段码输出,相应的字符就显示出来,并保持不变,直到I/O口输出新的段码。这种显示方法的每一位都需要有一个8位输出口控制。在单片机系统中,如果并行口的I/O资源不够,而串行口又没有其他的作用,那么就可以用74LS164来扩展并行I/O口,节约单片机资源。静态显示就是显示驱动电路具有输出锁存功能,单片机将要显示的数据输出后就不在管理LED,直到下一次数据传送时传送一次新的显示数据。如果当前的数据没有变化单片机就不用管LED,有变化时才传送数据。静态显示的好处就是数据显示稳定,占用
32、CPU的时间很少。但是在静态显示中,每一个显示器都要占用单独的具有锁存功能的I/O口,该接口用于笔画信息的传送。这样单片机只要把显示的笔画信息发送到接口电路,数码管就可以显示发送的字符。要显示新的数据时,单片机再发送新的编码。4 软件部分4.1 流程图: 图4.1 温度控制主程序流程图图4.1给出了温度控制主程序流程图,图4.2给出了温度转换及读取子程序流程图,图4.3给出了显示温度子程序流程图,图4.4给出了计算温度子程序流程图,图4.5给出了比较温度程序流程图。 图4.2 温度转换及读取子程序流程图 图4.3显示温度子程序流程图 图4.4 计算温度子程序流程图 图4.5 比较温度程序流程图
33、4.2 源程序:;-主程序-TEMPER_L EQU 31H ;用于保存读出温度的低字节TEMPER_H EQU 30H ;用于保存读出温度的高字节T_DF EQU 33H ;FORMAT后的小数部分,半字节的 温度小数(存在低4位) T_INTEGER EQU 32H ;FORMAT后的整数部分,将两字节温度整合成1字节FLAG BIT 20H ;标志位DAT BIT P1.2 ;DS18B20数据线 ORG 0000H AJMP MAIN ORG 001BH ;定时中断入口地址 LJMP IP1 ORG 0040HMAIN: CLR EA ;使用DS18B20一定要禁止中断 MOV SP,
34、#60H MOV T_DF,#00H ;赋初始温度为20度 MOV T_INTEGER,#20H MOV 21H,28H ;赋标准温度为28度START: LCALL GET_TEMPER ;调用读温度子程序LCALL T_FORMAT ;将读出的两字节温度格式化,并转换为压缩BCD码 LCALL COMPARE ;与设定值比较,进行调节,执行外部电路 LCALL DISPLAY ;显示温度 AJMP START;-DS18B20的温度转换子程序 - GET_TEMPER:LCALL SET_18B20MOV A,#0CCH ;跳过ROM匹配LCALL WRITE_1820MOV A,#44H
35、 ; 发出温度转换命令LCALL WRITE_1820LCALL DISPLAY ;用显示温度(持续1s左右)来等 待 A/D 转换结束,12位的话要转 换750msLCALL SET_18B20 ;准备读温度前先初始化MOV A,#0CCH ;跳过ROM匹配LCALL WRITE_1820MOV A,#0BEH ;发出读温度命令LCALL WRITE_1820LCALL READ_1820RET;-DS18B20初始化程序 - SET_18B20:SETB DATNOP CLR DATMOV R2,#250 ;主机发出延时500s复位低脉冲DJNZ R2,$ SETB DAT ; 然后拉高数
36、据线MOV R2,#30DJNZ R2,$ ; 延时60s等待DS18B20回应JNB DAT,INIT1JMP SET_18B20 ;超时而没有响应,重新初始化INIT1: MOV R2,#120 DJNZ R2,$ ;延时240s JB DAT,INIT2 ;数据变高,初始化成功 JMP SET_18B20INIT2: MOV R2,#240 DJNZ R2,$ RET;-写DS18B20的子程序-WRITE_1820: MOV R2,#8 ;一共8位数据WR0: CLR DAT MOV R3,#6 DJNZ R3,$ RRC A MOV DAT,C MOV R3,#20 DJNZ R3,$ SETB DAT NOP NOP DJNZ R2,WR0 SETB DAT RET;-读DS18B20的程序,从DS18B20中读出两个字节的温度数据-READ_1820: MOV R4,#2 ;将温度高位和低位从DS18B20中读出 MOV R1,#TEMPER_L ;低位存入31H(TEMPER_L)RE0: MOV R2,#8RE1: SETB DAT NOP NOP CLR DAT NOP NOP SETB DAT MOV R3,#4 DJNZ R3,$ MOV C,DAT RRC A MOV R3,#30 DJNZ R3,$ DJNZ
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100