DS18B20实现测温功能

上传人:博****1 文档编号:507563887 上传时间:2023-08-13 格式:DOCX 页数:14 大小:155.71KB
返回 下载 相关 举报
DS18B20实现测温功能_第1页
第1页 / 共14页
DS18B20实现测温功能_第2页
第2页 / 共14页
DS18B20实现测温功能_第3页
第3页 / 共14页
DS18B20实现测温功能_第4页
第4页 / 共14页
DS18B20实现测温功能_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《DS18B20实现测温功能》由会员分享,可在线阅读,更多相关《DS18B20实现测温功能(14页珍藏版)》请在金锄头文库上搜索。

1、题目:室内温度检测系统一 实验要求:1. 用温度传感器DS18B20实现能检测室内环境温度(-10oC40。,要求用2位或多位LED 显示;2. 要求能有报警功能,当温度超过报警上限时要能报警,报警上限要能通过键盘设定;3. 自己制作电路板。 (可考虑留有上传温度数据的接口)二 设计思想和说明:室内温度检测系统是由 AT89C51 单片机和温度传感器 DS18B20 和实现对温度检测。由 DS18B20 将测得的温度通过 DQ 端传给单片机,再通过单片机在 LED 上显示,完成测温功三器件清单器件名称数量AT89C51 单片机1温度传感器 DS18B2014 位 LED 数码显示器1晶振 11

2、.0592 Mhz174LS2451蜂鸣器1三极管 2N39045按钮533 pf 电容210 uf 电容14.7k 电阻710k 电阻50.1k 电阻11 k 电阻45V 电源1四硬件原理图0打R45 卜10k丿2A0B0A1B1A2B2A3B3A4B4A5B5A6B6A7B7CEPO.O/ADtP0.1/AD-PO.2/AD2P0.3/AD:P0.4/AD4PO.5/AD5PO.6/AD6PO.7/AD7P2.O/A8P2.1/A9P2.2/A1tP2.3/A1- P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15P3.2/INT(P3.3/INTP3.4/T0P3.5

3、/T1 :3 6/WRP3.7/RD室内温度检测系统硬件原理图五硬件原理图与其软件配合介绍DS18B20的DQ端与单片机的P2.0 口相连,进行数据传送。DS1882O内部结构主要由 4部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄 存器。根据 DSl8820 的通信协议,主机控制 DSl8820 完成温度转换必须经过 3 个步骤:每 一次读写之前都要对其进行复位,复位成功后发送 1 条 ROM 指令,最后发送 RAM 指令, 这样才能对DS18820进行预定的操作。复位要求主CPU将数据线下拉500戶,然后释放, DS18820收到信号后等待166oys左右

4、,后发出6o240/的存在低脉冲,主CPU收到 此信号表示复位成功。由于 DSl8820 采用的是单线进行控制与读取数据,因此对操作的时 序要求非常严格,否则由于时序不匹配,将无法完成对器件的正确操作。P0 口与 4位 LED 显示的“字型码”端相连, P1 口的低四位与 4位 LED 显示的“位” 选择相连,实现将从 DS18B20 中读取的数据显示出来。 P1 口的高四位,分别接四个按钮,实现对温度的设置。P1.4接“温度设置”按钮,P1.5接“开始测温”按钮,P1.6接“增加 温度”按钮, P1.7 接“减小温度”按钮。 P3.4 口接警铃,当温度高于设定温度时,可实现 报警功能。每次用

5、P1 口读入数据时,都要先置1,而后读入数据,如:SETB P1.4相关代码如下:SET_TEMPERLCALL INIT_18B20LCALL GET_TEMPERLCALL CHANGE16LCALL DISPLAYMOV DPTR,#NUMTABMOVC A,A+DPTR六程序流程图;设置温度上限;对 DS18B20 初始化;获取温度数据;将得到的 16 进制温度值转换为 10 进制数;采用查表法显示温度度上限Q始测温?否修改温是否要是否开Q设温度上限初值设置温度上限开始测温结束;将得到的温度显示出来温度上限 初值设置开始初始化DS18B20向 DS18B20 送 OCCH, 命令跳过R

6、OM区向DS18B20送温度转 换命令44H,等750ms 复位读取温度值送TEMPER_H和TEMPER_L两单元中结束读温度初始化 DS18B20取 TEMPER_L 和 TEMPER_H 两 单元中的数据,将 TEMPER_H 的低半字节和TEMPER_L的高 半字节整合再一起,获得温度值 的整数部分将16进制温度值转换为十进 制数结束写 DS18B20获得温度整数部分结果送显示MOV66H,#26CLRCMOVP3.4,CMOVR3,#0F0HWAIT1:MOV60H,66HLCALLCHANGE16LCALLDISPLAYDJNZR3,WAIT1CLRP1.4CLRP1.5MOV S

7、P,#80HWAIT4:七源程序清单部分内存分配声明TEMPER_LEQU31H;用于保存读出温度的低字节TEMPER_HEQU30H;用于保存读出温度的高字节DATBITP2.2; DS18B20 数据线设置上限温度ORG 0000H;66H 为温度初值存储地址(温度上限);欲设温度上限为 26 度;关闭蜂鸣器;延时;初始温度 送显示,60H为16进制数暂存地址CLRCSETB P1.4SETB P1.5NOPJNB P1.4,SET_TEMPER ;判断是否需要设置温度JNB P1.5,STARTAJMP WAIT4设置温度子程序SET_TEMPER:CLRP1.6CLRP1.7CLRP1

8、.5NOPNOPSETBP1.6SETBP1.7SETBP1.5NOPSET_1:JNBP1.6,UP1;温度值加 1JNBP1.7,DOWN1;温度值减 1JNBP1.5,START;开始测温AJMP SET_1 加 温度子程序UP1:MOVA,66HADDCA,#01HMOV66H,AMOVR3,#0FFHWAIT2:MOV60H,66HLCALLCHANGE16_0LCALLDISPLAYDJNZR3,WAIT2LJMPSET_TEMPER9 减 温度子程序DOWN1:MOV A,66HSUBB A,#01HMOV 66H,AMOV R3,#0FFHWAIT3:MOV 60H,66HLC

9、ALL CHANGE16_0LCALL DISPLAYDJNZLJMPR3,WAIT3SET_TEMPER9START:主函数开始-LCALLGET_TEMPER;调用读温度子程序LCALLCHANGE16;将读出的 2 字节温度整合,并转换为压缩 BCD 码LCALLDISPLAY;显示温度LJMPSTART;DS18B20 的温度转换子程序GET_TEMPER:LCALLINIT_18B20TSS:MOVA,#0CCH;跳过 ROM 匹配LCALLWRITE_18B20MOVA,#44H;发出温度转换命令LCALLWRITE_18B20LCALLDISPLAY;用显示温度(持续 1s 左右

10、)来等待 AD 转换结束;12 位的话要转换 750msLCALLINIT_18B20;准备读温度前先初始化MOVA,#0CCH;跳过 ROM 匹配LCALLWRITE_18B20MOVA,#0BEH;发出读温度命令LCALL WRITE_18B20LCALL READ_18B20RETDS18B20 初始化程序INIT_18B20:SETBDATNOPCLRDATMOVR2,#250;主机发出延时 500 微秒的复位低脉冲DJNZR2,$SETBDAT;然后拉高数据线MOVR2,#30DJNZR2,$;延时 240usJNBDAT,INIT1;数据变高,初始化成功LJMPINIT_18B20

11、INIT1:MOVR2,#120DJNZR2,$JBDAT,INIT2LJMP INIT_18B20INIT2:MOV R2,#240DJNZ R2,$RET;写 DS18B20 的子程序(有具体的时序要求)WRITE_18B20: MOV R2,#8 ;一共 8 位数据CLR CWR0:CLR DATMOV R3,#5DJNZ R3,$RRC AMOV DAT,CMOV R3,#21DJNZ R3,$SETB DATNOPDJNZ R2,WR0SETB DATRET; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据READ_18B20:MOVR4,#2;将温度高位和低位从

12、DS18B20 中读出MOVR1,#TEMPER_L;低位存入 31H(TEMPER_L)RE0:MOV R2,#8RE1:CLR CSETB DATNOPNOPCLR DATNOPNOPSETB DATMOV R3,#4DJNZ R3,$MOV C,DATRRC AMOV R3,#30DJNZ DJNZ MOV DECDJNZ RETR3,$R2,RE1R1,AR1 ;高位存入 30H(TEMPER_H)R4,RE0;整合读出的两字节温度(关于DS18B20读出的2字节温度格式请参考资料)CHANGE16:CLRCMOVP3.4,CMOVR0,#65HMOVA,TEMPER_LSWAPAMOVR0,AMOVA,TEMPER_HSWAPAXCHDA,R0MOV60H,A;获得整数部分(1 字节)MOVA,66HCLRCSUBBA,60H;判断实际温度是否高于温度上限JNB ACC.7,CHANGE16_0SETB CMOV P3.4,C; 将得到的 16 进制温度转化为 10 进制数CHANGE16_0:MOVA,60HJBACC.7,FUSHU;判断是否为负数MOV64H,#00HMOVB,#100;将 16 进制数转换为 10 进制数DIV

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号