《2022年基于DS18B20的多点温度采集系统方案设计书.docx》由会员分享,可在线阅读,更多相关《2022年基于DS18B20的多点温度采集系统方案设计书.docx(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精品学习资源题 目:基于 DS18B20 的多点温度采集系统设计(LCD )系(部): 信息科学与电气工程学院实习地点:班 级:同学姓名:学号:指导老师:时间: 2021 年 月 日 到 2021 年 月 日山 东 交 通 学 院欢迎下载精品学习资源摘要单片机已在各行业得到广泛应用,为适应更多的应用领域,厂家实行了在一块单片机芯片上集成多种功能部件和大容量储备器的方法;因而,整个应用系统不需要扩展,而体积变小、牢靠性增高,使单片机成为真正意义上的单片机系统;本设计是基于 STC89C52 单片机和 DS185B20 实现温度的测量系统,单片机在本系统中作为温度输入和显示掌握器件, DS18B2
2、0 被用作温度数据的采集和温度输出器件;本系统采纳单总线操作,线路简洁,测量值精确,可实现多点测量,并对温度超过限制值,产生报警和数据采集;本系统被广泛应用于温 度掌握、温度检测、温度采、消防等系统中;关键词 单片机;数据转换;温度显示;欢迎下载精品学习资源目录一.课程设计总体说明11.1 目的11.2 基本功能11.3 扩展功能11.4 课题所达到的功能目标11.5 单片机的挑选1二.硬件系统说明21 硬件总体设计方案21.1 硬件设计目标21.2 硬件功能模块划分21.3 主控芯片和关键元器件的选型、接口和引脚介绍22. 软件设计62.1 流程图6三.软件调试说明71.软件性能测试7四课题
3、开发总结10五用户操作说明11六.参考资料11附录:程序12欢迎下载精品学习资源一、课题总体设计说明1.1 、目的( 1)本试验要实现的是通过DS18B20 温度传感器采集温度并在LCD 上显示 , 并学会使用单片机掌握DS18B20 此类单总线器件,并对数字温度传感器DS18B0 进行时序分析;(2) 更进一步明白 LCD1602 的应用;(3) 把握单片机与 PC 的远程通信;1.2 、基本功能( 1)以数字传感器DS1820 作为前端采集温度,经过单片机处理后,将外部的温度显示在液晶屏上;( 2)可用通过独立式按键来设定温度的上限值和下限值,当坏境温度超过上限值或低于下限值时会自动提示,
4、并在液晶屏上提示温度大于上限值或温度小于下限值;( 3 )当单片机检测到DS18B20 存在时会在在LCD1602上显示 “ DS18B20Succes ”,反之就显示 “ DS18B20 is Wrong, TEMP is No on ”;1.3 、扩展功能以数字传感器DS1820 作为前端采集温度,经过单片机处理后,再通过串口通信,把实时温度值、上限值和下限值显示在用VB 语言编辑的运算机软件的界面上并显示出实时温度的变化曲线,当实时温度超过所设定的上限值和下限值时会在用VB 语言编辑的运算机软件的界面上提示当前温度超过上限值或下限值,模拟实现设备与运算机的通信,通过运算机对设备的温度检测
5、以及实时监控;1.4 、课题所达到的功能目标( 1)能在 LCD1602 上精确的显示出实时温度;( 2)独立式按键能设置报警温度的上限值、下限值和查看所设定的上限值、下限值;( 3)当温度大于上限值或低于下限值时在液晶屏上自动提示;( 4)通过串口和 PC 机连接,能够把实时温度值、上限值和下限值显示在用VB 语言编辑的运算机软件的界面上并显示出实时温度的变化曲线,当实时温度超过所设定的上限值和下限值时会在用VB 语言编辑的运算机软件的界面上提示当前温度超过上限值或下限值;1.5 、单片机的挑选本系统采纳了 51 单片机,其体积小巧,携带便利,价格廉价;且USB 接口通讯及供电,通讯速度快,
6、 无须外接电源; 51 单片机有一个全双工的串通信口,特别适合与电脑进行通信;二、硬件设计说明1、 硬件总体设计方案1.1 、硬件设计目标本系统中通过温度传感器DS18B20 的数据线 DQ 与主控芯片 51 单片机的 P3.3 相连接, DS18B20 将采集欢迎下载精品学习资源到的数据送给单片机,经过单片机出来后,显示在8 位数据线与单片机 P0 口的液晶 LCD 上;,当坏境温度超过上限值或低于下限值时会自动提示,并在液晶屏上提示温度大于上限值或温度小于下限值;4 个按键 K1K4 接到单片机的 P1.0P1.4,来实现对上限值和下限值的查看与设定;串口经过MAX232 的电平转换后 R
7、1 OUT 和 T1 IN 接到单片机的 RXD 与 TXD 来实现与用VB 语言编辑的运算机软件的界面间的通信;液晶 LCD 的 RS、 R/W、E 分别接到单片机的P2.0P2.2 来实现单片机掌握液晶的读写命令和数据的掌握;1.2 、硬件功能模块划分温度检测模块显示模块主控芯片掌握模块通信模块(1) AT89S51:实现对整个系统的掌握;(2) DS18B20 、LCD1602 :温度传感器 DS18B20 的数据线 DQ 与主控芯片 51 单片机的 P3.3 相连接,DS18B20 将采集到的数据送给单片机,经过单片机处理后,显示在8 位数据线与单片机 P0 口的液晶 LCD上;(3)
8、 按键输入:对报警温度上限值TH 和下限值 TL 的设置;(4) 串口通信:实现与与用VB 语言编辑的运算机软件的界面间的通信;1.3 、主控芯片和关键元器件的选型、接口和连接方式定义1.3.1、主控芯片和关键元器件的选型(1) 主控芯片: AT89S51(2) 温度采集: DS18B20(3) 按键:独立式按键( K1K4 )(4) 显示: LCD1602(5) 串口:通过 MAX232 与单片机的 10 脚 11 脚相连1.3.1.1 、AT89S51 引脚结构 ,见图 1-1欢迎下载精品学习资源图 1-1 单片机封装及引脚结构引脚功能说明: VCC:供电电压;GND :接地;P0 口:
9、P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸取 8TTL 门电流;当P0 口的管脚第一次写1 时,被定义为高阻输入;P0 能够用于外部程序数据储备器,它可以被定义为数据/地址的低八位;在FIASH 编程时, P0 口作为原码输入口,当FIASH 进行校验时, P0 输出原码,此时 P0 外部必需接上拉电阻;P1 口: P1 口是一个内部供应上拉电阻的8 位双向 I/O 口, P1 口缓冲器能接收输出4TTL 门电流; P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平常,将输出电流,这是由于内部上拉的缘故;在FLASH 编程和校验时, P1 口作为低八
10、位地址接收;P2 口: P2 口为一个内部上拉电阻的8 位双向 I/O 口, P2 口缓冲器可接收,输出4 个 TTL 门电流,当P2 口被写 “1”时,其管脚被内部上拉电阻拉高,且作为输入;并因此作为输入时,P2 口的管脚被外部拉低, 将输出电流;这是由于内部上拉的缘故;P2 口当用于外部程序储备器或16 位地址外部数据储备器进行存取时, P2 口输出地址的高八位;在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据储备器进行读写时, P2 口输出其特别功能寄存器的内容;P2 口在 FLASH 编程和校验时接收高八位地址信号和掌握信号;P3 口: P3 口管脚是 8 个带内部上拉电阻
11、的双向I/O 口,可接收输出 4 个 TTL 门电流;当 P3 口写入 “ 1” 后,它们被内部上拉为高电平,并用作输入;作为输入,由于外部下拉为低电平,P3 口将输出电流(ILL )这是由于上拉的缘故;P3 口也可作为 AT89C51 的一些特别功能口,如下表所示:口管脚 备选功能P3.0 RXD (串行输入口) P3.1 TXD (串行输出口) P3.2 /INT0 (外部中断 0) P3.3 /INT1 (外部中断 1) P3.4 T0(记时器 0 外部输入) P3.5 T1(记时器 1 外部输入)P3.6 /WR(外部数据储备器写选通)P3.7 /RD(外部数据储备器读选通)欢迎下载精
12、品学习资源P3 口同时为闪耀编程和编程校验接收一些掌握信号;RST:复位输入;当振荡器复位器件时,要保持RST 脚两个机器周期的高电平常间;ALE/PROG :当拜访外部储备器时,地址锁存答应的输出电平用于锁存地址的低位字节;在FLASH编程期间,此引脚用于输入编程脉冲;在平常,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的 1/6;因此它可用作对外部输出的脉冲或用于定时目的;然而要留意的是:每当用作外部数据储备器时,将跳过一个ALE 脉冲;如想禁止ALE的输出可在 SFR8EH 地址上置 0;此时, ALE只有在执行MOVX ,MOVC 指令是 ALE 才起作用;另外,该引脚
13、被略微拉高;假如微处理器在外部执行状态ALE 禁止,置位无效;/PSEN:外部程序储备器的选通信号;在由外部程序储备器取指期间,每个机器周期两次/PSEN 有效;但在拜访外部数据储备器时,这两次有效的/PSEN 信号将不显现;/EA/VPP :当/EA 保持低电平常,就在此期间外部程序储备器(0000H-FFFFH ),不管是否有内部程序储备器;留意加密方式1 时, /EA 将内部锁定为 RESET;当 /EA 端保持高电平常,此间内部程序储备器;在FLASH 编程期间,此引脚也用于施加12V 编程电源( VPP );XTAL1 :反向振荡放大器的输入及内部时钟工作电路的输入;XTAL2 :来
14、自反向振荡器的输出;1.3.1.2 、 DS18B20 数字温度传感器介绍功能介绍DALLAS最新单线数字温度传感器DS18B20 的“一线器件 ”体积更小、适用电压更宽、更经济Dallas 半导体公司的数字化温度传感器DS1820 是世界上第一片支持“一线总线 ”接口的温度传感器;一线总线特殊而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念;DS18B20 、DS1822 “一线总线 ”字化温度传感器 同 DS1820 一样, DS18B20 也 支持 “一线总线 ”接口,测量温度范畴为-55 C+125C, -10+85 C 范畴内 ,精度为 0.5 C;DS18
15、22 的精度较差为 2C ;现场温度直接以 “一线总线”的数字方式传输,大大提高了系统的抗干扰性;适合于恶劣环境的现场温度测量,如:境掌握、设备或过程掌握、测温类消费电子产品等;与前一代产品不同,新的产品支持3V5.5V 的电压范畴,使系统设计更敏捷、便利;而且新一代产品更廉价,体积更小 ;DS18B20 、 DS1822 的 特 性DS18B20 可以程序设定912 位的辨论率,精度为0.5 C;可选更小的方式,更宽的电压适用范畴;辨论率设定,及用户设定的报警温度存储在 EEPROM 中,掉电依旧储存;DS18B20 的性能是新一代产品中最好的!性能价格比也特别杰出! DS1822DS18B
16、20 软件兼容,是 DS18B20 的简化版本;省略了储备用户定 义 报 警 温 度 、 分 辨 率 参 数 的EEPROM ,精度降低为 2C ,适用于对性能要求不高,成本掌握严格的应用,是经济型 产品; 继“一线总线 ”的早期产品后, DS1820 开创了温度传感器技术的新概念;DS18B20和 DS1822 使电压、特性及封装有更多的挑选,让我们可以构建适合自己的经济的测温系 统; DS18B20 的内部结构 DS18B20 内部结构主要由四部分组成: 64 位光刻 ROM 、温度传感器、非挥发的温度报警触发器TH 和 TL 、配置寄存器; DS18B20 的管脚排列如下 :DQ 为数字
17、信号输入 /输出端; GND 为电源地; VDD为外接供电电源输入端(在寄生电源 接线方式时接地);光刻ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该DS18B20 的地址序列码; 64 位光刻 ROM 的排列是:开头 8 位( 28H)是产品类型标号,接着的48 位是该 DS18B20 自身的序列号,最终 8 位是前面 56 位的循环冗余校验码( CRC=X8+X5+X4+1 );光刻 ROM 的作用是使每一个 DS18B20 都各不相同,这样就可以实现一根总线上挂接多个DS18B20 的目的; DS18B20 中的温度传感器可 完成 对温 度的 测量 ,以 12 位转化 为
18、例: 用 16 位符 号扩 展的二 进 制 补码 读数形 式供应 , 以0.0625/LSB 形式表达,其中 S 为符号位,见表 2-1 ;表 2-1DS18B20 内部温度表示形式欢迎下载精品学习资源例如 +125的数字输出为07D0H , +25.0625的数字输出为FF6FH,-55的数字输出为 FC90H;见表 2-2表 2-2DS18B20 转化温度形式实际温度值数字输出(二进制)0191H , -25.0625的数字输出为数字输出(十六进制)+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 000
19、1 1001 00010191H+10.125 0000 0000 1010 001000A2H+0.5 0000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.0625 1111 1110 0110 1111FE6EH-55 1111 1100 1001 0000FC90H欢迎下载精品学习资源这是 12 位转化后得到的 12 位数据,储备在 18B20 的两个 8 比特的 RAM 中,二进制中的前面5 位是符号位,假如测得的温
20、度大于0,这 5 位为 0,只要将测到的数值乘于0.0625 即可得到实际温度;假如温度小于 0,这 5 位为 1,测到的数值需要取反加1 再乘于 0.0625 即可得到实际温度;1.3.2、接口和连接方式定义1 液晶 LCD1602 的数据和指令挑选掌握端RS 接到单片机的 P2.0,读写掌握R / W接到单片节的 P2.1,欢迎下载精品学习资源数据读写掌握位E 接到单片机的P2.2, 8 位数据线 DB0DB7 接到单片机的P0 口;24 个按键 K1K4 分别接到单片机的 P1.0P1.3;3 DS18B20 的 DQ 接到单片机的 P3.3.2、软件设计(1) 流程图欢迎下载精品学习资
21、源三、软件调试说明1、软件性能测试(1)软件性能测试时用Proteus 将画好的仿真图调人用Keil 编译后的Temp.hex 文件,开头仿真,测试每个按键的功能是否以及实时温度和上下限报警是否与预期方案的一样;(2) ) 软件性能测试结果如下图:欢迎下载精品学习资源欢迎下载精品学习资源欢迎下载精品学习资源四、课题开发总结1、总结整个课题的任务完成情形,是否与预期规划的相符合,设计出来的作品性能如何、优缺点本系统完成的与预期方案相吻合,预期全部功能基本实现,作品性能好,突出的优点是本作品的硬件电路做的相当美观,且电路相当稳固,不仅实现了LCD 的显示同样也很好的在VB6.0 人机界面上绘制欢迎
22、下载精品学习资源出温度变化曲线,依据我们设定的上限提示温度和下线提示温度,判定当前温度有无高温提示或低温提示,假如温度超限,就给出相应的提示信息;并达到了远程功能;2、硬件宏观上的设计要点,达到的性能指标,存在的问题硬件的设计要点,达到的性能指标与方案预期的一样,没有存在什么问题,可以说此硬件做的相当完善;3、软件宏观上的设计要点,达到的性能指标、开发编译工具和方法、存在的问题( 1)软件设计要点,达到的性能指标几乎达到方案预期的,在设计这个系统的过程仍学会了串口调试工具;( 2)整个电路的设计仿真过程中除了运用了单片机相关软件外仍利用了以下软件Multisim8 :用于电路的设计与仿真串口调
23、试助手与模拟串口:用于串口的调试与仿真VB6.0 :用于数据的显示与显示温度变化的曲线Protel:电路板的设计五、用户操作说明第一步:将电路板上的串口与电脑的串口相连接;其次步:将电路板接上 +5V 的电源(此时电源指示灯会点亮,会在LCD1602上显示实时温度,如图1所示);第三步:在 VB 界面上点击打开串口(此时会在VB 界面上显示实时温度,上限温度,下限温度和实时温度变化的曲线,如图2 所示);附:本系统有四个掌握按键功能如下K1: 用于查看上下限温度与温度加减切换K2 :用于上限温度的调剂K3 :用于下限温度的调剂,并兼查看上下限温度时的返回K4 :设定好上限温度与下限温度时的确定
24、键如,当要调上限温度时:第一按下K2 ,再按 K2 时上限温度就加1,假如要减1 就按下切换按键K1,再按 K2 即变为减;六、参考资料单片机原理及应用教程范立南2006 年 1 月单 片 机 原 理 及 应 用 教 程刘 瑞 新2003年07月欢迎下载精品学习资源附:程序:TEMP_ZHEQU 24H;实测温度值存放单元TEMPLEQU 25H TEMPHEQU 26HTEMP_THEQU 27H;高温报警值存放单元TEMP_TLEQU 28H;低温报警值存放单元TEMPHCEQU 29H;正、负温度值标记TEMPLCEQU 2AHTEMPFCEQU 2BHK1EQU P1.4;查询按键K2
25、EQU P1.5;设置 /调整键K3EQU P1.6;调整键K4EQU P1.7;确定键BEEPEQU P3.7RELAYEQU P1.3;指示灯LCD_XEQU 2FH;LCD 字符显示位置LCD_RSEQU P2.0;LCD 寄存器挑选信号LCD_RWEQU P2.1;LCD 读写信号LCD_ENEQU P2.2;LCD 答应信号FLAG1EQU 20H.0;DS18B20 是否存在标志KEY_UDEQU 20H.1;设定按键的增、减标志DQEQU P3.3;DS18B20 数据信号ORG 0000H LJMP MAINORG0030HMAIN:MOV SP,#60H MOV A,#00H
26、MOV R0,#20H;将 20H2FH 单元清零MOV R1,#10H CLEAR:MOV R0,AINC R0DJNZ R1,CLEAR LCALL SET_LCD LCALL RE_18B20START: LCALL RST;调用 18B20 复位子程序JNB FLAG1,START1;DS1820 不存在LCALL MENU_OK;DS1820 存在,调用显示正确信息子程序MOV TEMP_TH,#055H;设置 TH 初值 85 度MOV TEMP_TL,#019H;设置 TL 初值 25 度LCALL RE_18B20A;调用暂存器操作子程序LCALL WRITE_E2;写入 DS
27、18B20LCALL TEMP_BJ;显示温度标记JMPSTART2START1:LCALL MENU_ERROR;调用显示出错信息子程序LCALL TEMP_BJ;显示温度标记SJMP $START2:LCALL RST;调用 DS18B20 复位子程序JNB FLAG1,START1;DS18B20 不存在MOVA,#0CCH;跳过 ROM 匹配命令LCALL WRITEMOVA,#44H;温度转换命令LCALL WRITE LCALL RSTMOVA,#0CCH;跳过 ROM 匹配LCALL WRITEMOVA,#0BEH;读温度命令LCALL WRITELCALL READ;调用 DS
28、18B20 数据读取操作子程序LCALL CONVTEMP;调用温度数据 BCD 码处理子程序LCALL DISPBCD;调用温度数据显示子程序LCALL CONV;调用 LCD 显示处理子程序LCALL TEMP_COMP;调用实测温度值与设定温度值比较子程序LCALL PROC_KEY;调用键扫描子程序欢迎下载精品学习资源SJMP START2;循环;*键扫描子程序 * PROC_KEY:JB K1,PROC_K1LCALL BEEP_BL JNB K1,$MOV DPTR,#M_ALAX1 MOV A,#1LCALL LCD_PRINT LCALL LOOK_ALARM JB K3,$L
29、CALL BEEP_BL JMP PROC_K2PROC_K1: JB K2,PROC_ENDLCALL BEEP_BL JNB K2,$MOVDPTR,#RST_A1 MOVA,#1LCALL LCD_PRINT LCALL SET_ALARMLCALL RE_18B20;将设定的 TH,TL 值写入 DS18B20 LCALL WRITE_E2PROC_K2: LCALL MENU_OK LCALL TEMP_BJPROC_END:RET;*设定温度报警值 TH、TL * SET_ALARM:LCALL LOOK_ALARMAS0:JBK1,AS00 LCALL BEEP_BL JNB K
30、1,$CPL 20H.1;UP/DOWN 标记AS00:JB 20H.1,ASZ01;20H.1=1,增加JMP ASJ01;20H.1=0 ,减小ASZ01:JB K2,ASZ02;TH 值调整 增加 LCALL BEEP_BLINC TEMP_TH MOV A,TEMP_THCJNE A,#120,ASZ011 MOV TEMP_TH,#0ASZ011: LCALL LOOK_ALARM MOV R5,#10LCALL DELAY JMP ASZ01ASZ02:JB K3,ASZ03;TL 值调整 增加 LCALL BEEP_BLINC TEMP_TL MOV A,TEMP_TLCJNE
31、A,#99,ASZ021 MOV TEMP_TL,#00HASZ021: LCALL LOOK_ALARM MOV R5,#10LCALL DELAY JMP ASZ02ASZ03:JB K4,AS0;确定调整LCALL BEEP_BL JNB K4,$RETASJ01:JB K2,ASJ02;TH 值调整(削减)LCALL BEEP_BL DECTEMP_TH MOV A,TEMP_THCJNE A,#0FFH,ASJ011 JMP ASJ022欢迎下载精品学习资源ASJ011: LCALL LOOK_ALARM MOV R5,#10LCALL DELAYJMP AS0ASJ02:JB K3
32、,ASJ03;TL 值调整(削减)LCALL BEEP_BL DEC TEMP_TL MOV A,TEMP_TLCJNE A,#0FFH,ASJ021JMP ASJ022ASJ021: LCALL LOOK_ALARM;MOV R5,#10 LCALL DELAY JMP AS0ASJ022: CPL 20H.1 JMP ASZ01ASJ03:JMP ASZ03 RETRST_A1: DB SET ALERT CODE ,0;*实测温度值与设定温度值比较子程序* TEMP_COMP:MOVA,TEMP_THSUBBA,TEMP_ZH;减数 被减数,就JCCHULI1;借位标志位 C=1,转MO
33、VA,TEMPFCCJNEA,#0BH,COMP SJMPCHULI2COMP:MOV A,TEMP_ZHSUBB A,TEMP_TL;减数 被减数,就JC CHULI2;借位标志位 C=1,转MOV DPTR,#BJ5LCALL TEMP_BJ3 CLRRELAYRETCHULI1: MOV DPTR,#BJ3 LCALL TEMP_BJ3 SETB RELAYLCALL BEEP_BL RETCHULI2: MOV DPTR,#BJ4 LCALL TEMP_BJ3 SETB RELAYLCALL BEEP_BLRET;TEMP_BJ3: MOV A,#0CEH LCALL WCOMMOV
34、R1,#0 MOV R0,#2BBJJ3:MOV A,R1 MOVC A,A+DPTR LCALL WDATA INC R1DJNZ R0,BBJJ3 RETBJ3:DB HBJ4:DB LBJ5:DB .;*显示温度标记子程序* TEMP_BJ: MOV A,#0CBHLCALL WCOMMOV DPTR,#BJ1;指针指到显示消息欢迎下载精品学习资源MOV R1,#0 MOV R0,#2BBJJ1:MOV A,R1MOVC A,A+DPTR LCALL WDATA INC R1DJNZ R0,BBJJ1 RETBJ1:DB 00H,C;*显示正确信息子程序* MENU_OK: MOV DP
35、TR,#M_OK1;指针指到显示消息MOV A,#1;显示在第一行LCALL LCD_PRINTMOV DPTR,#M_OK2;指针指到显示消息MOV A,#2;显示在第一行LCALL LCD_PRINT RETM_OK1:DBDS18B20 OK,0M_OK2:DB TEMP:,0;*显示出错信息子程序* MENU_ERROR:MOV DPTR,#M_ERROR1;指针指到显示消息MOV A,#1;显示在第一行LCALL LCD_PRINTMOV DPTR,#M_ERROR2;指针指到显示消息1 MOV A,#2;显示在第一行LCALL LCD_PRINT RETM_ERROR1: DB D
36、S18B20 ERROR ,0 M_ERROR2: DB TEMP,0;*DS18B20复位子程序 * RST:SETB DQNOPCLR DQMOV R0,#6BH;主机发出延时复位低脉冲MOV R1,#04H TSR1:DJNZ R0,$ MOV R0,#6BHDJNZ R1,TSR1SETB DQ;拉高数据线NOP NOP NOPMOV R0,#32HTSR2: JNB DQ,TSR3;等待 DS18B20 回应DJNZ R0,TSR2JMP TSR4; 延时TSR3:SETB FLAG1; 置 1 标志位 ,表示 DS1820 存在JMP TSR5TSR4:CLR FLAG1; 清 0
37、 标志位 ,表示 DS1820 不存在JMP TSR7TSR5:MOV R0,#06BHTSR6:DJNZ R0,$; 时序要求延时一段时间TSR7:SETB DQ RET;* DS18B20暂存器操作子程序 * RE_18B20:JB FLAG1,RE_18B20ARET RE_18B20A: LCALL RST欢迎下载精品学习资源MOV A,#0CCH;跳过 ROM 匹配LCALL WRITE WR_SCRAPD:MOV A,#4EH;写暂器LCALL WRITEMOV A,TEMP_TH;TH 报警上限) LCALL WRITEMOV A,TEMP_TL;TL 报警下限)LCALL WR
38、ITEMOV A,#7FH;12 位精度LCALL WRITERET;*复制暂存器子程序 * WRITE_E2:LCALL RSTMOV A,#0CCH;跳过 ROM 匹配LCALL WRITEMOV A,#48H;把暂存器里的温度报警值拷贝到EEROM LCALL WRITERET;*重读 EEROM 子程序 * READ_E2:LCALL RSTMOV A,#0CCH;跳过 ROM 匹配LCALL WRITEMOV A,#0B8H;把 EEROM 里的温度报警值拷贝回暂存器LCALL WRITE RET;*将自定义字符写入 LCD 的 CGRAM 中 * STORE_DATA:MOV A,
39、#40H LCALL WCOM MOV R2,#08HMOV DPTR,#D_DA TA MOV R3,#00HS_DATA: MOV A,R3MOVC A,A+DPTRLCALL WDATA;写入数据INC R3DJNZ R2,S_DA TA RETD_DATA: DB 0CH,12H,12H,0CH,00H,00H,00H,00H;* DS18B20数据写入操作子程序* WRITE: MOV R2,#8;一共 8 位数据CLR CWR1:CLR DQ;开头写入 DS18B20 总线要处于复位(低)状态MOV R3,#07DJNZ R3,$;总线复位保持16 微妙以上RRC A;把一个字节
40、DATA 分成 8 个 BIT 环移给 C MOV DQ,C;写入一位MOV R3,#3CHDJNZ R3,$;等待 100 微妙SETB DQ;重新释放总线NOPDJNZ R2,WR1;写入下一位SETB DQ RET;* DS18B20数据读取操作子程序* READ:MOV R4,#4;将温度低位、高位、 TH、TL 从 DS18B20 中读出MOV R1,#TEMPL;存入 25H 、26H 、27H、28H 单元RE00:MOV R2,#8欢迎下载精品学习资源RE01:CLR CYSETB DQ NOP NOPCLR DQ;读前总线保持为低NOP NOP NOPSETB DQ;开头读总
41、线释放MOV R3,#09;延时 18 微妙DJNZ R3,$MOV C,DQ;从 DS18B20 总线读得一位MOV R3,#3CHDJNZ R3,$;等待 100 微妙RRC A;把读得的位值环移给ADJNZ R2,RE01;读下一位MOV R1,A INC R1DJNZ R4,RE00RET;*温度值 BCD 码处理子程序 * CONVTEMP:MOV A,TEMPH;判温度是否零下ANL A,#08HJZ TEMPC1;温度零上转CLR CMOV A,TEMPL;二进制数求补(双字节)CPL A;取反加 1 ADD A,#01HMOV TEMPL,A MOV A,TEMPH CPL AADDC A,#00HMOV TEMPH,AMOVTEMPHC,#0BH;负温度标志MOVTEMPFC,#0BHSJMP TEMPC11TEMPC1:MOV TEMPHC,#0AH;正温度标志MOVTEMPFC,#0AH TEMPC11:MOV A,TEMPHCSWAP AMOV TEMPHC,A MOV A,TEMPLANL A,#0FH;乘 0.0625 MOV DPTR,#TEMPDOTTABMOVC A,A+DPTRMOV TEMPLC,A;TEMP