摘要:温度是工业生产和自动控制中最常见的工艺参数之一。过去温度检测系统设计中,大多采用模拟技术进行设计,这样就不可避免地遇到诸如传感器外围电路复杂及抗干扰能力差等问题;而其中任何一环节处理不当,就会造成整个系统性能的下降。随着半导体技术的高速发展,特别是大规模集成电路设计技术的发展, 数字化、微型化、集成化成为了传感器发展的主要方向。本文介绍了检测的基本概念,单总线数字温度传感器DS18B20及单片机AT89C2051的特性、内部结构及工作原理,给出了DS18B20与单片机AT89C2051接口的应用实例,以及由两者组成温度检测系统的方法,并给出了对DS18B20进行各种操作的软件流程图及操作程序。
关键词:温度检测 ;单总线温度传感器DS18B20;单片机AT89C2051 ;汇编语言
The Temperature Detection System Design based one wire
bus temperature sensor
Abstract: Temperature is the most common one of process parameters in automatic control and industrial production. In the traditional temperature measurement system design, often using simulation technology to design, and this will inevitably encounter error compensation, such as lead,complex outside circuit,poor anti-jamming and other issues, and part of a deal with them Improperly, could cause the entire system of the decline. With modern science and technology of semiconductor development, especially large-scale integrated circuit design technologies, digital, miniaturization, integration sensors are becoming an important direction of development. This paper presents the basic concept of detection, a single digital temperature sensor DS18B20 the characteristics and working principle is given DS18B20 with 89 C2051 MCU interface application examples, and the composition of DS18B20 temperature detection system, and gives the various operations of the DS18B20 Software flow chart and operation programs.
Keyword: Temperature Detection;DS18B20;AT89C2051;Assembler language
目 录
中文摘要 英文摘要
1引言......................................................................5 1.1 前言..................................................................4 1.2 检测概述..............................................................4 1.3 智能传感器概述........................................................4 1.4 单总线系统概述.........................................................5 1.5 智能温度传感器发展的新趋势................................................7 2 数字温度传感器DS18B20....................................................9 2.1 DS18B20概述...........................................................9 2.1.1 性能特点..........................................................9 2.1.2 内部结构 ......................................................... 8 2.1.3 管脚排列.........................................................10 2.1.4 工作方式 ......................................................... 9 2.2 DS18B20存储器及设置寄存器 .......................................... 10 2.3 DS18B20测温原理......................................................13 2.4 DS18B20 测温过程.....................................................15 2.5 DS18B20使用注意事项..................................................17 3 单片机AT89C2051.........................................................19 3.1 AT89C2051概述........................................................19 3.2 AT89C2051外部单元....................................................20 3.2.1 引脚.............................................................20 3.2.2 电源.............................................................21 3.3 AT89C2051内部单元....................................................22 3.3.1 结构框图.........................................................22 3.3.2 运算器...........................................................22 3.3.3 控制器...........................................................23 3.3.4 存储器...........................................................24 3.4 AT89C2051程序保密性能................................................24 3.5 AT89C2051软硬件的开发................................................25 4 温度检测系统设计........................................................26 4.1方案比较.............................................................26 4.2总体设计.............................................................26 4.3详细设计.............................................................27 4.3.1硬件原理图.......................................................27 4.3.2 DS18B20与89C2051连线图.........................................27 4.3.3显示电路.........................................................28 4.3.4复位电路.........................................................28 5 软件调试................................................................29
5.1系统流程..............................................................29 5.1.1对DS18B20操作流程图..............................................29 5.1.2初始化流程图......................................................30 5.1.3读操作流程图......................................................31 5.1.4写操作流程图......................................................32 5.1.5 温度转换流程图...................................................33 5.2 系统部分程序设计及分析...............................................33 5.2.1 初始化子程序.....................................................33 5.2.2 读子程序.........................................................34 5.2.3 写子程序.........................................................35 5.2.4延时子程序........................................................36 6 结论....................................................................37 致 谢....................................................................38 结束语....................................................................39 参考文献..................................................................40 附录:硬件、监控主程序、实物照片..........................................41 1基于DS18B20的温度检测系统原理图........................................41 2监控主程序..............................................................41 3基于DS18B20的温度检测系统印刷板图......................................51 4实物照片................................................................52
1 引言
1.1 前言
温度是表征物体冷热程度的物理量,是工业生产和自动控制中最常见的工艺参数之一,生产过程中常常需要对温度进行检测和监控。在传统的温度测控系统设计中,往往采用模拟技术进行设计,这样就不可避免地遇到诸如传感器外围电路复杂及抗干扰能力差等问题;而其中任何一环节处理不当,就会造成整个系统性能的下降。采用数字温度传感器与单片机组成的温度检测系统进行温度检测、数值显示和数据存储,体积减小,精度提高,抗干扰能力强,并可组网进行多点协测,还可以实现实时控制等技术,在现代工业生产中应用越来越广泛。
1.2 检测技术概述
检测是人类认识客观世界的最基本的方法,是指生产、试验现场利用某种合适的检
测仪器或系统对被检测对象进行在线实时的测量。检测技术从广义上说是指寻找与自然信息独具有对应关系的种种表现形式的信号,确定被测量与显示量两者之间的定性、定量关系,并为进一步提高测量精度、改进试验方法及测量装置性能提供可行依据的整个过程。检测设备的性能指标主要有精确度、稳定性、输入输出特性这3个方面。
1.3 智能传感器概述
智能传感器最初是由美国宇航局1978年在开发出来的产品。因为宇宙飞船上需要大量的传感器不断向地面发送温度、位置、速度和姿态等数据信息,用一台大型计算机很难同时处理如此庞杂的数据,于是提出把CPU分散化,从而产生出智能化传感器。随着微电子技术的发展,1983年美国Honeywell公司首次推出用于过程工业的智能压力传感器。其它公司纷纷效仿,先后研制出各自的智能传感器产品。光电传感器具有反应速度快,能实现非接触测量,精度高、分辨率高和可靠性好等优点,因此在军事、工业检测与控制领域获得广泛应用,也使光电传感器的智能化倍受关注并获得迅速发展。智能传感器带有微处理机,具有采集、处理、交换信息的能力,是传感器集成化与微处理机相结合的产物。由于半导体技术的迅速发展,使微控制器的功能不断升级,价格不断下降,从而引起工业传感器设计的革命,也使检测技术的发展跃上一个新台阶。智能传感器具有:通过软件技术可实现高精度的信息采集,而且成本低;具有一定的编程自动化能力;功能多样化等特点。
相比一般传感器,智能式传感器有如下显著特点:
(1) 提高了传感器的精度
智能式传感器具有信息处理功能,通过软件不仅可修正各种确定性系统误差(如传感器输入输出的非线性误差、温度误差、零点误差、正反行程误差等)而且还可适当地补偿随机误差、降低噪声,大大提高了传感器精度。
(2) 提高了传感器的可靠性
集成传感器系统小型化,消除了传统结构的某些不可靠因素,改善了整个系统的抗干扰性能;同时它具有自诊断、自校准和数据存储功能(对于智能结构系统还有自适应功能),具有良好的稳定性。
(3)提高了传感器的性能价格比
在相同精度的需求下,多功能智能式传感器与单一功能的普通传感器相比,性能价格比明显提高,尤其是在采用较便宜的单片机后更为明显。
(4)促成了传感器多功能化
智能式传感器可以实现多传感器多参数综合测量,可编程扩大测量与使用范围;有一定的自适应能力,根据检测对象或条件的改变,相应地改变量程及输出数据的形式;具有数字通讯接口功能,直接送入远地计算机进行处理;具有多种数据输出形式 (如RS232串行输出,PIO并行输出,IEEE-488总线输出以及经D/A转换后的模拟量输出等),适配各种应用系统。
1.4 单总线系统概述
目前常用的微机与外设之间进行的数据通信的串行总线主要有 I 2C 总线, SPI 总线等。其中 I 2C 总线以同步串行 2 线方式进行通信(一条时钟线,一条数据线), SPI 总线则以同步串行 3 线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)。这些总线至少需要两条或两条以上的信号线。而单总线( 1-wire bus ),它采用单根信号线,既传输时钟,又传输数据,最基本的操作有初始化、写和读3种,所有其它的操作都由这3种基本操作组合而成。在这种操作中,只有写操作是单向的,初始化操作和读操作都是双向的。CPU 只需一根端口线就能与诸多单总线器件通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。 因而,这种单总线技术具有节省I/O口线,结构简单,成本低廉,软件设计简单,便于总线扩展和维护。同时,基于单总线技术能较好地解决传统识别器普遍存在的携带不便,易损坏,易受腐馈,易受电磁干扰等不足,因此,单总线具有广阔的应用前景,是值得关注的一个发展领域。
单总线系统中的数据交换,控制都由这一根数据线完成。主机或从机通过一个漏极开路或三态端口连至数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线。单总线通常要求外接一个约为 4.7K 的上拉电阻,这样,当总线闲置时其状态为高电平。
1.5 智能温度传感器发展的新趋势
进入21世纪后,智能温度传感器正朝着总线标准化、多功能、高精度、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。 (1)提高测温精度和分辨力
在20世纪90年代中期最早推出的智能温度传感器,采用的是8位A/D转换器,其测温精度较低,分辨力只能达到1℃。目前,国外已相继推出多种高精度、高分辨力的智能温度传感器,所用的是9~12位A/D转换器,分辨力一般可达0.5~0.0625℃。由美国DALLAS半导体公司新研制的DS1624型高分辨力智能温度传感器,能输出13位二进制数据,其分辨力高达0.03125℃,测温精度为±0.2℃。为了提高多通道智能温度传感器的转换速率,也有的芯片采用高速逐次逼近式A/D转换器。以AD7817型5通道智能温度传感器为例,它对本地传感器、每一路远程传感器的转换时间分别仅为27μs、9μs。 (2)增加测试功能
新型智能温度传感器的测试功能也在不断增强。例如,DS1629型单线智能温度传感器增加了实时日历时钟(RTC),使其功能更加完善。DS1624还增加了存储功能,利用芯片内部256字节的E2PROM存储器,可存储用户的短信息。另外,智能温度传感器正从单通道向多通道的方向发展,这就为研制和开发多路温度测控系统创造了良好条件。 智能温度传感器都具有多种工作模式可供选择,主要包括单次转换模式、连续转换模式、待机模式,有的还增加了低温极限扩展模式,操作非常简便。对某些智能温度传感器而言,主机(外部微处理器或单片机)还可通过相应的寄存器来设定其A/D转换速率(典型产品为MAX6654),分辨力及最大转换时间(典型产品为DS1624)。
智能温度控制器是在智能温度传感器的基础上发展而成的。典型产品有DS1620、DS1623、TCN75、LM76、MAX6625。智能温度控制器适配各种微控制器,构成智能化温控系统;它们还可以脱离微控制器单独工作,自行构成一个温控仪。 (3)总线技术的标准化与规范化
目前,智能温度传感器的总线技术也实现了标准化、规范化,所采用的总线主要有单线(1-Wire)总线、I2C总线、SMBus总线和spI总线。温度传感器作为从机可通过专用总线接口与主机进行通信。 (4)高可靠性及安全性设计
传统的A/D转换器大多采用积分式或逐次比较式转换技术,其噪声容限低,抑制混叠噪声及量化噪声的能力比较差。新型智能温度传感器(例如TMP03/04、LM74、LM83)普遍采用了高性能的Σ-Δ式A/D转换器,它能以很高的采样速率和很低的采样分辨力将模拟信号转换成数字信号,再利用过采样、噪声整形和数字滤波技术,来提高有效分辨力。Σ-Δ式A/D转换器不仅能滤除量化噪声,而且对外围元件的精度要求低;由于采用了数字反馈方式,因此比较器的失调电压及零点漂移都不会影响温度的转换精度。为了避免在温控系统受到噪声干扰时产生误动作,在AD7416/7417/7817、LM75/76、MAX6625/6626
等智能温度传感器的内部,都设置了一个可编程的“故障排队(fAultqueue)”计数器,专用于设定允许被测温度值超过上、下限的次数。仅当被测温度连续超过上限或低于下限的次数达到或超过所设定的次数n(n=1~4)时,才能触发中断端。若故障次数不满足上述条件或故障不是连续发生的,故障计数器就复位而不会触发中断端。
2 数字温度传感器 DS18B20
2.1 DS18B20概述
由dallas半导体公司生产的ds18b20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中。它具有体积小,接口方便,传输距离远等特点。 2.1.1 性能特点
(1)采用单总线的接口方式。与微处理器连接时,仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。
(2)测量温度范围宽。测量精度高 DS18B20 的测量范围为 -55 ℃~+ 125 ℃ ; 在 -10~+ 85°C 范围内,精度为 ± 0.5°C 。
(3)在使用中不需要任何外围元件。
(4)持多点组网功能。多个DS18B20可以并联在惟一的三线上,实现多点测温。 (5)供电方式灵活。DS18B20可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而 使系统结构更趋简单,可靠性更高。
(6)测量参数可配置。DS18B20 的测量分辨率可通过程序设定 9~12 位。 (7)负压特性。电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 (8)掉电保护功能。DS18B20 内部含有EEPROM,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。
DS18B20 具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。 2.1.2 内部结构
DS18B20内部结构主要由四部分组成:温度传感器,64位光刻ROM,非挥发的温度报警触发器TH和TL,高速暂存器。
图2.1 DS18B20内部结构
2.1.3 管脚排列
DS1820采用3脚PR-35封装或8脚SOIC封装,管脚排列如图2.2所示。图中GND为地,I/O为数据输入/输出端(即单线总线),该脚为漏极开路输出,常态下呈高电平。VDD是外部+5V电源端,不用时应接地。NC为空脚。
图2.2 DS18B20 的管脚排列图
2.1.4 工作方式
(1)寄生电源供电方式
所谓“寄生供电模式”就是省去系统总线中的电源线,由数据线为单总线器件提供电能,从而使系统总线由3根变为2根,方便了现场布线。DS18B20从单线信号线上汲取能
量,在信号线DQ处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。
为了使DS18B20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到E2存储器操作时,用MOSFET把I/O线直接拉到VCC就可提供足够的电流,在发出任何涉及到拷贝到E2存储器或启动温度转换的指令后,必须在最多10μS内把I/O线转换到强上拉状态。在强上拉方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺点就是要多占用一根I/O口线进行强上拉切换。
图2.3寄生电源工作方式
(2)外接电源工作方式
当温度高于100℃ 时,不推荐使用寄生电源,因为此时器件中较大的漏电流会使总线不能可靠检测高低电平,从而导致数据传输误码率的增大。在类似这种温度的情况下,推荐使用DS18B20的VDD引脚。
图2.4 外接电源工作方式
2.2 DS18B20存储器及设置寄存器
DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦除的 E2RAM, 后者存放高温度和低温度触发器 TH 、 TL 和结构寄存器。数据先写入 RAM ,经校验后再传给 E2RAM 。
暂存存储器包含了 8 个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位 TL ,第二个字节是温度的高八位 TH 。第三个和第四个字节是 TH 、 TL 的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节,可用来保证通信正确。 DS18B20 的分布如下:
表2.1 DS18B20 的暂存寄存器分布
寄存器内容 温度的低八位数据 温度的高八位数据 高温阀值 低温阀值 保留 保留 计数剩余值 每度计数值 CRC 校验
地址 0 1 2 3 4 5 6 7 8 在 64 b ROM 的最高有效字节中存储有循环冗余校验码( CRC )。主机根据 ROM 的前 56 位来计算 CRC 值,并和存入 DS18B20 中的 CRC 值做比较,以判断主机收到的 ROM 数据是否正确。
设置寄存器位于高速闪存的低5个字节,这个寄存器中的内容被用来确定温度的转换精度。寄存器各位的内容如下:
表2.2 DS18B20 的设置寄存器各位内容
BIT7 TM
BIT6 R1 BIT5 R0 BIT4 1 BIT3 1 BIT2 1 BIT1 1 BIT0 1 该寄存器的低五位一直都是1,TM是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式。在 DS18B20 出厂时该位被设置为0,用户不要去改动。 R1 和 R0 用来设置分辨率,如下表所示:(DS18B20 出厂时被设置为 12 位)
表2.3 分辨率设置
R1 0 0 1 0
R0 0 1 0 0 分辨率 温度最大转换时间 9 位 93.75 ms 10 位 187.5 ms 11 位 375 ms 12 位 750 ms 由表可知,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间权衡考虑。本次设计中采用的为12位分辨率,即750MS转换时间
2.3 DS18B20测温原理
DS18B20其内部含有两个温度系数不同的温敏振荡器,其中低温度系数振荡器相当于标尺,高温度系数振荡器相当于测温元件,通过不断比较两个温敏振荡器的振荡周期得到两个温敏振荡器在测量温度下的振荡频率比值。根据频率比值和温度的对应曲线得到相应的温度值。这种方式避免了测温过程中的A/D转换,提高了温度测量的精度。低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器 1。高温度系数晶振随温度变化其震荡频率明显改变,很敏感的振荡器,所产生的信号作为减法计数器 2 的脉冲输入,为计数器 2 提供一个频率随温度变化的计数脉冲。图中还隐含着计数门,当计数门打开时, DS18B20 就对低温度系数振荡器产生的时钟脉冲后进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将 -55 ℃ 所对应的基数分别置入减法计数器 1 和温度寄存器中,减法计数器 1 和温度寄存器被预置在 -55 ℃ 所对应的一个基数值。减法计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器 1 的预置值减到 0 时温度寄存器的值将加 1 ,减法计数器 1 的预置将重新被装入,减法计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器 2 计数到 0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值。
图2.5 DS18B20 的内部测温电路框图
DS18B20 内部结构主要由四部分组成:温度传感器、64位光刻ROM、非挥发的温度报警触发器TH和TL、配置寄存器。
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(地址:28H)是产品类型的编号,接着的 48 位是每个DS18B20自身的序列号,并且每个DS18B20的序列号都不相同,因此它可以看作是该DS18B20的地址序列码;最后8位则是前面56位的CRC校验码(CRC=X8+X5+X4+1)。由于每一个 DS18B20 的 ROM 数据都各不相同,因此微控制器就可以通过单总线对多个 DS18B20 进行寻址,从而实现一根总线上挂接多个 DS18B20 。
图2.6 64b闪速ROM
DS18B20 中的温度传感器用于完成对温度的测量,它的测量精度可以配置成9位, 10位,11位或12位4种状态。温度传感器在测量完成后将测量的结果存储在DS18B20的两个8BIT的RAM中,单片机可通过单线接口读到该数据,读取时低位在前,高位在后数据的存储格式如下表(以12位转化为例):
图2.7 温度信号寄存器格式
这是 12 位转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0 ,这 5 位为 0 ,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0 ,这 5 位为 1 ,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际温度。
例如: + 125 ℃ 的数字输出为07D0H , + 25.0625 ℃ 的数字输出为0191H , -25.0625 ℃ 的数字输出为 FF6FH , -55 ℃ 的数字输出为 FC90H 。
DS18B20 完成温度转换后,就把测得的温度值与 TH , TL 作比较,若 T>TH 或 T 1-WIRE 网络具有严谨的控制结构,其结构如图2.8所示,一般通过双绞线与 1-WIRE 元件进行数据通信,它们通常被定义为漏极开路端点,主 / 从式多点结构,而且一般都在主机端接上一个上拉电阻 +5V 电源。通常为了给 1-WIRE 设备提供足够的电源,需要一个 MOSFET 管将 1-WIRE 总线上拉至 +5V 电源。 图2.8 DS18B20组成的1-WIRE网络 1-WIRE 网络通信协议是分时定义的,有严格的时隙概念,下图是复位脉冲的时隙。 图2.9 1-WIRE协议的复位脉冲时隙 图2.10 1-WIRE读写“0/1”时隙 DS18B20 单线通信功能是分时完成的,他有严格的时隙概念,如果出现序列混乱,1-WIRE 器件将不响应主机,因此读写时序很重要。系统对 DS18B20 的各种操作必须按协议进行。根据 DS18B20 的协议规定,微控制器控制 DS18B20 完成温度的转换必须经过以下 4 个步骤 : (1)每次读写前对 DS18B20 进行复位初始化。复位要求主 CPU 将数据线下拉 500us ,然后释放, DS18B20 收到信号后等待 16us~60us 左右,然后发出 60us~240us 的存在低脉冲,主 CPU 收到此信号后表示复位成功。 (2)发送一条 ROM 功能指令,如表2.4所示: 表2.4 DS18B20 的 ROM 指令集 指令名称 读 ROM ROM 匹配(符合 ROM ) 指令代码 33H 55H 指令功能 读 DS18B20ROM 中的序列号(即读 64 位地址) 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与编码相对应 DS18B20 使之作出响应,用于多个搜索 ROM 0F0H 跳过 ROM 警报搜索 0CCH 0ECH DS18B20时定位 用于确定挂接在同一总线上 DS18B20 的个数和识别 64 位 ROM 地址,为操作各器件作好准备 忽略 64 位 ROM 地址,直接向 DS18B20 发温度变换命令,该命令将针对所有在线的DS18B20 该指令执行后,只有温度超过设定值上限或下限的片子才做出响应 (3)发送存储器指令,如表2.5所示: 表2.5 DS18B20 的存储器指令集 指令名称 温度变换 读暂存器 写暂存器 复制暂存器 重调 EEPROM 读供电方式 (4)进行数据通信。 指令代码 指令功能 启动 DS18B20 进行温度转换,转换时间最长为 500ms (典型为 44H 200ms ),结果存入内部 9 字节 RAM 中 0BEH 读内部RAM中9位温度值和CRC值 发出向内部 RAM 的第3 ,4字节写4EH 上,下限温度数据命令,紧跟该命令之后,是传送两字节的数据 将 RAM 中第 3 , 4 字节的内容复48H 制到 EEPROM 中 EEPROM 中的内容恢复到 RAM 中的0B8H 第 3 , 4 字节 读 DS18B20 的供电模式,寄生供电0B4H 时 DS18B20 发送“ 0 ”,外接电源供电 DS18B20 发送“ 1 ” 2.5 DS18B20使用注意事项 DS1820 在实际应用中应注意以下几方面的问题: (1)每一次读写之前都要对 DS18B20 进行复位,复位成功后发送一条 ROM 指令,最后发送 RAM 指令,这样才能对 DS18B20 进行预定的操作。复位要求主 CPU 将数据线下拉 500 微秒,然后释放, DS18B20 收到信号后等待 16 ~ 60 微秒左右,后发出 60 ~ 240 微秒的存在低脉冲,主 CPU 收到此信号表示复位成功。(所有的读写时序至少需要 60us ,且每个独立的时序之间至少需要 1us 的恢复时间。在写时序时,主机将在下拉低总线 15us 之内释放总线,并向单总线器件写 1 ;若主机拉低总线后能保持至少 60us 的低电平,则向单总线器件写 0 。单总线仅在主机发出读写时序时才向主机传送数据,所以,当主机向单总线器件发出读数据指令后,必须马上产生读时序,以便单总线器件能传输数据。) (2)在写数据时,写 0 时单总线至少被拉低 60us, 写 1 时 ,15us 内就得释放总线。 (3)转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0 ,这 5 位为 0 ,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0 ,这 5 位为 1 ,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际温度。 (4)较小的硬件开销需要相对复杂的软件进行补偿,由于 DS1820 与微处理器间采用串行数据传送,因此,在对 DS1820 进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用 PL/M 、 C 等高级语言进行系统程序设计时,对 DS1820 操作部分最好采用汇编语言实现。 (5)在 DS1820 的有关资料中均未提及单总线上所挂 DS1820 数量问题,容易使人误认为可以挂任意多个 DS1820 ,在实际应用中并非如此。当单总线上所挂 DS1820 超过 8 个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。 (6)连接 DS1820 的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过 50m 时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达 150m ,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用 DS1820 进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。测温电缆线建议采用屏蔽 4 芯双绞线,其中一对线接地线与信号线,另一组接 VCC 和地线,屏蔽层在源端单点接地。 (7)在 DS1820 测温程序设计中,向 DS1820 发出温度转换命令后,程序总要等待 DS1820 的返回信号,一旦某个 DS1820 接触不好或断线,当程序读该 DS1820 时,将没有返回信号,程序进入死循环。这一点在进行 DS1820 硬件连接和软件设计时也要给予一定的重视。 3 单片机AT89C2051 3.1 AT89C2051概述 89C2051是由ATMEL公司推出的一种小型单片机。95年出现在中国市场。其主要特点为采用Flash存贮器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容,可以很快被中国广大用户接受,其程序的电可擦写特性,使得开发与试验比较容易。 特性 与MCS-51产品兼容 2K字节可重编程闪存-耐久性:1,000次读/写周期 工作电压2.7V至V 全静态运行:0Hz至24MHz 两级程序锁存 128×8位内部RAM 15个可编程I/O口 两个16位定时器/计数器 六个中断源 可编程串行UART( = Universal Asynchronous Receiver Transmitter,通用异 步收发器)通道 可直接驱动LED的输出 芯片级模拟比较器 低功耗空闲模式和微功耗模式(Power-down mode) AT89C2051是美国ATMEL公司生产的一个低电压,高性能CMOS 8位单片机,片内含2k bytes的可反复擦写的只读Flash程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大AT89C2051单片机可为用户提供许多高性价比的应用场合。 AT89C2051有20个引脚,15个双向输入/输出 (I/O)端口,其中P1是一个完整的8位双向I/O口,两个外中断口,两个16位可编程定时计数器,两个全双向串行通信口,一个模拟比较放大器。 同时AT89C2051的时钟频率可以为零,即具备可用软件设置的睡眠省电功能,系统的唤醒方式有RAM、定时/计数器、串行口和外中断口,系统唤醒后即进入继续工作状态。省电模式中,片内RAM将被冻结,时钟停止振荡,所有功能停止工作,直至系统被硬件复位方可继续运行。 3.2 AT89C2051外部单元 3.2.1 引脚 89C2051共有20条引脚,详见图3.1。 图3.1 AT89C2051 引脚功能说明: GND:地 VCC:电源 P1口:P1口是一个8位双向I端口,一般做I/O用,其中P1.2~P1.7引脚带有 内部上拉电阻,P1.0和P1.1要求外部上拉电阻。P1.0和P1.1还分别作为片内精密模拟比较器的正相输入(AIN0)和反相输入(AIN1)。P1口输出缓冲器可吸收20mA电流,并能直接驱动LED显示。 对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P2口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流(IIL)。 P3口:P3.0~P3.5、P3.7是带有内部上拉电阻的7个双向I/O端口。P3.6用于 固定输入片内比较器的输出信号并且它作为一通用I/O口引脚而只读。P3口输出缓冲器可吸收20mA电流。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可作输入口。P3口作输入口使用时,因为内部有上拉电阻,那些被外部信号拉低的引脚会输出一个电流(IIL)。 P3口还用于实现AT89C2051特殊的功能,如表3.1所示 表3.1 AT89C2051 P3口特性 引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 RST:复位输入 功能特性 RXD(串行输入口) TXD(串行输出口) INT0(外中断0) INT1(外中断1) T0(定时/计数器0外部输入) T1(定时/计数器1外部输入) XTAL1:振荡器反相放大器的及内部始终发生器的输入端 XTAL2:振荡器反相放大器的输出端 在引脚的驱动能力上面,89C2051具有很强的下拉能力,P1,P3口的下拉能力均可达到20mA.相比之下,89C51/87C51的端口下拉能力每脚最大为15mA。但是限定9脚电流之和小于71mA.这样,引脚的平均电流只9mA。89C2051驱动能力的增强,使得它可以直接驱动LED数码管。 3.2.2 电源 89C2051有很宽的工作电源电压,可为2.7~6V,当工作在3V时,电流相当于6V工作时的1/4。89C2051工作于12Hz时,动态电流为5.5mA,空闲态为1mA,掉电态仅为20nA。这样小的功耗很适合于电池供电的小型控制系统。 3.3 AT89C2051内部单元 3.3.1 结构框图 图3.2 AT89C2051内部结构框图 3.3.2 运算器 (1)算术/逻辑部件ALU:用以完成+、-、*、/ 的算术运算及布尔代数的逻辑运算,并通过运算结果影响程序状态寄存器PSW的某些位,从而为判断、转移、十进制修正和出错等提供依据。 (2)累加器A:在算术/逻辑运算中存放一个操作数或结果,在与外部存储器和I/O接口打交道时,进行数据传送都要经过A来完成。 (3)寄存器B:在 *、/ 运算中要使用寄存器B 。乘法时,B用来存放乘数以及积的高字节;除法时,B用来存放除数及余数。不作乘除时,B可作通用寄存器使用。 (4)程序状态标志寄存器PSW:用来存放当前指令执行后操作结果的某些特征,以便为下一条指令的执行提供依据。 表3.2 片内工作寄存器组 (D0H) D7 Cy D6 AC D5 F0 D4 RS1 D3 RS0 D2 OV D1 — D0 P Cy:进位标志。有进位或借位,则Cy=1,否则Cy=0 ;在布尔运算时,Cy(简称C)作 为布尔处理器。 AC:辅助进位标志位。 F0:用户标志位:用户可用软件对F0置位“1”或清“0”,以决定程序的流向。 OV:溢出标志位:当运算结果溢出时,OV为“1”,否则为“0”。 D.1:未定义。 P: 奇偶校验位:当累加器A中的“1”的个数为奇数时,P置“1”,否则P置“0”。 RS1、RS0:工作寄存区选择位: 表3.3 RS1、RS0与片内工作寄存器组的对应关系 RS1 0 0 1 1 3.3.3 控制器 RS0 0 1 0 1 寄存器区 0 1 2 3 片内RAM地址 通用寄存器名称 00H~07H R0~R7 08H~0FH R0~R7 10H~17H R0~R7 18H~1FH R0~R7 (1)指令寄存器IR和指令译码器。 (2)程序计数器:存放CPU执行下一条指令的地址。是一个16位寄存器,可寻 64KB 。 (3)堆栈指针SP:用于子程序调用和中断处理。【机器复位后,SP←#07H ,因为 压栈的第一个数据在08H单元中】 (4)数据指针寄存器DPTR:16位的寄存器,也可以作为两个8位寄存器DPH和DPL 。DPTR主要作外部数据指针,可对64KB外部RAM进行间接寻址。 MCS-51由包括PC在内的22个特殊功能寄存器,它们除有各自的名称外,还有唯一的地址,离散的分布在片内RAM中的80H~FFH共128个存储单元中。在这128个储存单元构成的SFR块中,未被占用的单元不可使用! 表3.4 21个特殊功能寄存器SFR 特殊功能寄存器 B * A * PSW * IP * P3 * IE * 功能名称 寄存器 累加器 程序状态标志寄存器 中断优先级控制器 P3口数据寄存器 中断允许控制寄存器 地址 F0H E0H D0H B8H B0H A8H 复位后状态 00H 00H 00H XXX00000B FFH 0XX00000B P2 * P2口数据寄存器 A0H FFH SBUF 串行口发送/接收缓冲器 99H 不定 SCON * 串行口控制寄存器 98H 00H P1 * P1口数据寄存器 90H FFH TL1 T1计数器低8位 8BH 00H TL0 T0计数器低8位 8AH 00H TH1 T1计数器高8位 8DH 00H TH0 T0计数器高8位 8CH 00H TMOD 定时器/计数器方式控制寄存器 89H 00H TCON * 定时器控制寄存器 88H 00H PCON 电源控制寄存器 87H 00H DPL 地址寄存器低8位 82H 00H DPH 地址寄存器高8位 83H 00H SP 堆栈指针寄存器 81H 07H P0 * P0口数据寄存器 80H FFH PC 程序计数器 无地址 0000H 注:“*”表示可位寻址。 SP赋值方法:MOV SP,#50H(其中#50H为寄存器50H,不可直接写为50H,否则SP指向寄存器00H) 3.3.4 存储器 89C2051片内含有2k字节的Flash程序存储器,128字节的片内RAM,与80C31内部完全类似。由于2051内部设计全静态工作,所以允许工作的时钟为0~20MHz,也就是说,允许在低速工作时,不破坏RAM内容。相比之下,一般8031对最低工作时钟限制为3.5MHz,因为其内部的RAM是动态刷新的。89C2051不允许构造外部总线来扩充程序/数据存储器,所以它也不需要ALEPSEN、RD、WR一类的引脚。 3.4 AT89C2051程序保密性能 89C2051设计有2个程序保密位,可以不对它们编程(U),也可以对它们编程(P)来获得如表3.5所列的附加特性 表3.5锁存位保护模式 加密模式 1 2 3 后,程序不能被读出。 LB1 U P P LB2 U U P 加密类型 无程序加密特性 禁止再对闪存编程 同模式2,同时禁止检验闪存 保密位1被编程之后,程序存储器不能再被编程除非做一次擦除,保密位2被编程之 3.5 AT89C2051软硬件的开发 89C2051可以采用下面2种方法开发应用系统。 (1)由于89C2051内部程序存贮器为Flash,所以修改它内部的程序十分方便快捷,只要配备一个可以编程89C2051的编程器即可。调试人员可以采用程序编辑-编译-固化-插到电路板中试验这样反复循环的方法,对于熟练的MCS-51程序员来说,这种调试方法并不十分困难。当做这种调试不能够了解片内RAM的内容和程序的走向等有关信息。 (2)将普通8031/80C31仿真器的仿真插头中P1.0~P1.7和P3.0~P3.6引出来仿真205T,这种方法可以运用单步、断点的调试方法,但是仿真不够真实,比如,2051的内部模拟比较器功能,P1口、P3口的增强下拉能力等等。 4 温度检测系统设计 4.1方案比较 下面就目前国内较多的两种单片机,比较一下AT89C2051与其他同类型单片机之间 的差别 (1)与80C31系统相比较 如果需要构成一个80C31的最小系统的话,除了CPU之外,8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPROM的2764系列。从元器件的成本,电路板的面积和加密性来看,使用89C2051都是合算的。 (2)与PIC单片机比较 89C2051与PIC相对应芯片比较有如下特点: 89C2051的价格高于PIC的OTP型号,但大大低于PIC的EPROM型,89C2051片内不含Watch Dog,这是89C2051的不足之处,中断系统堆栈结构、串等通讯笔定时器系统都大大强于PIC系统。 由于PIC芯片中无标准串等口,所以在单片机的联网应用上面,PIC不太适合。与PIC相比2051更适合于较复杂的应用场合,适合一些软件需要多次修改的应用。 以这次的设计而言,AT89C2051具有最好的性价比。其原因有下列5点: (1)2051采用的是MCS51的核心,兼容MCS51指令系统。 (2)2051内部基本保持了80C31的硬件I/O功能。 (3)2051采用的是Flash存贮器技术,可重复擦/写(>1000次)。 (4)更适合小批量系统的应用,容易实现软件的升级。 (5)20条I/O量已经满足本次设计要求。 4.2总体设计 在本次设计中,采用了以DS18B20与AT89C2051为系统基础。 温度传感器DS18B20将被测环境温度转化成带符号的数字信号(以十六位补码形式,占两个字节),传感器可置于离装置150米以内的任何地方,输出脚I/O直接与单片机的P3.7相连,传感器采用寄生电源供电。AT89C2051是整个装置的控制核心,它内带1K字节的FlashROM,用户程序存放在这里。显示器模块由5个LED4205组成。系统程序分为传感器控制程序和显示器程序两部分。传感器控制程序按照DS18B20的通信协议编制。系统的工作是在程序控制下,完成对传感器的读写操作和对温度的显示。 4.3详细设计 4.3.1硬件原理图 图4.1 基于单总线温度传感器的温度检测系统硬件原理图 4.3.2 DS18B20与89C2051连线图 输出脚DQ直接与单片机的P3.7相连,传感器采用寄生电源供电。 图4.2 DS18B20与89C2051连线原理图 4.3.3显示电路 图4.3 89C2051与LED4205部分连线图 4.3.4复位电路 图4.4 复位电路原理图 5 软件调试 5.1系统流程 5.1.1对DS18B20操作流程图 5.1.2初始化流程图 5.1.3读操作流程图 5.1.4写操作流程图 5.1.5 温度转换流程图 5.2 系统部分程序设计及分析 5.2.1 初始化子程序 复位时序: (1)主机将信号线置为低电平,时间为480-960uS (2)主机将信号线置为高电平,时间为15-60uS (3)DS18B20发出60-240uS的低电平作为应答信号,主机收到此信号后才能操作 DSREST: NOP SETB DAT ;拉高数据线 NOP CLR DAT ;拉低数据线512uS MOV R0,#80H TSR0: DJNZ R0,TSR0 ;双字节4uS做128次,延时512uS SETB DAT ;拉高数据线32uS MOV R0,#08H MOV R0,#10H ;设定读DS1820B应答信号的最大时限为16*4*2=128u DJNZ R0,TSR2 LJMP TSR4 ;未读到,转 LJMP TSR5 LJMP TSR7 TSR1: DJNZ R0,TSR1 ;双字节4uS做8次,延时32uS TSR2: JNB DAT,TSR3 ;数据线低电平,已读到,转 TSR3: SETB FDS18 ;读到后置复位成功标志 TSR4: CLR FDS18 TSR5: MOV R0,#40H TSR6: DJNZ R0,TSR6 ;双字节4uS做64次,延时256uS TSR7: SETB DAT ;拉高数据线 RET 5.2.2 读子程序 读入数据高位字节放在BDS18H,低位字节放在BDS18L,读时序: (1)主机将信号线从高电平拉至低电平1uS以上,再升为高电平,产生读起始信号 (2)从主机将信号线从高电平拉至低电平15-60uS的时间内,DS18B20将数据放到信号线上,完成1个读周期 (3)在开始另一个读周期前,必须有1uS以上的高电平恢复期 DS18RD: NOP MOV R4,#02H MOV R1,#60H RE00: MOV R2,#08H RE01: CLR C SETB DAT ;拉高数据线 NOP CLR TR0 ;读时序较关键,不允许T0中断 CLR DAT ;拉低数据线 NOP SETB DAT MOV R3,#04H MOV C,DAT ;读入1位数据 MOV R3,#10H RRC A ;移入A SETB TR0 DJNZ R2,RE01 ;不到8位,循环 MOV @R1,A ;读入1个字节,放到60H INC R1 ;下一个数据放到61H DJNZ R4,RE00 MOV BDS18L,60H MOV BDS18H,61H SETB TR0 RET RE10: DJNZ R3,RE10 ;双字节4uS做4次,延时16uS RE20: DJNZ R3,RE20 5.2.3 写子程序 要写的数据放在累加器A,写时序: (1)主机将信号线从高电平拉至低电平,产生写起始信号 (2)从信号线的下降沿开始,在15-60uS的时间内,DS18B20对信号线检测,如高则写1,低则写0,完成1个写周期 (3)在开始另一个写周期前,必须有1uS以上的高电平恢复期 DS18WR: NOP MOV R2,#08H ;共写1字节8位 CLR C NOP RRC A ;移出1位数据 MOV DAT,C ;将1位数据放到数据线上 MOV R3,#10H SETB DAT ;拉高数据线 NOP NOP DJNZ R2,WR1 ;不到8位,循环 WR1: CLR DAT ;拉低数据线 WR1Y: DJNZ R3,WR1Y ;双字节4uS做16次,延时64uS SETB DAT ;到8位,拉高数据线 RET 5.2.4延时子程序 DELAY1=(((4*250)+2)*100)+2)*1uS,约100mS DELAY1: NOP MOV R6,#64H DLOP1: MOV R5,#0FAH DLOP0: DJNZ R5,DLOP0 DJNZ R6,DLOP1 RET 6 结论 由此我们可以得出结论:由DS18B20和AT89C2051组成的该温度检测系统是完全可行的。该系统具有更高速、更灵敏、更简捷地获取被分析、检测、控制对象的温度信息的能力,同时具有良好的抗干扰及环境适应能力(测温范围-55 ℃~+ 125 ℃)。因其体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域,且系统结构较为简单,可大规模的采用,成本低廉。 致 谢 本次设计是在赖申江老师的悉心指导下完成的。在整个过程中,导师给予了大量指导,并提供了很多与该研究相关的重要信息,培养了我们对科学研究的严谨态度和创新精神,对我影响深远。不仅使我掌握了基本的科学研究方法,还使我明白了许多待人接物与为人处世的道理,这将非常有利于我今后的学习和工作。 本论文从最初选题到最终完成,每一步都是在导师的指导下完成的,倾注了导师大量的精力。在此,谨向导师表示衷心的感谢和至高的敬意! 结束语 转眼大学生活就进入到了尾声,而在这个时我也完成自己的毕业设计。毕业设计对任何一个毕业生来说都应该是非常重要的,因为这需要通过自己所学到的知识来解决实际的问题,是对自己综合能力的一个考验。毕业设计的水平在很大程度上代表了毕业生的水平,只有合格完成了毕业设计的人才能算做一个合格的毕业生。 这次我设计的是基于单总线温度传感器的温度检测系统设计。在设计过程中,我通过各种途径查阅了大量的关于温度传感器和单片机的资料。考虑到AT89C2051,80C31和PIC单片机的特点,最后决定选用AT89C2051。并利用PROTEL来制作原理图和印刷板。 至此,所有关于毕业设计的内容就介绍完了。虽然我花费了很多时间来尽力把毕设做好,但是由于个人能力的原因,整个系统还是不够完善的,还有许多地方值得改进。今后有机会再将其完善。 老师们常说毕业设计重在过程,事实也确是如此。在整个毕设的过程,我学到了许多过去没有接触过的新的知识,也将过去所学的知识又做了一次温习。这些收获给我带来的帮助远不止作好毕业设计那么简单,我相信在踏上工作岗位之后它们也将成为我向上的坚实基础。 参考文献 [1] 丁元杰,单片机原理及应用,机械工业出版社; [2] 李华,MCS-51系列单片机实用接口技术,北京航空航天出版社; [3] 何立民,单片机应用文集,北京航空航天出版社; [4] 何英,Protel99入门与实用,机械工业出版社; [5] 郑华耀,检测技术,机械工业出版社; [6] 王武江等,常用集成电路速查手册,冶金工业出版社; [7] 赦鸿安, 常用数字集成电路应用手册,中国计量出版社; [8] 李建勋, 数字电路与逻辑设计,科学出版社; [9] 曹汉房等, 数字技术教程,电子工业出版社; [10] 朱积川 刘泽坚,数字电路与脉冲电路实验,高等教育出版社; [11] 王俊杰,单总线测温系统[硕士学位论文],北京,清华大学。 [12] Lynch J P, Law K H, Kiremidjian A S, Kenny T W, Carryer E ,and Partridge A. The design of wireless sensing unit for structural health monitoring Proceeding of the 3th International Workshop on Structural Health Monitoring[C] [13] Klyachkin,ML, Sloan,DA. Secondary hyperparathyroidism: evidence for an association with papillarythyroid cancer. American Surgeon 附录:硬件、监控主程序、实物照片 1基于DS18B20的温度检测系统原理图 2 监控主程序 ;------------------------------------------------------------------------------ ;功能: ;5位数码管动态显示 ;温度传感器采样及显示,数码管动态显示温度(XXX.XX),出错显示Err1- ;-------------------------------位定义-------------------------------------- FDS18 EQU 06H ;DS18B20复位标志 F1S EQU 07H ; 1秒到时间标志 DAT EQU P3.7 ; 温度数据线,DS18B20的第2脚 ;-----------------------------字节定义------------------------------------- T40 EQU 31H ;40mS计时单元 T1000 EQU 32H ;1S计时单元 BCNT EQU 33H ;显示位单元,从01H-20H移位切换 DATA1 EQU 34H DATA2 EQU 35H DATA3 EQU 36H DATA4 EQU 37H DATA5 EQU 38H BNUM EQU 39H ;温度整数单元(二进制) BNUM1 EQU 3AH ;温度小数单元(二进制) BDS18H EQU 3BH ;DS18B20采样值高位字节 BDS18L EQU 3CH ;DS18B20采样值低位字节 ;----------------------------系统中断入口---------------------------------- ORG 0000H LJMP START ;引向主程序入口 ORG 000BH LJMP PGT0 ;T0中断正常入口,转定时器中断服务程序 ;-----------------------------系统初始入口--------------------------------- ORG 0027H START: MOV SP,#68H ;-------------------------定时/计数控制器初始化---------------------------- MOV TMOD,#20H ;T1方式2,8位自动装载。T0方式0,13位计数 MOV TL0,#18H ;T0置初值,6MHZ晶振,2MS定时中断 MOV TH0,#0E0H ;----------------------------清8031RAM及外设----------------------_-------- CLR A MOV R0,#20H MOV R7,#47H RCLP0: MOV @R0,A INC R0 DJNZ R7,RCLP0 MOV BCNT,#01H MOV T40,A MOV DATA1,A MOV DATA2,A MOV DATA3,A CLR A MOV T1000,A MOV DATA4,A MOV DATA5,A ;-------------------------------------------------------------------------- SETB TR0 ;TR0是TCON的D4位,TR0=1,启动T0 SETB ET0 SETB EA ;CPU开中断 ;----------------------------监控程序循环---------------------------------- ;监控程序0.5秒钟循环1次 MAIN: SETB F1S NOP LJMP DS18B ; 转DS18B20温度采样 NOP LCALL DSREST ;复位DS18B20 JNB FDS18,DSERR1 ; 复位DS18B20失败,转其它处理,显示Err1 MOV A,#0CCH ; CCH是命令字,跳过DS18B20的ROM序 列号检测 LCALL DS18WR ;写入该命令 MOV A,#44H ;44H是命令字,使DS18B20开始温度转换 LCALL DS18WR ;写入该命令 LCALL DELAY1 ;延时,等待转换结果 LCALL DSREST ;复位DS18B20 JNB FDS18,DSERR2 ;复位DS18B20失败,转其它处理,显示Err2 LCALL DS18WR ;写入该命令 MOV A,#0BEH ;BEH是读命令字 LCALL DS18WR ;写入读数据命令 LCALL DS18RD ; 读出DS18B20温度转换结果,放到BDS18H 及BDS18L CLR A MOV BNUM1,A ;清BNUM1 MOV A,BDS18L ;先算小数部分,从BDS18L中取D3-D0位 JNB ACC.3,D30 MOV BNUM1,#32H ;0.5度,显示加50(32H) DS18B: SETB DAT ; 拉高数据线 MOV A,#0CCH ;跳过DS18B20的ROM序列号检测 D30: JNB ACC.2,D20 MOV A,BNUM1 ADD A,#19H ;0.25度,显示加25(19H) MOV BNUM1,A MOV A,BNUM1 ADD A,#0DH ;0.125度,显示加13(0DH) D20: JNB ACC.1,D10 MOV BNUM1,A D10: JNB ACC.0,DL1 MOV A,BNUM1 ADD A,#0BH MOV BNUM1,A DL1: MOV A,BDS18L SWAP A ANL A,#0FH MOV BNUM,A MOV A,BDS18H ANL A,#07H 到BNUM的D6-D4位 SWAP A ORL A,BNUM MOV BNUM,A MOV R2,BNUM LCALL BINBCD MOV A,R5 MOV R1,A ANL A,#0FH MOV DATA3,A MOV A,R1 SWAP A ANL A,#0FH MOV DATA4,A MOV A,R6 MOV DATA5,A MOV R2,BNUM1 ;0.0625度,显示加7(07H) ;再算整数部分 BDS18L中取D7-D4位,即2^3-2^0位,放 到BNUM的D3-D0位 BDS18H中取D2-D0位,即2^6-2^4位,放BNUM ;BNUM调整为十进制数 ;个位数放在DATA3 ;十位数放在DATA4 ;百位数放在DATA5 ;BNUM1调整为十进制数 ;从 ;从 ;温度数据(整数)拼装结束放回 LCALL BINBCD MOV A,R5 MOV R1,A ANL A,#0FH MOV DATA1,A ;小数点后2位数放在DATA1 MOV A,R1 SWAP A ANL A,#0FH MOV DATA2,A ;小数点后1位数放在DATA2 LJMP MEND NOP SJMP DSERR SJMP DSERR NOP MOV DATA2,#0BH MOV DATA3,#0BH MOV DATA4,#0AH MOV DATA5,#00H LJMP MEND NOP LJMP MAIN DSERR1: MOV DATA1,#01H ;出错,显示\"Err1\" DSERR2: MOV DATA1,#02H DSERR: MEND: JB F1S,MEND ;-------------------------系统定时中断服务程序PGT0---------------------------- PGT0: PUSH PSW ;保护现场 PUSH ACC PUSH DPL PUSH DPH MOV TL0,#18H ;置2ms初值 MOV TH0,#0E0H MOV A,BCNT RL A ;切换显示位 CJNE A,#40H,L0 MOV A,#01H L0: MOV BCNT,A MOV A,DATA1 ;显示小数点后第2位 CJNE A,#01H,L2 LCALL CHANGE MOV P1,A SETB P3.5 SETB P3.4 SETB P3.3 SETB P3.2 CLR P3.1 SJMP LT40 L2: CJNE A,#02H,L3 MOV A,DATA2 LCALL CHANGE MOV P1,A SETB P3.5 SETB P3.4 SETB P3.3 SETB P3.1 CLR P3.2 SJMP LT40 L3: CJNE A,#04H,L4 MOV A,DATA3 LCALL CHANGE ORL A,#10H MOV P1,A SETB P3.5 SETB P3.4 SETB P3.2 SETB P3.1 CLR P3.3 SJMP LT40 L4: CJNE A,#08H,L5 MOV A,DATA4 LCALL CHANGE 1位 ;显示小数点 ;显示小数点后第 ;显示个位 ;显示十位 MOV P1,A SETB P3.5 SETB P3.3 SETB P3.2 SETB P3.1 CLR P3.4 SJMP LT40 MOV A,DATA5 ;显示百位 LCALL CHANGE MOV P1,A SETB P3.4 SETB P3.3 SETB P3.2 SETB P3.1 CLR P3.5 SJMP LT40 L5: CJNE A,#10H,L6 L6: NOP LT40: INC T40 ;T40加1 MOV A,T40 CJNE A,#14H,CKR ;不到40毫秒,转出口CKR CLR A ;到40毫秒,清T40 MOV T40,A INC T1000 ;T1000加1 MOV A,T1000 CJNE A,#19H,CKR ;不到0.5秒,转出口 CLR A ;到0.5秒,清T1000 MOV T1000,A CLR F1S ;清F1S CKR: POP DPH POP DPL POP ACC POP PSW RETI ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- ;二进制数到BCD码转换子程序BINBCD ; 入口:R2(8位无符号二进制数) ; 出口:R6(百位)、R5(十位、个位)存放3位BCD码 BINBCD: MOV A,R2 MOV B,#64H DIV AB MOV R6,A MOV A,#0AH XCH A,B DIV AB SWAP A ADD A,B MOV R5,A RET ;---------------------------------------------------------------------------- ;复位DS18B20子程序DSREST DSREST: NOP SETB DAT ;拉高数据线 NOP CLR DAT ;拉低数据线512uS MOV R0,#80H TSR0: DJNZ R0,TSR0 ;双字节4uS做128次,延时512uS SETB DAT ;拉高数据线32uS MOV R0,#08H TSR1: DJNZ R0,TSR1 ;双字节4uS做8次,延时32uS MOV R0,#10H ;设定读DS1820B应答信号的最大时限为 16*4*2=128uS TSR2: JNB DAT,TSR3 ;数据线低电平,已读到,转 DJNZ R0,TSR2 LJMP TSR4 ;未读到,转 LJMP TSR5 LJMP TSR7 TSR3: SETB FDS18 ;读到后置复位成功标志 TSR4: CLR FDS18 TSR5: MOV R0,#40H TSR6: DJNZ R0,TSR6 ;双字节4uS做64次,延时256uS TSR7: SETB DAT ;拉高数据线 RET ;---------------------------------------------------------------------------- ;写DS18B20子程序DS18WR DS18WR: NOP MOV R2,#08H ;共写1字节8位 CLR C NOP RRC A ;移出1位数据 MOV DAT,C ;将1位数据放到数据线上 MOV R3,#10H SETB DAT ;拉高数据线 NOP NOP DJNZ R2,WR1 ;不到8位,循环 RET WR1: CLR DAT ;拉低数据线 WR1Y: DJNZ R3,WR1Y ;双字节4uS做16次,延时64uS SETB DAT ;到8位,拉高数据线 ;---------------------------------------------------------------------------- ;读DS18B20子程序DS18RD DS18RD: NOP MOV R4,#02H MOV R1,#60H RE00: MOV R2,#08H RE01: CLR C SETB DAT ;拉高数据线 NOP CLR TR0 ;读时序较关键,不允许T0中断 CLR DAT ;拉低数据线 NOP SETB DAT MOV R3,#04H RE10: DJNZ R3,RE10 ;双字节4uS做4次,延时16uS MOV C,DAT ;读入1位数据 MOV R3,#10H RRC A ;移入A SETB TR0 DJNZ R2,RE01 ;不到8位,循环 MOV @R1,A ;读入1个字节,放到60H INC R1 ;下一个数据放到61H DJNZ R4,RE00 MOV BDS18L,60H MOV BDS18H,61H SETB TR0 RET RE20: DJNZ R3,RE20 ;---------------------------------------------------------------------------- ;延时子程序 DELAY1: NOP MOV R6,#64H DLOP1: MOV R5,#0FAH DLOP0: DJNZ R5,DLOP0 DJNZ R6,DLOP1 RET ;----------------------------段码转换子程序CHANGE---------------------------- CHANGE: MOV DPTR,#TABLE1 MOVC A,@A+DPTR RET ;--------------------------共阴极LED数码管段码表----------------------------- TABLE1: DB 0EEH,88H,0C7H,0CDH; \"0\ DB 0A9H,6DH,6FH,0C8H; \"4\ DB 0EFH,0EDH; \"8\ DB 67H,62H; \"E\ ;--------------------------------------------------------------------------- END ;------------------------------编译结束--------------------------------- 3基于DS18B20的温度检测系统印刷板图 4实物照片 温度显示面板 系统内部结 因篇幅问题不能全部显示,请点此查看更多更全内容