基于单片机的DS18B20温度传感器测温系统设计毕业设计.doc
-
资源ID:42288106
资源大小:770KB
全文页数:48页
- 资源格式: DOC
下载积分:9金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于单片机的DS18B20温度传感器测温系统设计毕业设计.doc
基于单片机的DS18B20温度传感器测温系统设计毕业设计目录摘要IAbstractII第一章 绪论11.1 课题背景11.2 本课题研究意义21.3 本课题的任务21.4 系统整体目标3第二章方案论证比较与选择32.1 引言32.2 方案设计32.3 方案的比较与选择4第三章硬件设计43.1 STC89C52单片机简介43.2 DS18B20介绍83.3 系统电路设计163.4 显示电路设计173.5 按键电路设计173.6 三点测温电路18第四章软件设计184.1 软件开发工具的选择184.2 系统软件设计的一般原则194.3 系统软件设计的一般步骤204.4 三路测温软件实现20第五章误差分析255.1 误差产生255.2 降低误差方法255.3 挂接DS18B20个数论证26第六章调试与小结26致谢28参考文献29附录3047 / 48第一章 绪论1.1 课题背景在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。自18世纪工业革命以来,工业发展对是否能掌握温度有着绝对的联系。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。温度对于工业如此重要,由此推进了温度传感器的发展。传感器主要大体经过了三个发展阶段:模拟集成温度传感器。该传感器是采用硅半导体集成工艺制成,因此亦称硅传感器或单片集成温度传感器。此种传感器具有功能单一(仅测量温度)、测温误差小、价格低、响应速度快、传输距离远、体积小、微功耗等,适合远距离测温、控温,不需要进行非线性校准,外围电路简单。它是目前在国外应用最为普遍的一种集成传感器,典型产品有AD590、AD592、TMP17、LM135等;模拟集成温度控制器。模拟集成温度控制器主要包括温控开关、可编程温度控制器,典型产品有LM56、AD22105和MAX6509。某些增强型集成温度控制器(例如TC652/653)中还包含了A/D转换器以与固化好的程序,这与智能温度传感器有某些相似之处。但它自成系统,工作时并不受微处理器的控制,这是二者的主要区别;智能温度传感器。能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的。它是微电子技术、计算机技术和自动测试技术(ATE)的结晶。智能温度传感器部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。智能温度传感器的特点是能输出温度数据与相关的温度控制量,适配各种微控制器(MCU);并且它是在硬件的基础上通过软件来实现测试功能的,其智能化程度也取决于软件的开发水平。温度传感器的发展趋势。进入21世纪后,温度传感器正朝着高精度、多功能、总线标准化、高可靠性与安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。传感器在温度测控系统中的应用。目前市场主要存在单点和多点两种温度测量仪表。对于单点温测仪表,主要采用传统的模拟集成温度传感器,其中又以热电阻、热电偶等传感器的测量精度高,测量围大,而得到了普遍的应用。此种产品测温围大都在-800之间,分辨率12位,最小分辨温度在0.0010.01之间。自带LED显示模块,显示4位到16位不等。有的仪表还具有存储功能,可存储几百到几千组数据。该类仪表可很好的满足单个用户单点测量的需要。多点温度测量仪表,相对与单点的测量精度有一定的差距,虽然实现了多路温度的测控,但价格昂贵。针对目前市场的现状,本课题提出了一种可满足要求、可扩展的并且性价比高的单片机多路测温系统。1.2本课题研究意义随着科学技术的不断进步与发展,温度控制在工业控制、电子测温计、医疗仪器、家用电器等各种温度控制系统中广泛应用,且由过去的单点测量向多测量发展。目前温度传感器有模拟和数字两类传感器,为了克服模拟传感器与微处理器接口时需要信号调理电路和AD转换器的弊端,大多数多点测温控制系统采用数字传感器,并大大方便了系统的设计。比较有代表性的数字温度传感器有DS18B20、MAX6575、DS1722、MAX6635、SMT160-30等。在传统的温度测量系统设计中,往往采用模拟技术进行设计,这样就不可避免地遇到诸如引线误差补偿、多点测量中的切换误差和信号调理电路的误差等问题;而其中某一环节处理不当,就可能造成整个系统性能的下降。随着现代科学技术的飞速发展,特别是大规模集成电路设计技术的发展,微型化、集成化、数字化正成为传感器发展的一个重要方向。美国Dallas半导体公司推出的数字温度传感器DS18B20,具有独特的单总线接口,仅需要占用一个通用I/0端口即可完成与微处理器的通信;在-10+85温度围具有05精度;用户可编程设定912位的分辨率。以上特性使得DS18B20非常适用于构建高精度、多点温度测量系统。1.3本课题的任务本课题主要是实现对温度进行多点同时测量并准确显示。整个系统由单片机控制,要能够接收DS18B20温度传感器的数据并显示出来,可以从键盘输入命令,系统根据命令,选择对应的传感器,并由LCD1602进行温度实时显示。设计一种合理、可行的单片机监控软件,完成多点测量和显示的任务,并编写硬件底层驱动程序。1.4系统整体目标利用STC89C52单片机设计一个能够对不同环境多点温度同时进行测量的系统。该系统能够同时对多个点的温度进行测量采集,通过LCD1602进行实时显示。第二章方案论证比较与选择2.1 引言温度测量的方案有很多种,可以采用传统的分立式传感器、模拟集成传感器以与新兴的智能型传感器。对于控制系统可以采用计算机、单片机等。2.2方案设计2.2.1方案一方案一DS18B20一对一连接方案,就是一个I/O口连接一个DS18B20,这种方案虽然占用单片机的三个I/O口,但采用这种方案大大的简化了编程难度,缩短了设计周期,同时也能保证系统的稳定,方案一的框图如图2.1所示。STC89C52单片机DS18B20DS18B20键盘选择DS18B20LCD1602图2-1DS18B20多I/O口连接方案2.2.2设计方案二方案二DS18B20单线连接方案,就是三个DS18B20连接到单片机的一个I/0口上,这种方案只用到单片机的一个I/O口,大大的节约了单片机I/O口资源。缺点是在时序上比较复杂,DS18B20的编程增加了读ROM程序,搜索ROM和匹配ROM程序。方案二的框图如图2.2所示。STC89C52单片机DS18B20DS18B20LCD1602液晶显示键盘选择DS18B20图2.2 DS18B20单线连接方案2.3 方案的比较与选择方案一是把DS18B20的三个DQ端分别接到单片机的三个不同的I/O口,这种接法虽然占用的I/O口比较多,但是它的时序比较简单,不需要读取ROM序列号程序,搜索ROM序列号程序,匹配ROM序列号程序,软件上简化了很多。方案二是四DS18B20D的四个DQ端接到单片机的一个I/O口。这种接法在硬件上节省了三个I/O口,在硬件上简化了不少。但是在软件上时序就增加了难度,需要添加读ROM序列号程序,搜索ROM序列号程序,匹配ROM序列号程序。本设计由于功能比较简单I/O口资源丰富,同时时间比较紧,所以通过两个方案的比较,决定选用方案一。第三章 硬件设计3.1 STC89C52单片机简介STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。1.时钟电路STC89C52部有一个用于构成振荡器的高增益反相放大器,引脚RXD和TXD分别是此放大器的输入端和输出端。时钟可以由部方式产生或外部方式产生。部方式的时钟电路如图3.1(a) 所示,在RXD和TXD引脚上外接定时元件,部振荡器就产生自激振荡。定时元件通常采用石英晶体和电容组成的并联谐振回路。晶体振荡频率可以在1.212MHz之间选择,电容值在530pF之间选择,电容值的大小可对频率起微调的作用。外部方式的时钟电路如图3.1(b)所示,RXD接地,TXD接外部振荡器。对外部振荡信号无特殊要求,只要求保证脉冲宽度,一般采用频率低于12MHz的方波信号。片时钟发生器把振荡频率两分频,产生一个两相时钟P1和P2,供单片机使用。(a)部方式时钟电路(b)外部方式时钟电路图3.1时钟电路2.复位与复位电路(1)复位操作复位是单片机的初始化操作。其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。除PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表一所示。表一 寄存器的复位状态寄存器复位状态寄存器复位状态PC0000HTCON00HACC00HTL000HPSW00HTH000HSP07HTL100HDPTR0000HTH100HP0-P3FFHSCON00H(2)复位信号与其产生RST引脚是复位信号的输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期(即二个机器周期)以上。若使用颇率为6MHz的晶振,则复位信号持续时间应超过4us才能完成复位操作。产生复位信号的电路逻辑如图3.2所示:图3.2复位信号的电路逻辑图整个复位电路包括芯片、外两部分。外部电路产生的复位信号(RST)送至施密特触发器,再由片复位电路在每个机器周期的S5P2时刻对施密特触发器的输出进行采样,然后才得到部复位操作所需要的信号。复位操作有上电自动复位相按键手动复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的,其电路如图3.4(a)所示。这佯,只要电源Vcc的上升时间不超过1ms,就可以实现自动上电复位,即接通电源就成了系统的复位初始化。按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,其电路如图3.4(b)所示;而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的,其电路如图3.3(c)所示:(a)上电复位 (b)按键电平复位(c)按键脉冲复位图3.3复位电路上述电路图中的电阻、电容参数适用于6MHz晶振,能保证复位信号高电平持续时间大于2个机器周期。本系统的复位电路采用图3.3(c)按键脉冲复位方式。STC89C52具体介绍如下:主电源引脚(2根)VCC(Pin40):电源输入,接5V电源GND(Pin20):接地线外接晶振引脚(2根)XTAL1(Pin19):片振荡电路的输入端XTAL2(Pin20):片振荡电路的输出端控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的外部选通,接低电平从外部程序存储器读指令,如果接高电平则从部程序存储器读指令。可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。P0口(Pin39Pin32):8位双向I/O口线,名称为P0.0P0.7P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7 P2口(Pin21Pin28):8位准双向I/O口线,名称为P2.0P2.7 P3口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.7STC89C52主要功能如表二所示。表二 STC89C52主要功能主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能3.2DS18B20介绍3.2.1 温度传感器DS18B20DS18B20是美国DSLLAS半导体公司推出的第一篇支持“一线总线”接口的温度传感器,它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串型数字信号供处理器处理。1.DS18B20温度传感器特性1) 适应电压围宽,电压围在3.05.5V,在寄生电源方式下可有数据线供电。2) 独特的单线接口方式,它与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通信。3) 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温。4) 在使用中不需要任何外围元件,全部传感器元件与转换电路集成在形如一只三极管的集成电路。5) 测温围-55+125,在-10+85时精度为±0.5。6) 可编程分辨率为912位,对应的可分辨率温度分别为0.5,0.25,0.125和0.0625,可实现高精度测温。7) 在9位分辨率时,最多在93.78ms把温度转换为数字;12位分辨率时,最多在750ms把温度转换为数字,显示速度快。8) 测量结果直接输出数字温度信号,以“一线总线”串行送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。9) 负压特性。电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。2.应用围1) 冷冻库、粮仓、储罐、电信机房、电力机房、电缆线槽等测温和控制领域。2) 轴瓦、缸体、纺织、空调等狭小空间工业设备测温和控制。3) 汽车空调、冰箱、冷柜以与中低纬度干燥箱等。4) 供热、制冷管道热量计量、中央空调分户热能计量等。1.引脚介绍DS18B20实物如图3.5所示。图3.5实物图DS18B20有两种封装:三角TO-92直插式(用的最多、最普遍的封装)和八角SOIC贴片式,封装引脚见图3.6。表3.2.1列出了DS18B20的引脚定义。(a)DS18B20 To-92(b)DS18B20八角SOIC图3.6 DS18B20引脚封装图引脚定义GND电源负极DQ信号输入输出VDD电源正极NC空表3.2.1 DS18B20引脚定义2.硬件连接DS18B20寄生电源供电方式如下面图3.7(a)所示,在寄生电源供电方式下,DS18B20从单线信号线上汲取能量:在信号线DQ处于高电平期间把能量储存在部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。独特的寄生电源方式有三个好处:1) 进行远距离测温时,无需本地电源2) 可以在没有常规电源的条件下读取ROM3) 电路更加简洁,仅用一根I/O口实现测温要想使DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个DS18B20在温度转换期间工作电流达到1mA,当几个温度传感器挂在同一根I/O线上进行多点测温时,只靠4.7K上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。因此,该电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降低,会使温度误差变大。DS18B20寄生电源强上拉供电方式 改进的寄生电源供电方式如下面图3.7(b)所示,为了使DS18B20在动态转换周期中获得足够的电流供应,当进行温度转换或拷贝到E2存储器操作时,用MOSFET把I/O线直接拉到VCC就可提供足够的电流,在发出任何涉与到拷贝到E2存储器或启动温度转换的指令后,必须在最多10S把I/O线转换到强上拉状态。在强上拉方式下可以解决电流供应不足的问题,因此也适合于多点测温应用,缺点就是要多占用一根I/O口线进行强上拉切换。DS18B20的外部电源供电方式 如下面图3.7(c)所示,在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,其VDD端用35.5V电源供电,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。注意:在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85。 (a) 外部电源供电方式 (c)寄生电源供电方式(b)寄生电源强上拉供电方式图 3.73.工作原理硬件电路连接好以后,单片机需要怎么样工作才能将DS18B20中的温度数据读取出来呢?下面将给出详细分析。首先我们来看控制DS18B20的指令:1) 33H读ROM。读DS18B20温度传感器ROM的编码(即64位地址)。2) 55H匹配ROM。发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18B20并使之作出响应,为下一步对该DS18B20的读/写做准备。3) F0H搜索ROM。用于确定挂接在同一总线上DS18B20的个数,识别64位ROM地址,为操作个器件做好准备。4) CCH跳过ROM。忽略64为ROM地址,直接向18B20发温度转换命令,适用于一个从机工作。5) ECH告警搜索命令。执行后只有温度超过设定值上限或下限的芯片才做出响应。以上这些指令设计的存储器是64位光刻ROM,表3.2.2列出了它的含义。表3.2.2 64位光刻ROM各位定义64位光刻ROM中的序列号是出厂前被光刻好的,它可以看做该DS18B20的地址序列码。其各位排列顺序是:开始8位为产品类型标号,接下来48位是该DS18B20自身的序列号,最后8位是前面56位的CRC循环冗余校验码(CR=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一条总线上挂接多个DS18B20的目的。下面介绍以上几条指令的用法。当主机需要对众多在线DS18B20中的某一个进行操作时,首先应将主机逐个与DS18B20挂接,读出其序列号;然后再将所有的DS18B20挂接到总线上,单片机发出匹配ROM命令(55H),紧接着主机提供的64位序列(包括DS18B20的48位序列号)之后的操作就是针对该DS18B20的。如果主机只对一个DS18B20进行操作,就不需要读取ROM编码以与匹配ROM编码了,只要用跳过ROM(CCH)命令,就可以进行如下温度转换和读取操作。1) 44H温度转换。启动DS18B20进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入部9字节的RAM中。2) BEH读暂存器。读部RAM中9字节的温度数据。3) 4EH写暂存器。发出向部RAM的2、3字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。4) 48H复制暂存器。将RAM中第2,3字节的容复制到E2ROM中。5) B8H重调E2ROM中容回复到RAM中的第3,4字节。6) B4H读供电方式。读DS18B20的供电模式。寄生供电时,DS18B20发送0;外接电源供电时,DS18B20发送1。以上这些指令涉与的存储器为高速暂存器RAM和可电擦出E2ROM,见表3.2.3。表3.2.3 高速暂存器RAM寄存器容字节地址温度值低位(LSB)0温度值高位(MSB)1高温限值(TH)2低温限值(LT)3配置寄存器4保留5保留6保留7CRC校验值8高速暂存器RAM由9个字节的存储器组成。第01字节是温度的显示位;第2和第3个字节是复制的TH和TL,同时第2和第3个字节的数字可以更新;第4个字节是配置寄存器,同时第4个字节的数字可以更新;第5,6,7三个字节的保留的。可电擦出E2ROM又包括温度触发器TH和TL,以与一个配置寄存器。表3.2.4列出了温度数据在高速暂存器RAM的第0和第1个字节中的存储格式。表3.2.4 温度数据存储格式DS18B20在出厂时默认配置为12位,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读2字节共16位,读完后将低11位的二进制数转化为十进制数后再乘以0.0625便为所测的实际温度值。另外,还需要判断温度的正负。前5个数字为符号位,这5位同时变化,我们只需要判断11位就可以了。前5位为1时,读取的温度为负值,且测到的数值需要取反加1再乘以0.0625才可得到实际温度值。前5位为0时,读取的温度为正值,且温度为正值时,只要将测得的数值乘以0.0625即可得到实际温度值。4.工作时序图初始化时序如图3.8图3.8 初始化时序1) 先将数据线置高电平1。2) 延时(该时间要求不是很严格,但是要尽可能短一点)。3) 数据线拉到低电平0。4) 延时750us(该时间围可以在480us960us)。5) 数据线拉到高电平1。6) 延时等待。如果初始化成功则在1560us产生一个有DS18B20返回的低电平0,据该状态可以确定它的存在。但是应注意,不能无限地等待,不然会使程序进入死循环,所以要进行超时判断。7) 若CPU读到数据线上的低电平0后,还要进行延时,其延时的时间从发出高电平算起(第5)步的时间算起)最少要480us。8) 将数据线再次拉到高电平1后完毕。DS18B20写数据时序图如图3.9图3.9 写数据时序图1) 数据线先置低电平0。2) 延时确定的时间为15us。3) 按从低位到高位的顺序发送数据(一次只发送一位)。4) 延时时间为45us。5) 将数据线拉高到高电平1。6) 重复1)5)步骤,直到发送完整个字节。7) 最后将数据线拉高到1。DS18B20读数据时序图如图3.10图3.10 读数据时序图1) 将数据线拉高到1。2) 延时2us。3) 将数据线拉低到0。4) 延时6us。5) 将数据线拉高到1。6) 延时4us。7) 读数据线的状态位,并进行数据处理。8) 延时30us。9) 重复1)7)步骤,直到读取完一个字节。3.3 系统电路设计单片机最小系统如图如图3.11所示图3.11 系统电路图这部分为单片机复位电路和时钟电路。单片机复位后,程序计数器PC=0000H,即指向程序存储器0000H单元,使CPU从首地址重新开始执行程序。产生单片机复位的条件是:在RST引脚端出现满足复位时间要求的高电平状态,该时间等于系统时钟震荡周期建立时间再加2个机器周期时间(一般不小于10ms)。时钟电路通过单片机的XTAL1和XTAL2引脚外接定时元件12M的晶振,电容C1和C2一般去30pF左右,主要作用是帮助振荡器起震。晶体振荡频率高,则系统的时钟频率也越高,单片机运行速速也就越快。3.4 显示电路设计LCD1602显示电路原理图如图3.12所示图3.12 LCD1602显示电路此部分为LCD1602显示电路,通过10K可调电阻可以调节1602背光显示亮度。P0口接一个10K的上拉排阻。3.5 按键电路设计四个独立按键电路图如图3.13所示图3.13 按键电路每个独立按键接一个I/O口构成独立按键,前三个按键S4S6分别三个DS18B20,S7按下时为全三个DS18B20温度全显示。3.6 三点测温电路三个DS18B20接线如图3.14所示,每个传感器接一个I/O口。图3.14 DS18B20接口电路单总线型DS18B20温度传感器采用一个DS18B20接一个I/O口的形式,大大简化了程序编写难度,通过排针可外接电源供电。第四章 软件设计4.1 软件开发工具的选择要使单片机系统按照人的意图办事,需设法让人与计算机对话,并听从人的指挥。程序设计语言是实现人机交换信息的最基本工具,可分为机器语言、汇编语言和高级语言。机器语言用二进制编码表示每一条指令,是计算机能直接识别和执行的语言。用机器语言编写的程序成为机器语言程序或者指令程序(机器码程序)。因为机器只能识别和执行这种机器码程序,所以又称它为目标程序。用机器语言编写程序不易记忆、不易查错、不易修改。为了克服机器语言的上述缺点,可采用有一定含义的符号,即指令助记符来表示,一般都采用某些有关的英文单词的缩写。这样就出现了另一种程序语言汇编语言。汇编语言是用助记符、符号和数字等来表示指令的程序语言,容易理解和记忆,它与机器语言指令是一一对应的。汇编语言不像高级语言(如BASIC)那样通用型强,而是属于某种计算机所独有,与计算机的部硬件结构密切相关。用汇编语言编写的程序称为汇编语言程序。以上两种语言都是低级语言。尽管汇编语言有不少优点,但它仍存在着机器语言的某些缺陷:与CPU的硬件结构密切相关,不同的CPU其汇编语言是不同的。这使得汇编语言程序不能移植,使用不便;其次,要使用汇编语言进行程序设计必须了解所使用CPU硬件的结构与性能,对程序设计人员有较高的要求。为此,又出现了对单片机进行编程的高级语言,如PLM,C等。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能表达高级语言的优势。经分析综合得知,本课题采用C语言进行编程。4.2 系统软件设计的一般原则 单片机应用软件系统设计包括功能模块划分、程序流程确立、模块接口设计以与程序代码编写。我们依据系统的功能要求,将整体软件系统分割成若干个独立的程序模块。这些程序模块可以是几条语句的集合、功能函数或程序文件。随后,根据个程序模块的实现功能写出流程,一般需要写出具体的实现功能描述。程序代码通常采用汇编语言或高级语言(C语言)编写。本课题采用C语言编程,在此必须注意以下问题:(1)提高程序代码效率必须熟悉当前使用的C语言编译器,试验每条C语言编译以后对应的汇编语言的语句行数,这样就可以很明确的知道代码效率。(2)减少程序错误我们在编写程序时,要注重考虑如下方面。1物理参数 2资源参数 3应用参数 4过程参数(3)单片机的抗干扰性防止干扰最有效的方法是去除干扰源、隔离干扰路径。单片机干扰最常见的现象就是复位,导致程序运行异常。设计系统是一般需要添加一个“看门狗”监控模块,在系统出现不可逆转的干扰时,监控模块将重启系统,并从断点处继续执行。(4)系统的可靠性1要测试单片机软件功能的完善性。2上电、掉电测试。3系统耗损测试。4.3 系统软件设计的一般步骤系统进行软件设计时,先要对本课题硬件有一个熟练的掌握,知道系统的组成,数据的传输,信号是如何被控制的,以与信号的显示。然后进行软件设计时,先搞清楚各个部分的子程序与他们的流程图,然后进行各子程序的编写,最后通过主函数把各子程序连接起来实现设计。4.4三路测温软件实现系统软件设计主要包括系统程序和流程图,根据整个系统的要求,完成温度的测量与控制必须经过以下几个步骤:单片机承受传感器的温度信号,并通过MAX7219驱动显示出来,单片机扫描键盘,承受控制信号,并将温度显示出来,若温度不在围则发出报警。系统主程序流程图如图4.1开始系统初始化测温程序初始化如果按键一按下如果按键二按下如果按键三按下如果按键四按下调用读温度1子程序调用读温度2子程序调用读温度3子程序调用读温度1.2.3路子程序显示1路温度显示2路温度显示3路温度显示全部温度返回返回返回返回图4.1 主程序流程图4.4.1初始化子程序DS18B20初始化程序严格按照DS18B20的时序来编写,微处理器开始发送一个复位脉冲(在480us960us之间),接着数据线释放拉到高电平1,如图4.2所示。图4.2初始化子程序流程图4.4.2 温度转换由三片DS18B20是串接在不同的I/O,读取温度的子是程序独立分开,但工作原理一样。以单个为例,首先调用DS18B20初始化子程序对它进行初始化,然后发跳过匹配ROM命令,接着发温度转换命令完成温度转换,该命令主要是完成温度的A/D转换,读取温度程序是在转换完毕后才能读取当前温度值。其它两片工作原理一样。工作流程图如图4.3。图4.3 温度转换流程图4.4.3 DS18B20写子程序当主机把数据线从高逻辑电平拉低至逻辑电平时产生写时间片,有两种类型的写时间片,写1时间片和写0时间片,所有时间片必须有最短为60微妙的持续期。在各写周期之间必须有最短为1us的恢复时间。在I/O口线高电平变为低电平后DS18B20在15us到60us之间对I/O采样,如果是高电平则写1,低电平写0。流程图如图4.5所示。数据线DQ拉低从低位到高位发送数据一个字节发送完成?完毕开始图4.5 写子程序流程图4.4.4DS18B20读子程序从DS18B20读数据时单片机产生读时间片,当主机把数据线从逻辑高电平拉到低电平时产生读时间片,数据线必须保持在逻辑电平至少1微妙,来自DS18B20的输出数据在读时间段下降沿之后15微妙有效,因此为了读出从读时间段开始算起15微妙的状态单片机必须停止把I/O引脚驱动拉低至低电平,在读时间段完毕时I/O引脚经过外部的上拉电阻拉回至高电平,所有读时间段的最短持续周期限为60微妙,各个读时间片之间必须有最短为1微妙的恢复时间,把主机采样时间定在15微妙期间的末尾系统时序关系就有最大的余地。单片机从DS18B20中读取数据是一位一位的读的,没读完一位的数据到单片机的特定单元A,A左移一次与B向或,直至DS18B20的数据全部移到B中,到此单片机就对DS18B20完成了读字节操作。读数据流程图如图4.6所示。开始设置i=8循环八次调用读DS18B20dat右移8位与a按位或(把8位的b和a合并送给两字节的Tvalue)完毕图4.6 读子程序流程图4.4.5按键处理子程序这一模块子程序定义了四个按键标志量,当检测到对应的按键被按下时,标志量1被程序置1,在主程序中,根据标志量的状态转向不同的处理子程序。按键程序框图如图4.7。开始标志量flag1,flag2,flag3,flag4全为0按键一按下?Flag1=1按键二按下Flag2=1按键三按下按键四按下Flag3=1Flag4=1完毕图4.7 按键处理子程序流程图第五章 误差分析5.1 误差产生当采用寄生电源的工作方式时(电源从IO口上获得),如果温度高于100,则将产生很大的误差,因为此时器件中较大的漏电流会使总线不能可靠检测高低电平,从而导致数据传输误码率的增大。DS18B20工作电压围为3.0 V至5.5 V 无需备用电源,测量温度围为-55至+125,华氏相当于是-67到257华氏度 -10 至+85。在此围精度为±0.5。在远距离有线测温传输过程中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误使得温度不能准确测量。5.2 降低误差方法为了使得设计能够得到准确实时温度,DS18B20采用了外部电源供电方式,在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证 转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。外接电源方式下,可以充分发挥DS18B20宽电源电压围的优点,即使电源电压VCC降到3V时,依然能够保证温度量精度。在传输方面,当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长,测温电缆线建议采用屏蔽4芯双绞线。5.3 挂接DS18B20个数论证在DS1820的有关资料中均未提与单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个 DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时 要加以注意。本设计采用的是每个I/O口挂接一个DS18B20传感器的方案,由于STC89c52用户应用程序空间为8K字节,根据编写的程序大小,挂接三个DS18B20,程序为2K字节,故最多可接12个。第六章 调试与小结本设计Keil C51对单片机多点温度测量系统进行了软件编写。在编写过程中,必须严格按照DS18B20的工作时序严格编写,否则温度无法准确测量。硬件电路的设计是通过Protel 99se软件来来设计的PCB。设计之始,由于对软件的不熟练和PCB布线规则的不熟悉,导致第一版的设计失败,主要原因是布线宽度太窄导致刻板时线被刻断,焊盘设计太小,焊接时元件焊接不牢固。在两面布线时,顶层布线只放置一个过孔到顶层走线直接布线到顶层焊盘导致无法焊接。在第一版设计阶段由于粗心大意,把P0口上拉排阻的接电源错接成接地导致LCD1602不能显示,通过原理图对比和电路的排查最终找出和解决问题。经过改善后,第二版PCB制作成功。本课题通过分析对比各种不同的温度传感器,选定DS18B20,这种单总线数字温度传感器的通信方式比较独特,软件编写要求的比较新颖,特点突出。用其构建的系统有很多优点:硬件连线简单,省去了使用模拟传感