《最新毕业论文-基于单片机的温度监测系统.doc》由会员分享,可在线阅读,更多相关《最新毕业论文-基于单片机的温度监测系统.doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、摘要 信息技术的高速发展和广泛应用给人类带来了革命性的进步,随之渗透到人们日常活动的方方面面。因此各种计算机、服务器机房也如雨后春笋般涌现。大量维护工作也由此产生。对于机房的日常管理和维护最重要的就是安全问题。而其中最为突出的问题之一就是防火。本次毕业设计的主要目的就是设计一个基于温度监测的火灾报警系统。本人采用理论探讨与实际开发相结合的方法,研究了美国DALLAS公司开发的一线总线技术及其通信协议。并以美国DALLAS公司的一线总线技术为核心,连同单片机技术,将火灾报警的温度监测环节予以实现。并且依据该理论,设计出一个廉价、实用的温度监测系统。关键词:一线总线 DS1820 AT89C51
2、AbstractThe high-speed development and wide application of information technology has brought revolutionary progress to and influenced human beings. As the result, the emerged computer&server room arouses serious daily maintenance.The fire fighting is one of them to the computer&server room. The aim
3、 of this paper is to design one auto-alarm system based on the temperature supervision.By means of combining theory discussion arid practical development, the author studied the 1-wire bus technology developed by the Dallas Semiconductor company in USA. At the same time, the author realized the temp
4、erature supervision as one part of the auto-alarm system based on DALLAS 1-wire bus technology and MCU. Also, the author engineered and designed one on-line and cheap temperature supervision system. Keywords: 1-wire bus, DS1820, AT89C51 目 录1引言 1.1课题的意义 1.2课题主要研究的内容2系统硬件电路设计 2.1基于数字温度传感器的系统硬件设计方案 2.2
5、一线总线网络 2.3系统硬件结构框图 2.4结构框图的简要说明 2.4.1 基于AT89C51单片机及其外围电路的主机控制单元 2.4.2 DS 1820串行组成的一线总线型网络 2.4.3 LED数字显示及其驱动电路 2.5系统可行应用分析3主要元器件介绍 3.1 AT89C51 3.1.1单片机的选择 3.1.2主要特性 3.1.3管脚说明 3.2 DS1820 3.2.1 一般说明 3.2.2 特性 3.2.3 DS1820的引脚 3.2.4 DS1820引脚说明 3.2.5 DS 1820内部逻辑框图 3.2.6 DS1820工作过程中的协议 3.3 LED数码显示 3.4 7406/
6、74074一线总线技术 4.1一线总线(1-Wire Bus)技术简介 4.2一线总线工作原理 4.3一线总线协议简介5系统软件设计 5.1 系统程序设计总框图 5.2 软件算法说明 5.3 一线总线协议的软件实现结论致谢参考文献 1引言 1.1课题的意义 近年来随着我国信息化进程的加快,在很多大专院校、科研院所建设了大量的计算机、服务器机房。因此,在一个不大的空间区域内使用了大量的贵重设备,再加上与之配套的空调、试验平台等附属设备,整个机房就需要有几十个电源接插装置(即电源插座)。某些插座接点中通过的电流可能达到几十安培,甚至会更高。电线接点又是容易出现局部高温高热的,那么就需要一种监测系统
7、,在那些平时难以看到、发生危险无法在第一时间察觉的地方,“替”机房的管理人员监视这些地点(例如暗藏的供电线路接头)。一旦发生危险情况,就可以及时准确的报告给机房人员,以保证能准确及时的处理危险状况。 这个系统如果设计上更进一步,也可以提供预警功能: 我们知道火灾的发生都是易燃物质在一定的环境下,温度达到燃点开始燃烧的。系统可以设计成一旦出现火灾隐患,就提醒在场人员采取有效措施的机制。这样可以事先预警。 目前,国际上的温度传感器正从模拟式向数字式、由集成化向智能化的方向飞速发展。如今,随着数字温度传感器的诞生,曾经令人眼花缭乱的电路、密密麻麻焊接在一起的元器件,如今己经被一个小小的、毫不起眼的数
8、字传感器代替了。MAXIM, DALLAS(已被MAXIM收购)等世界上有实力的公司根据不同应用领域的不同需求推出了多款产品,性能良好、价格低廉。使得我们对数字温度传感器有了足够的选择。 1.2课题主要研究的内容 本课题研究的是基于温度传感的火灾报警系统中的温度监测和显示部分的实现。以智能温度传感器应用技术和单片机应用技术为核心进行开发。其中,涉及到了一线总线技术开发应用;单片机技术开发应用;智能传感器应用等。并且以理论分析和该技术方案为基础,在不断地实验和方案调整中,完成了一个温度监测系统的设计。 2系统硬件电路设计 2.1基于数字温度传感器的系统硬件设计方案 图21 监测系统示意图 DS1
9、820的所有功能、操作均是在单片机控制下进行的,线上接有若干个DS 1820传感器,即可进行多点的温度采集.值得注意的是所有的命令码均以串行方式通过一线总线输出到DS 1820,读出的数字温度值也以串行方式输入到单片机,并存入数据缓存。 2.2一线总线网络根据DS 1820数字温度传感器的功能特点,选择一线总线的网络结构。该网络基于DS1820以及一线总线协议。其特点在后面的章节中将有详细介绍,这里不再讨论。 图22系统逻辑框图 2.3系统硬件结构框图 本系统的硬件,主要由三个部分组成:基于AT89C51单片机及其外围电路的主机控制单元;DS 1820串行组成的一线总线型网络;LED数字显示及
10、其驱动电路。 电路原理图如下图: 2.4结构框图的简要说明 2.4.1 基于AT89C51单片机及其外围电路的主机控制单元 AT89C51单片机功能强、I/O口多、但是其内部的数据暂存存储器空间比较小,只有128个字节。而DS 1820的ROM码有64位,也就是说,记录一个ROM码要占据8个字节的数据暂存存储器空间,再加上用于搜索、温度值存储、指针等操作所必须额外分配的存储器空间。实际上AT89C51单片机内部已经没有多少富余了,在程序编写中发现,10个ROM码是能允许的最大值。哪怕再增加一个8字节的ROM码都必须使用扩展的片外RAM。考虑到本系统目前只计划应用在较小的机房中,监测点不多;同时
11、,本设计的重点在于数字温度传感器及其一线总线技术的应用研究。因此,没有使用外扩RAM的方法来扩大一线总线网络的规模。相信,即便本系统由于某种原因需要对一线总线网络进行扩展,无论是选择单片机换型,或者选择外扩RAM,实现它们都应没有太大的障碍。 AT89C51具有4个I/O口,它们分别是P0口、P1口、P2口和P3口。利用其中的3个I/O口,与本系统其它部分连接,分别实现了不同的功能: P1口连接着由10个DS 1820传感器组成一线总线网络,还连接着用于显示单个DS 1820传感器ROM码的接口电路。 P0、P2口连接着LED数字显示单元。P0口连接一片14引脚的反相门芯片7406,用于对6个
12、LED显示灯的选择控制。同时,7406也起到了反向驱动器的作用。P2口连接两片14引脚的7407芯片,用于发送显示内容。同时7407也起到正向驱动器的作用。 2.4.2 DS 1820串行组成的一线总线型网络 最多由10片DS 1820组成的一线总线网络,由三条线连接。它们分别是电源线、数据传输线、共用地线。电源线根据DS1820的要求,使用5V的直流供电。在具体设计上可以和AT89C51使用同一个电压源。数据传输线直接连接在P1口的P1.5引脚上,对应着P1寄存器的P1.5数据位,因此主机对总线上的DS 1820的操作实际上就是对P1.5数据位的操作。所以在程序设计时需要注意这一点。 还有,
13、就是出于对特殊情况的特别考虑,本系统设置了一个插口,用于读出某个DS 1820传感器ROM码。这个插口除了中间的引脚连接在AT89C51的P1.6引脚上,从硬件上说和一线总线网络的接口没有什么不同。但是从软件上来说,它专用于对单个DS 1820的ROM码读取。实际的设计上,作者在数据线上设置了一个切换跳线,当需要系统进行读 ROM码操作时,就将该引脚接上带5K左右上拉电阻的上拉电;需要系统转入正常的温度监测运行时,就将该引脚的数据传输线连至地线。 AT89C51通过对P1.6引脚的读和判断,就可以决定是转入读ROM操作还是运行温度监测。通过一个小小的切换跳线,就可以实现在两种功能之间方便地进行
14、切换。这个跳线以及DS 1820插口都设置在主机的面板上,很便于使用。 2.4.3 LED数字显示及其驱动电路 LED显示器的工作情况有两种:一种是温度显示;另一种是ROM码显示。DS 1820测温范围上限是125,因此温度的十进制显示需要用3位;本系统总线上有10个DS 1820传感器的温度值需要显示,所以要显示系统为每个传感器自动分配的编号,必须设置2位显示;另外考虑到编号和温度的显示值紧挨在一起可能造成混淆,因此在它们之间还增加了分隔的一位。最终选择在这里设置了6位的LED显示。 当显示ROM码时,即使用十六进制显示,也最少需要显示16个十六进制数。因此设计上,只能是让6个LED从低位到
15、高位逐个显示三次,如此才能全部显示完。考虑到人工记录需要时间,所以软件设计上采用无限循环的显示方式。要想中止显示ROM的操作,只要拔下待测的DS 1820,并且将切换跳线跳至测量温度运行模式即可。 本系统使用7406和7407作为电路驱动芯片,主要是考虑简化硬件设计和软件设计。降低系统硬件和软件的复杂程度。便于后期调试,以及为将来可能的功能扩展留有余地。系统还可扩展当LED显示超过最高温度后的控制电路,某个监测点的温度超标时将自动开启风扇降低温度,如温度仍然不能降低到控制的范围内,报警系统将被开启,提醒工作人员予以有效措施加以控制。 2.5系统可行应用分析 由于监测点的数量不确定,系统规模应具
16、有一定的可伸缩性。也就是说总线上的传感器数量是可以在一定范围内随意增减的。不会因为传感器数量的变化影响系统正常运行。 系统必须能够同时监测多个点的温度,因此必须具备地址查询的功能。另外每个DS 1820传感器具有一个ROM码,这为实现地址查询提供了技术上的可能。为了能支持总线上的地址识别,对DS 1820传感器ROM码的事先读取是必要的。因此系统必须具备读取和显示ROM码的功能。 作为多路监测系统,确认多个测量点的实际地理位置是必要的。就是说某个传感器被放置在具体某个地方应该明确。否则,即使系统己经提供了某个线路接点温度不正常的信息,管理人员也无法确认是哪里的接点出现了问题。 在这里解决方案是
17、使用自动排序、双地址方案: 64位的ROM码虽然能确认传感器的唯一性,但直接在传感器的现场识别中使用仍然非常不便。如果主机能够自动为所有挂载在总线上的传感器排序。并且编上方便识别的号码,就可以很好的解决这个问题。但这也要求主机对传感器的排序结果应该具有唯一性,否则可能出现系统因某种原因重启后,双地址排序错误的问题。 DS1820本身具有报警功能,当测量的温度值超出主机所设定的上限值或者下限值时,DS 1820就会向总线发送报警信号,此时正在监听总线的主机将得知报警信息。该功能的设置使我们在系统设计时增加了手段和实现方法。 然而,经过仔细研究,最终认为,使用轮询的方法更为妥当。作为一个报警系统,
18、漏报的问题是要努力克服避免的。当总线上的一个DS 1820出现故障时,即使温度值超标,DS 1820也不会提供报警。而该传感器的故障情况,管理者也是无从得知的。尽管使用轮询的访问方式同样无法克服从机意外故障的问题,但由于轮询定期的访问每个DS 1820传感器,作为管理人员就可以及时知道总线上某个从机出现故障,可以及时处理。这样可以提高系统本身的可靠性,降低了漏报故障发生的机会。 由于我国普遍采用的是摄氏温度计量方法。因此最后的测量结果,也应当直观明确地以人们更为习惯的十进制摄氏温度显示。 3主要元器件介绍 3.1 AT89C51 3.1.1单片机的选择 用微型计算机渗透到测试领域并得到充分发挥
19、,是现代测试技术发展的必然趋势,也是目前作为智能仪表的设计的一般方法,目前市场上的单片机从数据总线宽度上来分主要有8位机、16位机、32位机,其中的32位单片机近年来在信号分析与处理、语音处理、数字图象处理等数字信号处理运用领域得到广泛的运用,但在工业测控现场,占主导地位的还是8位机和16位机,对本课题涉及的多路温度的监测,运用单片机的主要目的是构成一个具有一定判断、运算能力以及具有存储、显示、通信等功能的智能测量仪表,它所处理的信息量和复杂程度由于是温度因而用8位机已经足够了。目前,生产单片机的厂商有很多,尤其是近年来微电子技术、计算机技术的飞速发展,比较著名的有Intel,Philips,
20、Microchip, Motorola,Zilog, Atmel等半导体企业。 由于采用智能化的数字温度传感器省去了A/D转换电路和信号放大电路等外围电路,只需要从一个I/O口引脚引出一条总线就可以连接数个传感器,构成一个多点检测系统。 考虑到一般单片机I/O口的驱动能力,一条总线上能够搭载的传感器数量是有限的,传感器数量过多会导致丢失数据和误码的问题。原则上,一条总线上搭载的传感器数量,应以测试结果为依据。 当检测点很多,超过一条总线的负载能力时,根据需要,还可以考虑从软件和硬件方面进行改进,以期总线上可以搭载更多的传感器。 另外,单片机内必须分配足够的存储器以存储DS 1820的ROM码。
21、由于DS 1820的ROM码非常长(64位),因此将会占据很大的寄存器空间。如果占据的空间太大,就有必要为单片机设计外扩寄存器。 在这里,出于方便开发的考虑,选用了经典的单片机AT89C51。 3.1.2 主要特性 与MCS-51 兼容 4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 全静态工作:0Hz-24Hz 三级程序存储器锁定 128*8位内部RAM 32可编程I/O线 两个16位定时器/计数器 5个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 3.1.3 管脚说明 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向
22、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个TT
23、L门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(
24、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(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FL
25、ASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持
26、低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 3.2 DS1820 3.2.1 一般说明 DS1820 数字温度计提供 9 位温度读数,指示器件的温度。 信息经过单线接口送入 DS1820 或从 DS1820 送出,因此从中央处理器到 DS1820 仅需连接一条线(和地)。读、写和完成温度变换所需的电源
27、可以由数据线本身提供,而不需要外部电源。 因为每一个 DS1820 有唯一的系列号(silicon serial number),因此多个 DS1820 可以存在于同一条单线总线上,这允许在许多不同的地方放置温度灵敏器件,此特性的应用范围包括 HVAC环境控制 建筑物 设备或机械内的温度检测,以及过程监视和控制中的温度检测。 3.2.2 特性 独特的单线接口 只需 1 个接口引脚即可通信 多点 multidrop 能力使分布式温度检测应用得以简化 不需要外部元件 可用数据线供电 不需备份电源 测量范围从-55至+125,增量值为 0.5。等效的华氏温度范围是-67 F至257F 增量值为 0.
28、9 F 以 9 位数字值方式读出温度,在 1 秒(典型值)内把温度变换为数字 用户可定义的,非易失性的温度告警设置 告警搜索命令识别和寻址温度在编定的极限之外的器件(温度告警情况) 应用范围包括恒温控制 工业系统 消费类产品 温度计或任何热敏系统 3.2.3 DS1820的引脚 3.2.4 DS1820引脚说明 引脚 符号 说明 1 GND 地 2 DQ 单线运用的数据输入/输出引脚漏极开路 3 VDD 可选VDD引脚两种供电方式 DS 1820有两种供电方式可供选择,即数据总线供电方式和外部供电方式。采取数据总线供电方式可以节省一根导线,但完成温度测量的时间较长;采取外部供电方式会多用一根用
29、于供电的导线,好处是可以更快地得到温度测量的结果。 3.2.5 DS 1820内部逻辑框图 DS 1820使用两个8字节的RAM存贮9位的温度值,最高位为符号位。下图为DS 1820的温度存储方式,温度为负数时S=1 ,温度为正时,S=0。 3.2.6 DS1820工作过程中的协议 (1)初始化; (2) ROM操作命令; (3)存储器操作命令; (4)处理数据; 3.3 LED数码显示 为了使监测结果显示地更加直观,系统使用6个的10引脚的数码显示管,以及相应的驱动电路组成显示模块。(右图为管脚配置) 3.4 7406/740714引脚的反相门芯片7406,起到了反向驱动器的作用。14引脚的
30、7407芯片,起到正向驱动器的作用。 4一线总线技术 4.1一线总线(1-Wire Bus)技术简介 美国达拉斯半导体公司(DALLAS SEMICONDUCTOR)推出的一线总线(1-Wire Bus)技术,采用一单根信号线,既传输时钟,又传输数据,而且数据传输是双向的,其具有线路简单,减少硬件开销,成本低廉,软件设计方便,便于总线的扩展和维护等优点,因此具有无可比拟的优势。 一线总线适用于单个主机系统,能够控制一个或多个从机设备。主机可以是微控制器,从机则是一线总线器件。它们之间的数据交换只通过一条信号线。当只有一个从机设备时,系统可按单节点系统操作;当有多个从机设备时,则系统按多节点系统
31、操作。 4.2一线总线工作原理 顾名思义,一线总线只有一根数据线,系统中的数据交换、控制都在这根线上完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,这样允许设备不发送数据时释放总线,以便其他设备使用。其内部等效电路如下图所示。 一线总线要求外接一个约4.7k 欧的上拉电阻,这样,当总线闲置时,其状态为高电平。主机和从机之间的通信总体上说是通过以下3个步骤完成的:初始化1-wire器件;识别1-wire器件;交换数据。由于二者是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问1-wire器件都必须严格遵循一线总线命令序列:初始化、ROM命令、功能命令。如果出现顺序混乱,1
32、-wire器件就不会响应主机(搜索ROM命令,报警搜索命令除外)。通信信号方式要求所有的一线总线器件要求遵循严格的通信协议,以保证数据的完整性。 4.3一线总线协议简介 一线总线系统网络的主机和从机之间,遵循一线总线协议进行通信。 目前大多数传感器系统是采用放大、传输、数模变换这种处理模式。这种模式中传输的方式采用并口或采用串口,这两种方式一般要占用数根数据/控制线,限制了单片机使用功能的扩展。 一线总线协议就解决了这种问题。数字式传感器的核心之一就是采用什么协议能最大限度的高速安全的传输数据,另外就是如何更好的节省硬件资源。一线总线协议通过一根总线实现主设备对从设备的控制(主设备往往是微控器
33、等),一线总线器件在采用这种工作方式时就充当着从设备的作用。由于只有一根线,并且没有译码功能,所以这些器件是一线总线系统唯一的从设备,所有的数据和命令都在这根总线上传送,数据和命令字节传送顺序是从低位到高位。 为了使其它的设备也能使用这根线,一线总线协议通过一个三态门转换传输状态,使得每一个设备在不传送数据时空出该数据线给其它设备。因为一线总线在外部有一个上拉电阻,所以在总线空闲时是高电平。为保证信号的完整性,一线总线协议定义了以下几种信号:复位脉冲、存在脉冲、读写0或1。除存在脉冲外,其它的信号均由主设备发出。 如上图所示,RX和TX分别是内部数据的发送和接收端,外界的环境量变化引起敏感膜的
34、变化,产生的电信号被编码成数字量,存储在专用寄存器当中,经由DQ端读入到单片机当中。 主设备给低电平并保持480 u s就空出总线并进入接收模式RX。此时上拉电阻器使总线为高电平,即空闲状态。一旦一线总线器件检测到这一上升沿,就会等待1560us,并给出存在脉冲使总线保持60240u s的低电平。而写操作均在读、写时隙之间进行,在每个时隙中,系统只传送一个二进制位。 1-Wire协议定义的几种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1时序,组成了所有总线上传输的信号。也就是说,所有的一线总线命令序列(初始化、ROM命令、功能命令)都是由这些基本的信号类型组成的。这些信号,除了应答脉冲
35、外,都是由主机发出,并且发送的所有命令和数据都是字节的低位在前。另外,初始化时序同时包括主机发出的复位脉冲和从机发出的应答脉冲。主机通过拉低一线总线至少480 u s,以产生TX复位脉冲;然后主机释放总线,并进入RX接收模式。当主机释放总线时,总线由低电平跳变为高电平时产生一个上升沿,一线总线器件检测到这上升沿后,延时1560 u s,接着一线总线器件通过拉低总线60240 u s,以产生应答脉冲。主机接收到从机应答脉冲后,说明有一线总线器件在线,然后主机就可以开始对从机进行ROM命令和功能命令操作。 综上所述,在一线总线上进行数据传输时,一线总线器件和主机之间必须遵循严格的读时序和写1、写0
36、时序。在每一个时序中,总线只能传输一位数据。所有的读、写时序至少需要60 u s,且每两个独立的时序之间至少需要1 u s的恢复时间。读、写时序均起始于主机拉低总线。在写时序中,主机拉低总线后,在15 u s之内释放总线,向一线总线器件写1;若主机拉低总线后,保持至少60 u s的低电平,则向一线总线器件写0。一线总线器件仅在主机发出读时序时才向主机传输数据,所以,当主机向一线总线器件发出读数据命令后,必须马上产生读时序,以便一线总线器件能传输数据。在主机发出读时序之后,一线总线器件才开始在总线上发送0或1,若一线总线器件发送1,则保持总线高电平,若发送0,则拉低总线。一线总线器件发送数据之后
37、,保持有效时间15 u s,因而,主机在读时序期间必须释放总线,并且必须在15 u s之内采样,从而接收到从机发送的一位数据。 5系统软件设计 5.1 系统程序设计总框图 系统所有的代码都是用汇编语言编写。如上图所示,为系统总的软件设计逻辑框图,说明所编写软件的实际运行逻辑过程。下面结合本系统的硬件结构,以文字详细说明本系统软件的算法。 5.2 软件算法说明算法步骤: 1、AT89C51监测P1.6引脚电平,为高电平进入步骤2,为低电平进入步骤6; 2、AT89C51向P1.6发送复位脉冲后释放总线,DS 1820发响应存在脉冲,如无存在脉冲响应,返回步骤1,否则执行下一步; 3、AT89C5
38、1向DS 1820发送READ ROM命令,AT89C51等待监听P1.6口; 4、DS 1820向AT89C51发送64位ROM码,AT89C51将收到的ROM码存入数据暂存存储器; 5、AT89C51将ROM码逐一显示,16个十六进制码全部显示完后,回到步骤1; 6、AT89C51向P1.5引脚发送复位脉冲后释放总线,所有总线上DS1820发响应存在脉冲,如无存在脉冲,循环执行本步骤,否则进入下一步骤; 7、AT89C51接收到DS 1820应答,向总线发送SEARCH ROM命令,进入二叉树查询子程序(该二叉树查询算法及其子程序的软件编写非常复杂)。查询总线上所有的DS 1820以及它们
39、的ROM码,并将ROM码记录入数据暂存存储器; 8、AT89C51向总线发送复位脉冲后释放总线,然后向总线发送SKIP ROM命令并释放总线,所有总线上的DS 1820进入等待监听状态; 9、AT89C51向总线发送CONVERT T命令并延时12秒钟,所有的DS 1820进行温度转换,并将结果存入存储器; 10、AT89C51向总线发送复位脉冲,收到响应存在脉冲后,向总线发送MATCH ROM命令; 11、 AT89C51向总线发送1个ROM编码,符合该ROM码的DS 1820继续响应,其余的DS 1820停止响应; 12、AT89C51向总线发送READ SCRATCHPAD命令并释放总线
40、; 13、DS 1820向总线发送存储器里存放的温度转换结果; 14、AT89C51将接收到的结果转换成十进制,并通过LED数字显示管显示出来; 15、系统是否已经完成所有的DS 1820温度读取,如未完成,程序返回至步骤10进入下一个传感器的温度读取。如已经完成,则返回至步骤8。 说明: 当系统进入温度监测运行之后,是无法再进入读ROM操作的。如果此时用户想测定某个DS 1820的值,就需要将切换跳线切换至读ROM操作模式。 系统每次重启进入温度监测运行模式之后,都要重新搜索总线上DS 1820的ROM码。所以,如果在系统重启之前改变总线上的DS 1820 ,那么系统就会重新为DS 1820
41、排序和编号。用户在每次重启的时候都需要注意这个问题。要看看总线上的DS 1820是否有变动。如果有变动,就必须重新为这些DS 1820的编号做记录。 反过来说,如果系统总线上的DS 1820发生变动,就必须重启系统。重新搜索、排序DS 1820的ROM码,以保证DS 1820的编号的正确性。 5.3 一线总线协议的软件实现 一线总线协议实现的基础是三种I/O操作,分别是总线复位脉冲、读时序和写时序。与之直接相关的子程序分别是:总线复位子程序;总线读8位数据位子程序;总线写8位数据位子程序。在读、写8位数据位的子程序中,涉及了读/写“0”时序和读/写“1”时序的汇编语言实现。下面就是用汇编语言编
42、写的三个子程序的源代码及其说明,晶振频率12M:初始化DS 1820的子程序: INIT: L0:MOV P1,#OOH MOV R2,#5 L1:MOV R1,#125 ;总线为低复位电平 L2:DJNZ R 1,L2 DJNZ R2,L 1 ;总线复位电平保持125X5=625 u s MOV P1,#OFFH ;释放DS 1820总线 MOV R2,#63 L3:DJNZ R2,L3 ;释放DS 1820总线等待63 u s MOV R3,#41 ;监测存在脉冲41 X 10 u s L4:MOV C,P1.5 JNC L6 ;监测到存在脉冲,跳转至延时420 u s DEC R3 MO
43、V A,R3 JZ L5 ;接收到存在脉冲吗?不存在重新来 SJMP L4 ;继续监测存在脉冲 L5:SJMP L0 L6:MOV R1,#3 ;延时630 u s L7:MOV R6,#210 L8:DJNZ R6,L8 DJNZ R1,L7 MOV P1,#OFFH ;初始化完成释放总线 RET ;退出初始化子程序 主机写时序时的子程序: 注:取A寄存器内的8位数据,写入总线 WRITE: MOV R3,#8 ;写入DS 1820的bit数,一个字节8个bit WRl:RRC A ;把一个字节分成8个bit环移给C CLR P1.5 ;主机开始传输数据,总线要处于低电平状态 MOV R4,
44、#10 ;总线保持低电位l0 u s WR2:DJNZ R4,WR2 JC WR5 ;对当前数据位进行判断,是写0还是写1 CLR P1.5 ;writer0 MOV R2,#50 ;writer 0延时55 p s,由DS1820取样 WR3:DJNZ R2,WR3 MOV P1,#OFFH ;总线释放101, s MOV R5,#10 WR4:DJNZ R5,WR4 DJNZ R3,WR1 ;泻入下一个bit SJMP WR7 ;全写完转入退出 WR5:SETB P1.5 ;writer 1 ,DS1820总线释放 MOV R2,#55 WR6:DJNZ R2,WR6 ;等待551, s,
45、DS 1820取样 DJNZ R3,WR 1 ;写入下一个bit WR7:MOV P1,#OFFH MOV R5,#5 WR8:DJNZ R5,WR8 RET ;退出WRITE子程序 主机读时序时的子程序: 注:一读总线上传输的8位数据,结果存入A寄存器 READ: MOV R6,#8 ;连续读8个bit RE1:CLR P1.5 ;读前总线保持为低 MOV R4,#5 RE2:DJNZ R4,RE2 ;持续5 u s低电平 MOV P1,#OFFH ;总线释放7 u s MOV R2,#5 RE4:DJNZ R2,RE4 MOV C,P 1.5 ;从DS 1820总线读得一个bit RRC A ;把读得的位值环移给A MOV R5,#55 RE3:DJNZ R5,RE3 ;持续55 u s MOV P1,#OFFH ;重新释放DS 1820总线 MOV R4,#5 RE5:DJNZ R4,RE5 ;恢复5 u s DJNZ R6,RE1 ;读下一个bit RET ;退出READ子程序 上述的三个子程序全部都是系统工作在温度监测模式下的子程序,如果系统处在读单一DS 1820的R