基于5单片机的超声波测距仪_第1页
基于5单片机的超声波测距仪_第2页
基于5单片机的超声波测距仪_第3页
基于5单片机的超声波测距仪_第4页
基于5单片机的超声波测距仪_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE12机电信息工程学院单片机系统课程设计报告系别:电子工程系专业:通信工程班级:051班设计题目:超声波测距学生姓名:王权于建坤指导教师:董玉华李厚杰杨亚宁李婷完成日期:2008年03月19日PAGEi目录TOC\*MERGEFORMAT一、 设计任务和性能指标ﻩPAGEREF_Toc196657742\h1二、设计方案ﻩPAGEREF_Toc196657743\h1三、系统硬件设计ﻩPAGEREF_Toc196657744\h3四、系统软件设计ﻩPAGEREF_Toc196657745\h5五、调试及性能分析ﻩPAGEREF_Toc196657746\h8六、心得体会ﻩPAGEREF_Toc196657747\h10参考文献ﻩPAGEREF_Toc196657748\h11附录1系统硬件电路图ﻩPAGEREF_Toc196657749\h12附录2程序清单ﻩPAGEREF_Toc196657750\h13大连民族学院2005级通信工程专业微机系统课程设计报告设计任务和性能指标1。1设计任务设计一个超声波测距器,可应用在汽车倒车、建筑施工工地以及一些工业现场的位置测控,也可用于如液位、井深、管道长度的测量等场合。要求用AltiumDesigner6画出系统的电路原理图(要求以最少组件,实现系统设计所要求的功能),印刷电路板(要求布局合理,线路清晰),绘出程序流程图,并给出程序清单(要求思路清晰,尽量简洁,主程序和子程序分开,使程序有较强的可读性)。1。2性能指标1、测量范围10—80cm;2、测量精度1cm;3、测量时与被测物体无直接接触,能够清晰稳定地显示测量结果;4、测量范围扩展为10cm—4m,提高测量精度。二、设计方案超声波测距仪是利用超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2

。超声波测距主要应用于倒车雷达、建筑施工工地以及一些工业现场,例如:液位、井深、管道长度等场合.目前国内一般使用专用集成电路设计超声波测距仪,但是专用集成电路的成本很高,并且没有显示,操作使用很不方便。超声波指向性强,穿透能力强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量。如测距仪和物位测量仪等都可以通过超声波来实现。但由于超声波传感器的成本较高,所以一般运用于专业领域,民用产品中运用较少.考虑到一般情况下对测距的要求较低,可在一定程度上牺牲其精确度和测距范围,从而降低成本,使其运用范围大大扩展。超声波测距系统主要由声波发射电路、回波接收电路以及信号采集电路、温度补偿电路等组成。2.1硬件方案选择(1)超声波发射电路总体上讲,超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、磁致伸缩型和电动型等;机械方式有加尔统笛、液哨和气流旋笛等。它们所产生的超声波的频率、功率和声波特性各不相同,因而用途也各不相同。目前较为常用的是压电式超声波发生器。

压电式超声波发生器实际上是利用压电晶体的谐振来工作的.超声波发生器内部主要由两个压电晶片和一个共振板组成.当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动,便产生超声波。反之,如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。这种压电式超声波传感器是利用内藏的压电晶体的压电效应。压电晶体在外电场作用下会产生机械变形,或者使压电晶体变形也会产生电压,前者称为逆压电效应,后者称为正压电效应。利用压电晶体的逆压电效应,电路的高频电压会转换为高频机械振动,以产生超声波,作为超声波发生探头,利用压电晶体的正压电效应可将接收的超声波振动转换成电信号,作为超声波接收探头。(2)超声波接收电路超声波接收电路的作用是对接收的超声波信号进行放大,并将放大后的信号处理成系统可以处理的电平信号。(3)温度补偿电路超声波是一种声波,其声速c与温度有关。如果测距精度要求很高时,则应通过温度补偿的方法加以校正.温度测量可以使用数字温度传感器DS18B20。(4)超声波测距器的算法设计超声波测距的原理即超声波发生器在某一时刻发出一个超声波信号,当这个超声波遇到被测物体后发射回来,就被超声波接收器所接收到。这样只要计算出从发出超声波信号到返回信号所用的时间,就可以算出超声波发生器与反射物体的距离.距离的计算公式为:其中d为被测物体与测距器的距离,s为声波来回的路程,c为声速,t为声波来回所用的时间。(5)系统硬件框图如图1所示。图1系统硬件框图2.2超声波测距器的软件系统软件主要由主程序、超声波发射子程序、超声波接收中断程序及显示子程序组成,如图2所示。图2系统程序结构框图超声波测距器主程序利用外部中断检测返回超声波信号,一旦接收到返回的超声波信号,立即进入中断程序。三、系统硬件设计主要由单片机系统及显示电路、超声波发射电路和超声波检测接收电路三部分组成.采用STC89C55来实现对CX20106A红外接收芯片和TCT40-10系列超声波转换模块的控制。单片机通过P1.0引脚经反相器来控制超声波的发送,然后单片机不停的检测INT0引脚,当INT0引脚的电平由高电平变为低电平时就认为超声波已经返回.计数器所计的数据就是超声波所经历的时间,通过换算就可以得到传感器与障碍物之间的距离.图3超声波测距原理框图3.1单片机系统及显示电路单片机采用STC89C55。采用11。0592MHz高精度的晶振,以获得较稳定的时钟频率,减小测量误差。单片机用P1.0端口输出超声波转化器所需的40KHz方波信号,利用外中断0口检测超声波接受电路输出的返回信号.显示电路采用简单实用的LCD1602液晶显示电路,用P0做为数据口。单片机系统及显示电路如图4所示。图4单片机及显示电路原理图3.2超声波发射电路超声波发射电路原理图如图5所示。图5超声波发射电路原理图压电超声波转换器的功能:利用压电晶体谐振工作.内部结构图6所示,它有两个压电晶片和一个共振板。当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这时它就是一超声波发生器;如没加电压,当共振板接受到超声波时,将压迫压电振荡器作振动,将机械能转换为电信号,这时它就成为超声波接受转换器.超声波发射转换器与接收转换器其结构稍有不同。图6超声波转换原理图图6超声波转换原理图3.3超声波检测接收电路超声波检测接收电路采用集成电路CX20106A,如图7所示,这是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38KHz与测距超声波频率40KHz较为接近,可以利用它作为超声波检测电路。实验证明其具有很高的灵敏度和较强的抗干扰能力。适当改变C4的大小,可改变接收电路的灵敏度和抗干扰能力。图7超声波接收电路图四、系统软件设计超声波测距软件设计主要由主程序,超声波发射子程序,超声波接受中断程序、温度补偿及显示子程序和距离测量及显示子程序组成。下面对超声波测距器的算法,主程序,超声波发射子程序和超声波接收中断程序逐一介绍.4.1超声波测距器的算法设计下图示意了超声波测距的原理,即超声波发生器在某一时刻发出的一个超声波信号,当超声波遇到被测物体后反射回来,就被超声波接收器所接受。这样只要计算出发生信号到接受返回信号所用的时间,就可算出超声波发生器与反射物体的距离。距离计算公式:其中d为被测物与测距器的距离,s为声波的来回路程,c为声速,t为声波来回所用的时间。程序框图如图8所示。图8距离计算子程序声速c与温度有关,如温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正.声速确定后,只要测得超声波往返时间,即可求得距离。在系统加入温度传感器来监测环境温度,可进行温度被偿.这里可以用DS18B20测量环境温度,根据不同的环境温度确定声速提高测距的稳定性。为了增强系统的可靠性,应在软硬件上采用抗干扰措施。图8距离计算子程序不同温度下的超声波声速表温度(摄氏度)-30-20—100102030100声速(m/s)3133193253233383443493864。2主程序主程序首先对系统环境初始化,设置定时器T0工作模式为16位的定时计数器模式,置位总中断允许位EA并给显示端口P0和P2清0。然后调用超声波发生子程序送出一个超声波脉冲,为避免超声波从发射器直接传送到接收器引起的直接波触发,需延迟0。1ms(这也就是测距器会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。由于采用11。0592MHz的晶振,机器周期为1us,当主程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按下式计算即可测得被测物体与测距仪之间的距离,以20℃时的声速为344

m/s为例,则有:图9主程序框图d=(C*T0)/2

=172*T0/10000cm(其中T0为计图9主程序框图数器T0的计数值)测出距离后结果将以十进制BCD码方式显示,然后再发超声波脉冲重复测量过程。主程序框图如图9所示。4。3超声波发生子程序和超声波接收中断程序超声波发生子程序的作用是通过P1.0端口发送5个左右的超声波信号频率约40KHz的方波,脉冲宽度为12us左右,同时把计数器T0打开进行计时。超声波测距器主程序利用外中断0检测返回超声波信号,一旦接收到返回超声波信号(INT0引脚出现低电平),立即进入中断程序.进入该中断后就立即关闭计时器T0停止计时,并将测距成功标志字赋值1.如果当计时器溢出时还未检测到超声波返回信号,则定时器T0溢出中断将外中断0关闭,并将测距成功标志字赋值0以表示此次测距不成功.中断程序的框图如图10所示。图10计数器T0中断程序(左)、计数器T1中断程序(中)外部INT0中断程序(右)4.4温度补偿子程序和温度显示子程序温度补偿子程序的作用是将当前实验环境的实际温度值准确测量、转换并存储,用以确定此时声波的速度值。本程序采用DS18B20的12位转换精度,温度寄存器里的值是以0.0625为步进的,即温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。温度处理子程序判断温度值的“+”和“-”并将转换好的温度整数位和小数位存入显示缓存区50H~53H中,50H为最高位,53H为最低位。温度显示子程序用来判断高位是否有灭零需要,以及符号位的选择和显示。程序框图如图11所示。图11温度显示子程序(左上)、温度处理子程序(左下)温度转换子程序(右)五、调试及性能分析5.1调试步骤首先要做的就是检查检测硬件电路是否有短路、断路、虚焊等.具体步骤及测试结果如下:(1)检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导线是否完全连接;测试结果所有连接线都已准确连接好;(2)检验单片机的晶振是否起振,用示波器观察波形;测试结果波形都符合正常工作波形;(3)检查各芯片工作是否正常,检测按键的导通情况;测试结果正常。然后将软硬件结合在一起进行调试,把整个超声波测距系统按照实现功能分为各个子模块进行调试。具体步骤如下:(1)显示模块调试。由于受实验器材和实验台的限制,此部分电路及其程序没能做到事先进行测试,所以在调试这个部分时遇到了很多问题,开始是发现硬件电路设计有问题,接的74LS373锁存器几乎就不起作用,然后改线将锁存器去掉了;接着是程序有错误,显示不正确,通过仔细阅读液晶资料,发现其工作时序没有配合好,经改动后在电路板上终于调试通过了;(2)温度补偿模块调试。因为之前在实验台上已经调试通过,所以将程序下载到单片机后就正确了。但在实验台上调试时也曾出现过很严重的问题,原因就是没有彻底弄明白DS18B20的工作工作时序,只有将时序配合好,芯片才呢个正常工作。(3)超声波发射与接收模块的调试。这部分是整个系统的核心,也是最易出现问题的部分,而且之前并没有实际测试过,因此在这个模块的调试过程中很困难。由于发射和接收不能独立调试,所以要同时考虑这两个部分的工作情况,只有两个部分都正常工作了才能得到正确的实验结果。将调试程序下载后,发现没能得到正确的实验现象,接着便开始进行分步调试,发射部分我们通过示波器观察波形,发现波形的频率与实际需要值略有偏差,经改正程序后符合了实际需要的频率和幅度,但还是没有正确的实验现象.确定发射没有问题后便开始进行接收部分的调试,反复进行电路连接检查和程序结构的改进后,依然没有调试成功。正要在困难面前退缩的时候,突然想起来,在分发电容时有一个电容在没有确定容值的情况下就发下来了,我这才想起来去检查我的器件型号规格是否有问题,果然,发现了那个误发的电容,其标称值比我们所需要的大了100倍,此时的我非常懊悔,恨自己一时疏忽没有做好调试前最基本的工作,把电容换了后调试成功了,又做了一点调整,系统能稳定的工作了.5.2性能分析超声波测距系统是现代生活一种很方便的测距仪器,它能够准确快速的测量出距离,给人们的生活带来很大方便。当系统上电时,显示器上将显示“Welcome”的字样,很快系统开始工作,随着探头的移动,显示器上将实时显示当前所对准的物体的距离,而且会一并显示当前测量环境的温度值。由于系统的驱动问题以及软件上的缺陷,实际测量值范围最好控制在3m内,距离值误差≤1cm,温度值误差≤0。5℃.本系统尚有不足,一是缺少电源开关控制按键,二是缺少报警机制,三是测量条件改变时的纠错能力差,另外液晶显示也没有达到理想的稳定状态。希望在进一步的设计过程中解决这些问题,并有所完善和再创新。六、心得体会这次课程设计是对我们学习单片机原理与应用和印刷电路板设计课程的检验及实际应用能力的一次提高。我们所设计的是超声波测距系统.可以测量的距离范围是5cm~3m,精确到1cm。由于声波在不同的温度下的速度值变化很大,为了减少测量误差,我们采用DS18B20温度传感器进行温度补偿设计,它具有体积小、适用电压宽等特点,其测量范围为-55℃~+125℃。与传统的热敏电阻相比,它能够直接读出被测量温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。本次实验中选择其12位转换精度.由于DS18B20读出或写入的信息仅需要一根口线完成,这样就需要准确的读写时序,刚开始由于时序没有配合好,调试很久都没出现正确的结果,后来通过对其时序的再一次了解和把握终于测出了准确的温度值。但读出来的温度值只是整个系统的一个辅助部分,我们主要是为了得到与当前环境下的温度值对应的声速值,此部分转换通过软件设计中温度的比较及查表来完成。显示部分选择了LCD1602液晶显示,但由于实验台的限制,软件调试过程中采用动态数码管显示。原理图设计时我们使用了印刷电路板设计课上学过的AltiumDesigner6制图工具,由于一些实际的器件在器件库中无法找到,我们只有自己制作,在这个过程中我们学到了很多的知识和方法。在制作PCB板图的时候,很多器件的封装与实际尺寸存在很大的差别,为了获得准确的封装,我们实际测量了所给器件的大小与规格,找到了与之匹配的封装库。当然我们也走过弯路,在考虑产品外型设计时,由于探头位置的需要,我们曾想过要将两个探头与主板分开单置出来,经老师分析,考虑到单开一块板的成本及安装困难的问题,提议将探头引脚弯曲便可.这个问题让我感受颇深,虽然只有这么小小的变动但却解决了实际问题.而自己却把简单的问题复杂化,因此我们在看问题时,一定要多角度考虑。程序编写过程也给了我们很大的收获。在编写程序之前,我们查阅了大量的相关资料,力求做到简洁规范清晰。在把握了整体的思路后,我们先从程序流程图着手,将整个程序分成若干模块,分开编写,一边发现问题一边解决问题,并在实验板上检验程序测试情况,根据现象不断修改。由于实验板的种种限制,我们不得不针对实验台来进行软件设计与调试。在这个过程中我们体会到编程的技巧,设置子程序的合理性,同时对单片机最小系统的设计有了整体的理解和深刻的体会,使我们的思维的锻炼与能力培养有了很大的提高和进步。本次课程设计时间虽短,但收获却很大.我们对应用单片机最小系统来设计产品有了整体的把握,对程序编写的合理与规范性有了深刻的理解,建立起程序设计的一般思路,以及AltiumDesigner6的使用方法,其强大的功能给我们提供了很大的帮助,通过原理图的设计,使我们认识到了这个软件的重要性,提高了我们运用的熟练性,我们会以此为契机,在日后的学习中会继续使用它,使其发挥更大的功能。经过三个星期的课程设计,我们得到了充分的锻炼,不仅对单片机的学习有了深刻的理解,同时也增强了我们的毅力和处理突发问题的能力。学习是要付出一定的艰辛与努力的,做事情一定要有不怕困难的吃苦精神,唯有坚持不懈,发扬团队协作才能够克服困难,取得最后的胜利。相信本次课程设计对我们以后的学习将会有很大的影响,我们一定会积极地总结经验与教训,改进不足,争取在日后做得更好。当然要感谢老师和同学们的帮助,在我们束手无策,陷入困境的时候给予热情的帮助,使我们顺利渡过难关.课程设计是一次很好的实践动手机会,通过实践,我们的知识得到了应用,真正实现了知识的学以致用,理论联系实际,我们会更加注重实践能力的锻炼,注重动手能力的培养。参考文献[1]徐维祥,刘旭敏。单片微型机原理及应用。大连:大连理工大学出版社,1996[2]何立民.单片机实验与实践教程(一).北京:北京航空航天大学出版社,2003[3]楼然苗,李光飞。单片机课程设计指导。北京:北京航空航天大学出版社,2007[4]李群芳,黄建.单片机微型计算机与接口技术。北京:电子工业出版社,2001[5]汪道辉.单片机系统设计与实践。北京:电子工业出版社,2006附录1系统硬件电路图附录2程序清单;*************************************************************;系统初始化定义;*************************************************************TEMPER_VLDATA20H;温度值(取整后)存储区TEMPER_VHDATA21HTEMPLDATA26HTEMPHDATA27H;测得温度值存储区TEMPHCDATA28HTEMPLCDATA29HTEMPHEADEQU36H;温度值缓存区TEMPER_NUMEQU39H;处理温度值缓存区VOUTEQUP1。0;超声波脉冲输出端口TEMPDINBITP2.4;DS18B20温度输入端口RSEQUP2.6RWEQUP2。5EEQUP2.7;********************************************;中断入口程序;********************************************ORG0000HLJMPBEGINORG0003HLJMPPINT0;外部0中断ORG000BHLJMPINTT0;计数器T0中断ORG0013HﻩﻩRETIORG001BHﻩﻩLJMPINTT1;定时器T1中断ORG0023HﻩﻩRETIORG002BH RETI;********************************************;主程序;********************************************ORG0100HBEGIN:MOVSP,#4FHMOVR0,#40H;40H—43H为显示距离存放单元MOVR7,#30H;60H—63H为显示温度存放单元CLEARDISP:MOV@R0,#30HINCR0DJNZR7,CLEARDISPMOV23H,#00HMOVTMOD,#21H;T1为8位自动重装,T0为16位定时器MOVTH0,#00H;65毫秒初值MOVTL0,#00HMOVTH1,#0F4H;40KHz初值MOVTL1,#0F4HﻩﻩMOVP0,#0FFHMOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHMOVR4,#0AH;超声波肪冲个数控制(为赋值的一半)ﻩLCALLLCDON;开机显示SETBPX0SETBET0SETBEABEGIN1:LCALLREADTEMPLCALLREADTEMP1;读出温度值子程序ﻩﻩLCALLCONVTEMP ﻩLCALLDISPBCDﻩﻩSETBTR0;开启测距定时器ABEGIN:LCALLDISPLAYJNB23H,ABEGIN;收到回波时置标志位CLREAﻩ CLR23H LCALLWORK;计算距离子程序ﻩﻩSETBEAﻩﻩMOVTH0,#00H;65毫秒初值MOVTL0,#00HﻩﻩSETBTR0;重新开启测距定时器 ﻩMOVR2,#02HLOOP:LCALLDISPLAYDJNZR2,LOOPﻩﻩSJMPBEGIN1;****************************************************;中断服务子程序;****************************************************;T0中断,65mS中断一次INTT0:CLREACLRTR0MOVTH0,#00HMOVTL0,#00HSETBET1SETBEASETBTR0;启动计数T0,用以计算超声来回时间SETBTR1;开启定时器T1,用以发超声波ﻩ NOPSETBEX0OUT:RETI;T1中断,发送超声波INTT1:CPLVOUTDJNZR4,RETIOUTCLRTR1;超声波发送完毕,关T1CLRET1MOVR4,#0AHRETIOUT:RETI;外部中断0检测回波PINT0:CLRTR0;关计数器CLRTR1ﻩ CLRET1CLREACLREX0MOV45H,TL0;将计数值移入处理单元MOV46H,TH0SETB23H;接收成功标志RETI;****************************************************;距离计算程序(=计数值*172/10000cm);****************************************************WORK:PUSHACCPUSHPSWPUSHBMOVR3,46HMOVR2,45HMOVR1,#00DMOVDPTR,#TEMPRLCALLDIFFER;将温度值转换为对应的速度值MOVCA,@A+DPTRMOVR0,ALCALLMUL2BY2MOVR3,#03HMOVR2,#0E8HLCALLDIV4BY2MOVR3,#27HMOVR2,#10HLCALLDIV4BY2MOVA,R4ADDA,#30HMOV40H,AMOVA,R4JNZJJ0MOV40H,#3CH;最高位为零,不显示JJ0:MOVA,R0MOVR4,AMOVA,R1MOVR5,AMOVR3,#03HMOVR2,#0E8HLCALLDIV4BY2MOVA,R4ADDA,#30HMOV41H,AMOVA,R4JNZJJ1MOVA,40H;次高位为零,先判断最高位是否为不显示SUBBA,#3CHJNZJJ1MOV41H,#3CH;最高位不显示,次高位也不显示JJ1:MOVA,R0MOVR4,AMOVA,R1MOVR5,AMOVR3,#00DMOVR2,#100DLCALLDIV4BY2MOVA,R4ADDA,#30HMOV42H,AMOVA,R4JNZJJ2MOVA,41H;次次高位为零,先判断次高位是否为不显示SUBBA,#3CHJNZJJ2MOV42H,#3CH;次高位不显示,次次高位也不显示JJ2:MOVA,R0MOVR4,AMOVA,R1MOVR5,AMOVR3,#00DMOVR2,#10DLCALLDIV4BY2MOVA,R4ADDA,#30HMOV43H,AMOVA,R4JNZJJ3MOVA,42H;次次高位为零,先判断次高位是否为不显示SUBBA,#3CHJNZJJ3MOV43H,#3CH;次高位不显示,次次高位也不显示JJ3:MOVA,R0JNBACC.3,CLEARMOVB,43HINCBMOV43H,BCLEAR:MOVR0,#00HPOPBPOPPSWPOPACCRET;温度与速度对应表(—30℃~91℃)TEMPR:DB9DH,9DH,9DH,9EH,9EH,9EH,9EH,9FH,9FH,9FH,0A0H,0A0HDB0A0H,0A1H,0A1H,0A1H,0A1H,0A2H,0A2H,0A2H,0A3H,0A3HDB0A3H,0A4H,0A4H,0A4H,0A4H,0A5H,0A5H,0A5H,0A6H,0A6HDB0A6H,0A7H,0A7H,0A7H,0A8H,0A8H,0A8H,0A8H,0A9H,0A9HDB0A9H,0AAH,0AAH,0AAH,0ABH,0ABH,0ABH,0ABH,0ACH,0ACHDB0ACH,0ADH,0ADH,0ADH,0AEH,0AEH,0AEH,0AFH,0AFH,0AFHDB0AFH,0B0H,0B0H,0B0H,0B1H,0B1H,0B1H,0B2H,0B2H,0B2HDB0B2H,0B3H,0B3H,0B3H,0B4H,0B4H,0B4H,0B5H,0B5H,0B5HDB0B5H,0B6H,0B6H,0B6H,0B7H,0B7H,0B7H,0B8H,0B8H,0B8HDB0B9H,0B9H,0B9H,0B9H,0BAH,0BAH,0BAH,0BBH,0BBH,0BBHDB0BCH,0BCH,0BCH,0BCH,0BDH,0BDH,0BDH,0BEH,0BEH,0BEHDB0BFH,0BFH,0BFH,0BFH,0C0H,0C0H,0C0H,0C1H,0C1H,0C1H;****************************************************;两字节无符号数乘法程序;****************************************************;R7R6R5R4<=R3R2*R1R0MUL2BY2:CLRAMOVR7,AMOVR6,AMOVR5,AMOVR4,AMOV46H,#10HMULLOOP1:CLRCMOVA,R4RLCAMOVR4,AMOVA,R5RLCAMOVR5,AMOVA,R6RLCAMOVR6,AMOVA,R7RLCAMOVR7,AMOVA,R0RLCAMOVR0,AMOVA,R1RLCAMOVR1,AJNCMULLOOP2MOVA,R4ADDA,R2MOVR4,AMOVA,R5ADDCA,R3MOVR5,AMOVA,R6ADDCA,#00HMOVR6,AMOVA,R7ADDCA,#00HMOVR7,AMULLOOP2:DJNZ46H,MULLOOP1RET;****************************************************;四字节/两字节无符号数除法程序;****************************************************;R7R6R5R4/R3R2=R7R6R5R4(商).。.R1R0(余数)DIV4BY2:MOV46H,#20HMOVR0,#00HMOVR1,#00HDIVLOOP1:MOVA,R4RLCAMOVR4,AMOVA,R5RLCAMOVR5,AMOVA,R6RLCAMOVR6,AMOVA,R7RLCAMOVR7,AMOVA,R0RLCAMOVR0,AMOVA,R1RLCAMOVR1,ACLRCMOVA,R0SUBBA,R2MOVB,AMOVA,R1SUBBA,R3JCDIVLOOP2MOVR0,BMOVR1,ADIVLOOP2:CPLCDJNZ46H,DIVLOOP1MOVA,R4RLCAMOVR4,AMOVA,R5RLCAMOVR5,AMOVA,R6RLCAMOVR6,AMOVA,R7RLCAMOVR7,ARET;**********************************************************;DS18B20温度补偿子程序区;**********************************************************;复位DS18B20;**********************************************************INITDS1820:ﻩSETBﻩTEMPDINﻩ NOPﻩﻩ NOP ﻩCLRﻩTEMPDINﻩ MOVﻩR6,#78Hﻩ ;延时480usﻩﻩDJNZﻩR6,$MOV R6,#78HDJNZﻩR6,$ﻩﻩSETBﻩTEMPDINﻩﻩMOVﻩR6,#23Hﻩﻩ;延时70usﻩﻩDJNZﻩR6,$MOVR6,#3CHLOOP1820:MOVﻩC,TEMPDINﻩﻩJCINITDS1820OUTDJNZR6,LOOP1820MOVR6,#64Hﻩﻩ;延时200usﻩﻩDJNZﻩR6,$ﻩﻩSJMPﻩINITDS1820ﻩﻩ RETﻩINITDS1820OUT:SETB TEMPDINﻩﻩRET;**********************************************************;读DS18B20的程序,从DS18B20中读出一个字节的数据;**********************************************************READDS1820:MOVﻩR7,#08Hﻩ SETB TEMPDIN ﻩNOP ﻩNOPREADDS1820LOOP:CLRﻩTEMPDINﻩﻩNOPﻩ NOP ﻩNOPﻩ SETBﻩTEMPDINﻩﻩMOVR6,#07Hﻩﻩ;延时15usﻩﻩDJNZR6,$MOVC,TEMPDIN ﻩMOVﻩR6,#3CHﻩﻩ;延时120usﻩﻩDJNZR6,$ﻩ RRCﻩASETB TEMPDIN DJNZR7,READDS1820LOOP ﻩMOVﻩR6,#3CHﻩﻩ;延时120usﻩﻩDJNZ R6,$ﻩﻩRET;**********************************************************;写DS18B20的程序,从DS18B20中写一个字节的数据;**********************************************************WRITEDS1820:MOVﻩR7,#08H ﻩSETBﻩTEMPDIN ﻩNOPﻩ NOPWRITEDS1820LOP:CLRﻩTEMPDIN MOVR6,#07H ﻩ;延时15usﻩﻩDJNZR6,$RRC AMOVTEMPDIN,CMOVﻩR6,#34Hﻩ ;延时104usDJNZﻩR6,$SETBﻩTEMPDINDJNZR7,WRITEDS1820LOP RET;**********************************************************;读TEMP;**********************************************************READTEMP:LCALLﻩINITDS1820ﻩﻩMOVﻩA,#0CCHﻩﻩLCALLﻩWRITEDS1820 ;跳过ROMﻩﻩMOVﻩR6,#34Hﻩ ;延时104usﻩﻩDJNZﻩR6,$ﻩﻩMOVﻩA,#44H ﻩLCALLﻩWRITEDS1820ﻩ;启动一次温度转换ﻩﻩMOVﻩR6,#34Hﻩﻩ;延时104usﻩﻩDJNZﻩR6,$ﻩﻩRETREADTEMP1:LCALL INITDS1820ﻩ MOVﻩA,#0CCHﻩﻩLCALLﻩWRITEDS1820ﻩ;跳过ROMﻩﻩMOVR6,#34H ﻩ;延时104usﻩﻩDJNZ R6,$ﻩﻩMOVﻩA,#0BEH ﻩLCALL WRITEDS1820ﻩ;读取暂存器内容ﻩﻩMOVﻩR6,#34Hﻩﻩ;延时104usﻩﻩDJNZﻩR6,$ﻩﻩMOV R5,#09Hﻩ MOV R0,#TEMPHEADMOVB,#00HREADTEMP2:LCALL READDS1820ﻩﻩMOVﻩ@R0,AﻩﻩINC R0READTEMP21:DJNZﻩR5,READTEMP2 ﻩMOVﻩA,TEMPHEAD+0ﻩﻩMOVﻩTEMPL,Aﻩ MOVTEMPER_VL,AﻩﻩMOVﻩA,TEMPHEAD+1 ﻩMOV TEMPH,AﻩﻩMOVTEMPER_VH,ARET;**********************************************************; 处理温度BCD码子程序;**********************************************************CONVTEMP:MOVﻩA,TEMPHANLﻩA,#80HJZﻩTEMPC1CLRﻩCﻩﻩMOVﻩA,TEMPLﻩﻩCPLﻩAﻩﻩADDﻩA,#01HﻩﻩMOVﻩTEMPL,Aﻩ MOV A,TEMPHﻩﻩ;“-”ﻩﻩCPLﻩAﻩﻩADDCﻩA,#00HﻩﻩMOVﻩTEMPH,Aﻩﻩ;TEMPHCHI=符号位ﻩﻩMOVﻩTEMPHC,#0CH;显示负号ﻩﻩSJMPﻩTEMPC11TEMPC1:ﻩﻩMOVﻩTEMPHC,#0BH;“+”,显示正号TEMPC11:MOVA,TEMPHCSWAPAMOVTEMPHC,AMOVﻩA,TEMPLﻩﻩANLﻩA,#0FH ﻩ;乘0.0625ﻩﻩMOV DPTR,#TEMPDOTTABﻩ MOVCﻩA,@A+DPTRﻩﻩMOVﻩTEMPLC,Aﻩﻩ;TEMPLCLOW=小数部分BCDﻩﻩMOVﻩA,TEMPLﻩ ;整数部分 ﻩANLﻩA,#0F0Hﻩ SWAPﻩA ﻩMOVﻩTEMPL,Aﻩ MOVﻩA,TEMPHﻩﻩANLﻩA,#0FHﻩﻩSWAPﻩAﻩﻩORLﻩA,TEMPL ﻩLCALL HEX2BCD1ﻩﻩMOVﻩTEMPL,AﻩﻩANLﻩA,#0F0H SWAPﻩA ﻩORLﻩA,TEMPHCﻩ ;TEMPHCLOW=十位数BCDﻩﻩMOVﻩTEMPHC,AﻩﻩMOV A,TEMPLﻩﻩANL A,#0FHﻩ SWAPﻩA ﻩﻩ;TEMPLCHI=个位数BCD ﻩORLﻩA,TEMPLCﻩﻩMOVﻩTEMPLC,A MOVﻩA,R7ﻩﻩJZ TEMPC12 ﻩANL A,#0FH ﻩSWAPﻩA ﻩMOVﻩR7,A MOVﻩA,TEMPHCﻩ ;TEMPHCHI=百位数BCD ANLﻩA,#0FHﻩ ORLﻩA,R7ﻩﻩMOVﻩTEMPHC,ATEMPC12:RET;**********************************************************;ﻩ小数部分码表;**********************************************************TEMPDOTTAB:ﻩDBﻩ00H,01H,01H,02H,03H,03H,04H,04H,05H,06HDBﻩ06H,07H,08H,08H,09H,09HRET;**********************************************************;ﻩ显示区BCD码温度值刷新子程序;**********************************************************DISPBCD:MOVﻩA,TEMPLCﻩﻩANLﻩA,#0FHﻩﻩADDA,#30Hﻩ MOVﻩ63H,AﻩﻩMOVﻩA,TEMPLCﻩ SWAP A ﻩANLﻩA,#0FHﻩﻩADDA,#30HﻩﻩMOVﻩ62H,AﻩﻩMOV A,TEMPHCﻩ ANLﻩA,#0FHﻩﻩADDA,#30HﻩﻩMOV 61H,A MOVﻩA,TEMPHC SWAPﻩAﻩ ANLﻩA,#0FHﻩﻩADDA,#30H ﻩMOV 60H,AﻩﻩMOVﻩA,TEMPHCﻩﻩANLﻩA,#0F0H ﻩCJNE A,#010H,DISPBCD0ﻩﻩSJMPﻩDISPBCD2DISPBCD0:MOVﻩA,TEMPHCﻩ ANL A,#0FHﻩﻩJNZﻩDISPBCD2ﻩﻩ;十位数是零 MOVﻩA,TEMPHCﻩﻩSWAPﻩAﻩ ANLﻩA,#0FH ﻩMOVﻩ60H,#20H;符号位不显示ﻩﻩMOVﻩ61H,A;十位数显示符号DISPBCD2:RET;****************************************************;温度值取整处理程序;****************************************************DIFFER:PUSHPSWCLRCMOVA,#0F0HANLA,TEMPER_VL;舍去温度低位中小数点后的四位温度数值SWAPAMOVTEMPER_NUM,AMOVA,TEMPER_VLJNBACC.3,TEMPER_COV;四舍五入去温度值INCTEMPER_NUMTEMPER_COV:MOVA,TEMPER_VHANLA,#07HSWAPAORLA,TEMPER_NUMMOVTEMPER_NUM,A;保存变换后的温度数据MOVA,TEMPER_VHJNBACC.3,POSSIVEMOVA,TEMPER_NUMSUBBA,1EHPOSSIVE:MOVA,TEMPER_NUMADDA,1EHPOPPSWRET;**********************************************************;ﻩ单字节16进制转BCD;**********************************************************HEX2BCD1:MOV B,#064Hﻩﻩ;16进制—〉BCDﻩ DIVﻩAB;B=A/100ﻩ MOVﻩR7,Aﻩﻩﻩ;R7=百位数ﻩﻩMOVﻩA,#0AH XCH A,Bﻩ DIVﻩAB;B=A/BﻩﻩSWAPﻩAﻩﻩORL A,BﻩﻩRET;****************************************************;LCD显示程序;****************************************************;距离值在40H为最高位,43H为最低位;温度值在60H为最高位,63H为最低位LCDON:MOVP0,#01HLCALLENABLE0MOVP0,#01HLCALLENABLE0MOVP0,#38HLCALLENABLE0MOVP0,#0CHLCALLENABLE0MOVP0,#06HLCALLENABLE0MOVP0,#80HLCALLENABLE0START100:MOVDPTR,#WORD1LCALLWRITE1MOVP0,#0C0HLCALLENABLE0MOVDPTR,#WORD2LCALLWRITE1MOVP0,#0C2HLCALLENABLE0LCALLDELAY2MOVP0,#02HLCALLENABLE0LCALLDELAY3LCALLDELAY3RETERROR:MOVP0,#01HLCALLENABLE1MOVP0,#01HLCALLENABLE1MOVP0,#38HLCALLENABLE1MOVP0,#0CHLCALLENABLE1MOVP0,#06HLCALLENABLE1MOVP0,#80HLCALLENABLE1START101:MOVDPTR,#WORD5LCALLWRITE1MOVP0,#0C0HLCALLENABLE1LCALLDELAY2MOVP0,#02HLCALLENABLE1MOVDPTR,#WORD5LCALLWRITE1MOVP0,#0C0HLCALLENABLE1LCALLDELAY2MOVP0,#02HLCALLENABLE1RETDISPLAY:MOVP0,#01HLCALLENABLE1MOVP0,#01HLCALLENABLE1MOVP0,#38HLCALLENABLE1MOVP0,#0CHLCALLENABLE1MOVP0,#06HLCALLENABLE1MOVP0,#80HLCALLENABLE1MOVDPTR,#WORD4LCALLWRITE4MOVP0,#0C0HLCALLENABLE1LCALLDELAY2MOVDPTR,#WORD3LCALLWRITE3MOVP0,#0C2HLCALLENABLE1LCALLDELAY2LCALLDELAY3LCALLDELAY3MOVP0,#02HLCALLENABLE1RETWRITE1:MOVR1,#00HMOVR5,#10HA1:MOVA,R1MOVCA,@A+DPTRLCALLWRITE12INCR1DJNZR5,A1RETWRITE12:MOVP0,ASETBRSCLRRWCLRELCALLDELAY3SETBERETWRITE2:MOVP0,ASETBRSCLRRWCLRELCALLDELAY2SETBERETWRITE3:MOVR1,#00HMOVA,R1MOVCA,@A+DPTRLCALLWRITE2INCR1MOVA,R1MOVCA,@A+DPTRLCALLWRITE2INCR1MOVA,R1MOVCA,@A+DPTRLCALLWRITE2INCR1MOVA,R1MOVCA,@A+DPTRLCALLWRITE2INCR1MOVA,R1MOVCA,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论