《毕业设计(论文)基于SN8F27E65的倒车雷达设计与研究.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)基于SN8F27E65的倒车雷达设计与研究.doc(31页珍藏版)》请在三一办公上搜索。
1、基于SN8F27E65的倒车雷达设计与研究设计说明自从1886年2月9日卡尔本茨发明了人类第一辆汽车,至今世界汽车工业经过了近122年的发展,当代汽车已经非常成熟和普遍了。汽车已经渗透于国防建设、国民经济以及人类生活的各个领域之中,成为人类生存必不可少的、最主要的交通工具,为人类生存和社会的发展与进步起到了至关重要的作用。当今,汽车已经成为人们生活中不可缺少的一部分,它给人们带来方便快捷的同时,也出现了许多问题。如越来越多的汽车使道路上有效的使用空间越来越小,新手也越来越多,由此引起的剐蹭事件也越来越多,由此引起的纠纷也在不断地增加。原来不是问题的倒车也逐渐变成了问题。尽管每辆车都有后视镜,但
2、不可避免地都存在一个后视盲区,倒车雷达则可以在一定程度上帮助驾驶员扫除视角死角和视线模糊的缺陷,提高驾驶的安全性,减少剐蹭事件。因此,提出了基于超声波测距的汽车用倒车雷达的设计。关键字:倒车雷达, LED数码管,超声波探测器,松翰单片机。The Design and Study of Reversing Radar Base On MCU of SonixDesign DescriptionIn recent years, Chinas catering industry development is rapid, annual growth rate 10 percentage points
3、 higher than other industry growth above, and good.Due to the guests go to a restaurant in several mostly period, so will appear the guests seated but no one stepped forward service of circumstance, this needs to be a kind of new products appear to replace waiter, this is part of the work be automat
4、ic order system.Automatic order system already exists, but also far from universal, on the market now in through a representative of several products after carefully, the comparative study of sunplus experiment box based on developed an own product, this paper is to introduce the detailed product pr
5、oduction process, first describes the current automatic order system function and market conditions, secondly introduces including LCD display and keyboard hardware manufacture, then is the application of sunplus single-chip microcomputer software development and program design process, finally main
6、ly introduced in the editing procedures and program test the problems encountered, etc.目录绪论31.1 倒车雷达系统作用31.2 倒车雷达系统的发展31.2.1 第1代轰鸣器31.2.2 第2代数码波段显示31.2.3 第3代液晶显示屏动态显示31.2.4 第4代魔幻镜倒车雷达31.2.5 第5代整合影音系统41.3 倒车雷达的大概组成与工作方式41.4设计内容及论文安排5硬件设计62.1单片机及周围电路模块的设计62.1.1 单片机性能介绍62.1.2 单片机及周围电路设计82.2显示模块92.3声光报警
7、模块92.4超声波传感器模块103. 软件的设计143.1 IDE开发环境的介绍143.2 主程序的设计153.3超声波发生的设计173.4数码管显示程序的设计183.4.1 数据处理及转换码程序的设计183.4.2 循环扫描程序设计193.5 声光报警报警程序设计204. 系统调试214.1硬件调试214.2软件调试215. 总结23致 谢24参考文献25附录26绪论1.1 倒车雷达系统作用在现代社会中,随着汽车的增多和停车位日趋紧张,泊车成为很多车主头痛的问题,这时倒车雷达就成了汽车的好助手。倒车雷达是汽车泊车安全辅助装置,能以声音或者更为直观的显示告知驾驶员周围障碍物的情况,解除了驾驶员
8、泊车时前后左右探视所引起的困扰,并帮助驾驶员扫除了视野死角和视线模糊的缺陷,提高了倒车的安全性。1.2 倒车雷达系统的发展1.2.1 第1代轰鸣器这是倒车雷达系统的真正开始,倒车时,如果车后1.51.8m处有障碍物,轰鸣器就会开始工作。轰鸣声越急,表示车辆离障碍物越近,没有语音提示,也没有距离显示,虽然司机知道有障碍物,但不能确定障碍物离车有多远,对驾驶员帮助不大。1.2.2 第2代数码波段显示这代产品要先进得多,它安装在仪表台的位置,可以显示车后障碍物离车体的距离。如果是物体,在1.8m开始显示;如果是人,在0.9m左右的距离开始显示;这一代产品有两种显示方式,数码产品显示距离数字,而波段显
9、示产品由三种颜色来区别显示:绿色代表安全距离,表示障碍物离车体距离有0.8m以上;黄色代表警告距离,表示离障碍物的距离只有0.60.8m;红色代表危险距离,表示离障碍物只有不到0.6m的距离,你必须停止倒车。这种产品把数码和波段组合在一起,比较实用。但缺点是反应不够快,而且使用寿命较短。1.2.3 第3代液晶显示屏动态显示这一代产品非常引人注目,特别是屏幕显示开始出现动态显示系统。它不用挂倒挡,只要发动汽车,显示器上就会出现汽车图案以及车辆周围障碍物的距离。其外表美观,可以直接粘贴在仪表盘上,安装很方便,给人以舒适的感觉,显示的距离也更准确些。相比其他倒车雷达产品,这种产品广为车主接受。但是,
10、液晶显示器存在抗干扰能力不强的毛病,所以有时出现误报的情况。1.2.4 第4代魔幻镜倒车雷达它结合了前几代产品的优点,采用了最新仿生超声雷达技术,配以高速电脑控制,可全天候准确地测知2m以内的障碍物,并以不同等级的声音提示和直观的显示提醒驾驶员。魔幻镜倒车雷达可以把后视镜、倒车雷达、免提电话、温度显示和车内空气污染显示等多项功能整合在一起,并设计了语音功能。因为其外形就是一块倒车镜,所以并不占用车内空间,直接可安装在车内后视镜的位置。当然,它的价格也相对较高。1.2.5 第5代整合影音系统这是专为高档轿车生产的,它在上一代产品的基础上新增了很多功能。从外观上来看,这套系统比上代产品更精致和典雅
11、;从功能上来看,它除了具备上代产品的所有功能之外,还整合了高档轿车具备的影音系统,可以在显示器上观看DVD影像。倒车雷达(Car Reversing AidSystem)全称“倒车防撞雷达”,又称“泊车辅助装置”,它是汽车泊车或者倒车时的安全辅助装置,由超声波传感器(俗称探头)、控制器和显示器(或蜂鸣器)等部分组成。它能以声音或者更为直观的显示告知驾驶员周围障碍物的情况,解除了驾驶员泊车、倒车和启动车辆时前后左右探视所引起的困扰,并帮助驾驶员扫除了视野死角和视线模糊的缺陷,提高驾驶的安全性。倒车雷达其实跟我们所知道的雷达是一样的,是根据蝙蝠在黑夜里高速飞行而不会与任何障得物相撞的原理设计开发的
12、,通过感应装置发出超声波,然后通过反射回来的超声波来判断前方有无障得物,以及距障碍物的距离、障碍物的大小、方位和形状等。不过由于倒车雷达体积和实用性的限制,目前的倒车雷达主要具备的就是判断障碍物的距离,并作出提示,让驾驶者便于判断。1.3 倒车雷达的大概组成与工作方式通常的倒车雷达主要由三部分组成:感应器(探头)、主机和显示设备。感应器发出和接收超声波信号,然后将得到的信号传输到主机里面的电脑进行分析,再通过显示设备显示出来。探头装在后保险杠上,根据不同价格和品牌,探头有1、3、4、6只不等,有的高档进口车甚至要装8只,分别管前后左右。探头以45角辐射,上下左右搜寻目标。它最大的特点是能探索到
13、那些低于保险杠而驾驶员从后窗难以看见的障碍物(如花坛、蹲在车后玩耍的小孩等)并报警。倒车雷达的显示器装在驾驶室仪表板上,它不停地提醒驾驶员汽车距后面物体还有多少距离。到危险距离时蜂鸣器就开始鸣叫,提醒驾驶员停车。按探头分,倒车雷达有粘贴式、钻孔式和悬挂式三种。粘贴式探头后有层胶,可直接粘在后保险杠上。钻孔式探头,是在保险杠上打一个洞,然后把探头嵌进去。悬挂式探头主要用于货车。从显示器分,有数字显示、颜色显示和蜂鸣三种。数字式显示器是一只如BP机大小的盒子,安装在驾驶室仪表板上,距离直接用数字显示,精确到0.01mm,让驾驶员一目了然。它会提醒驾驶员:1.50.8m为安全区;0.80.3m为适当
14、区;0.30.1m为危险区。在安全区,你可正常倒泊。在适当区,你要减速倒泊;在危险区,你则要停止倒泊。本设计属于第二代倒车雷达,能够进行距离显示并且可以在危险距离内可以进行报警,倒车雷达系统的结构如图,设计的标准是当障碍物距离到车体内达到99cm以内的时候便开始显示,如果超过了安全距离20cm时,便开始声光报警了,提醒驾驶员马上要停车,不能再后退了。图倒车雷达由处理器(SN8F27E65)、超声波发射器,超声波接收器、数字显示,声光报警等部分组成。超声波发射模块发出一组超声波,然后碰到障碍物后反射回来,被超声波接收器接收,此时可以通过单片机得到整个过程的时间,再乘以声波的速度,再除以二就可以得
15、到探测器与障碍物的距离。1.4设计内容及论文安排论文的安排如下:绪论主要是对倒车雷达系统进行简单的介绍,并通过图形使读者对倒车雷达系统有个总体的认识。大概了解一下倒车雷达的各个系统之间是怎么相互配合工作的。第二章主要介绍硬件电路设计,硬件电路主要包括SN8F27E65单片机及周围电路模块,电源模块,数码管显示模块,超声波模块,以及声光报警模块的设计。第三章主要是软件的设计,软件设计部分主要包括松翰开发环境的介绍,PWM波的发生程序,数码管显示程序,数据处理程序等程序的设计,数据采集及显示程序是这次毕业设计的难点,而数据处理是本次毕业设计的精髓所在。第四章是系统的调试以及编程过程中遇到的问题。第
16、五章是总结和展望。硬件设计倒车雷达的硬件结构包括:的单片机、SP-40-38F超声波测距模块、两位共阴极数码管、蜂鸣器、数码显示驱动等主要器件。图就是倒车雷达的实物图图2.1单片机及周围电路模块的设计2.1.1 单片机性能介绍松翰单片机的结构如图2.2所示。图功能特性:Flash ROM:6K16位Flash ROM可应用为EEPROMRAM:5128位8层堆栈缓存器11个内部中断:T0,TC0,TC1,TC2,T1,ADC,SIO,MSP,UTX,URX,WAKE2个外部中断:INT0(P0.0),INT1(P0.1)双向输入输出端口:P0,P1,P4,P5唤醒功能端口:P0,P1电平变换具
17、有上拉电阻的端口:P0,P1,P4,P5Fcpu=Fhosc/1,Fhosc/2,Fhosc/4,Fhosc/8,Fhosc/16,Fhosc/32,Fhosc/64,Fhosc/1281.8V/2.4V/3.3V,3层LVD4个8位定时器(T0,TC0,TC1,TC2)TO:基本定时器,TO支持RTC功能TC0:定时器/计数器/PWM0TC1:定时器/计数器/PWM1TC2:定时器/计数器/PWM212通道10位ADC接口:SPI,UART,IIC封装形式:PDIP 32 pin,LQRP 32 pin,QFN 32 pin,SKDIP 28 pin,SOP 28 pin,SSOP 28 p
18、in,QFN 28 pin,DIP 20 pin,SOP 20 pin。32 pin为SN8F27E65,28pin为SN8F27E64,20pin为SN8F27E62开发工具:Smart Development Adaper(SDA),集成仿真,调试和编程器于一体编译器:MEIDE(汇编编译器),SN8_C_Studio(C编译器)SN8F27E65,SN8F27E64,SN8F27E62,工作条件-40+85,1.8V-5.5VSN8F27E65L,SN8F27E64L,SN8F27E62L,工作条件0+70,1.8V-3.3V2.1.2 单片机及周围电路设计图2.3单片机的电路原理如图2
19、.3所示,它的每个引脚的功能如表2.1所示表2.1 管脚描述表管脚名称管脚编号类 型描 述P5.020输出PWM波输出P4.027输出声音报警P4.128输出灯光报警P0.08输入超声波传感器返回电路P1.214输出数码管十位选择端P1.313输出数码管个位选择端P1.412输出BCD码A位P1.511输出BCD码B位P1.610输出BCD码C位P1.79输出BCD码D位VSS1输入低电平输入VDD30输入4.5V电池VDDL31输入 1uF电容VDDL32输入单片机的电路由P5.0发出40KHz占空比为50%的方波,然后将方波输给超声波的发射端口,P0.0接到超声波的接收端口。P1口主要用于
20、显示,高四位作为显示的数据断,低四位作为数据的位选端。P4.0和P4.1分别驱动蜂鸣器和发光二极管。在两个VDDL之间需要将其短路,然后与10uF的电容相连接然后电容再与地相连如图2.4所示图2.4由于本设计采用内部晶振所以无需接连外部晶振,另外由于本设计结构简单,外设很少,程序逻辑紧密无需复位开关。2.2显示模块显示模块是由一个两位的共阴极数码管和一个7448共阴极数码管驱动器组成。具体如图2.5所示图2.52.3声光报警模块声光报警是由一个无源蜂鸣器和一个红色发光二极管组生成,并且直接由单片机驱动如图2.6所示图2.62.4超声波传感器模块SP-40-38F 超声波测距模块,测量范围在0.
21、101.00m,测量精度1cm,测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。超声波测距器,可以应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于液位、井深、管道长度的测量等场合。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人的研制上也得到了广泛的应用。SP-40-38F 此款超声波模块距离检测方便,测试距离精确,功耗低,但此模块价格已经放到最低,只是希望大家都能用上
22、好用实用的超声波模块。此模块价格便宜稳定性好,只占用单片机的2 个IO 口,测试简单方便,购买同时还送51单片机的检测程序,连接好电路即可检测距离。模块外形如图2.6所示。 图2.6超声波测距原理发射器发出的超声波以速度在空气中传播,在到达被测物体时被反射返回,由接收器接收,其往返时间为t,由s=vt/2 即可算出被测物体的距离。由于超声波也是一种声波,其声速v 与温度有关,下表列出了几种不同温度下的声速。在使用时,如果温度变化不大,则可认为声速是基本不变的。如果测距精度要求很高,则应通过温度补偿的方法加以校正.超声波只需要单片机向其提供40KHz的脉冲就可以工作,发出40KHz的超声波,并且
23、可以使用单片机的脉冲控制传感器发出的超声波的周期个数。单超声波传感器的模块的内部电路如图2.7和图2.8所示图2.7图2.8超声波模块的输入输出特性从示波器上就可以看出来,图2.9就可以体现出来蓝色的就是单片机发出的几个频率为40KHz的超声波的波形,而蓝色的就是超声波传感器返回的数据,一般超声波的输出端为高电平而当超声波接收器收到了反射回来的信号就能是的输出为低电平。图2.93. 软件的设计3.1 IDE开发环境的介绍1. 安装IDE。2. 打开IDE环境。3. 在IDE开发环境中建立一个新的工程,如图3.1所示,假设工程名为:我的程序.ASM,建立方法如下: 在File下拉菜单里点击New
24、。或者着直接再工具栏直接点击新建图3.1 新建工程4. 在我的程序.ASM文件中按照程序流程图编写汇编代码。 5. 编写完代码后,选择工具栏的“Debug”,或者直接点击图标,点击Go,或者按F5,如图3.5。并会弹出一个对话框,内容是设置CODE-OPTION,如图3.6主要设置看门狗的工作方式,和Fosce和Fcpu的频率和分频比。 图3.5 图3.67.然后是下载程序,此时要将SmartKite(开发板)接上电源打开开关,并且将SDA插到插槽内,将USB线再与SDA相连,当SDA的红绿灯完全亮起说明可以发生通信,然后点击CODE-OPTION的OK选项,等到读条消失,程序便完全的下载到了
25、单片机,此时再次点击Go选项单片机就可以运行起来了。 8.调试程序,在程序上加入断点,点击BREAK就可以在当前光标的地方得到一个断点,然后可以使得程序分布执行,而且可以检查单片机的各个寄存器,从而得知单片机是否正常的工作,和检查一些在程序设计时出现的小问题。3.2 主程序的设计倒车雷达整个系统是由数据采集,数据处理,和现实及报警三部分组成的。首先由单片机发出40KHz的并且占空比位50%的脉冲信号驱动超声波发生器,而且单片机只发出9个这样的脉冲,也就是说只是大约长度为10厘米左右的一束超声波,当这束超声波发出后开始由单片机内部的计数器开始计数,当这一束超声波撞击到障碍物时,反射回来并被超声波
26、接收装置接收时,超声波接收装置将低电平传给单片机,此时单片机停止计数器计数,并且将此时的计数寄存器的数值做以保留,并交给数据处理的程序进行处理后做进一步处理。数据处理程序其实就是将计数器的数值进行计算得到当前的车尾与障碍物之间的距离,1MHz的Fcpu的频率经过32倍的分频后每个脉冲的时间为32uS,然后在于声波的速度340m/s相乘再除以2也就是0.544cm,说明每个脉冲代表了声波走了0.544cm。将计数器的数值与0.544cm相乘得到了当前的距离,然后将距离交给显示及报警部分。显示程序主要是将当前的数值转化为BCD码,然后将十位和个位分别循环的扫描每一位的数码管,而报警程序就是做将当前
27、的数值与安全距离做一个比较,如果小于就报警 ,而大于的话就解除报警,最后再返回到开始进行新的一轮数据采集,数据处理,显示及报警的过程。全过程如图3.7图3.73.3超声波发生的设计图3.83.4数码管显示程序的设计3.4.1 数据处理及转换码程序的设计图3.93.4.2 循环扫描程序设计图3.103.5 声光报警报警程序设计图3.114. 系统调试4.1硬件调试1.SN8F27E65的工作电压为3.3-5V,而独立电源只能使用3节干电池提供的4.5V电压,虽然这个电压已经可以供单片机使用了,但是担心传感器可能工作距离会出现问题。经过试用直流稳压源测试发现在4.5V的条件下传感器依然可以很好的工
28、作。2不能下载程序,单片机与SDA不能通信?重新焊了一个电路板,而且是从单片机开始焊起,并且使它能正常工作时再完成其他后续电路,而且是每做完一部分就测试每一部分,确保其没有故障在进行下个部分的焊接。4.2软件调试1、由T0计数器采样,但是T0C中一直没有数据,或者就是数据有错误,采集不到稳定和正确的脉冲个数。经过试用双踪示波器进行分析传感器模块发现SP-40-38F 超声波测距模块并不是像我们之前想象的:当超声波返回来的时候模块的OUT接口出现高电平,而是出现低电平,也就是说平时的时候OUT一直是高电平,当超声波接收模块收到了反射回来的超声波时会将OUT变为低电平并且会持续一小会。所以将原来的
29、B0BTS1 P0.0语句改为B0BTS0 P0.0,此时T0C就可以采集到稳定又准确的数据了。2、显示模块的程序可以显示,但是只能显示存放着显示的寄存器的数值的十六位形式,而且试用DAA指令不行后,发现DAA指令是用于十六位与十位数值的转换使用的,而不能用于BCD码的转换,所以必须重新设计程序用于十六位转化为BCD码。于是我想到了C语言中的BCD码的转换方式,但是有碍于单片机没有除法,所以我试用循环减法,来达到除法的效果,得到十位和个位上的BCD码。从而使得显示可以显示十进制数字。3、当显示的程序与采样的程序合并在一起的时候不能工作,经过检查可能是因为延时程序的定时器发生冲突,导致后续的延时
30、进入死循环无法工作。解决的方法是直接改用其他的定时器进行延时,最后问题得到了解决。4、采集到的脉冲个数需要乘以0.136才能得到当前的数值,但是单片机是不支持浮点运算的,必须采用先乘以136,载与1000相除的方法,当然单片机也不支持除法,但是采用循环减法会非常耗费系统的运行时间,所以在本次设计并不是对测量的距离要求非常的严格的情况和前提下可以处以1024来代替处以1000,只要将数值左移10位就相当于除以1024。当然单片机做乘法后第八位放在ACC中,高八位存放在R寄存器中,所以只要执行完成乘法后在执行,指令就相当于左移了位,然后再将中的数值左移两位就可以得到当前的距离的数值。5、一开始探测
31、距离只有33cm,因为采集数据使用的T0计数器只有8位,而每当计数的分频数变大,所乘的数值就越大,当分频为16分频时需要乘以0.136,但是只能测量33cm。32分频的时候需要乘以0.272可以测量66cm,64分频时候需要乘以0.544,理论上可以测量1.32m。但是问题是单片机根本无法做以上的算,所以,这条指令是行不通的,所以要先执行,再将中的数值右移两位,也就是相当于与相乘。但是后续的处理还要将中的数左移两位,所以只要将后面的的左移两位的程序删除,而在这里也不需要对右移两位。所以只要重新设定的分频比值就可以,并且删除后面的左移两位的程序就可得到当前的距离数值。6、实物在使用过程中出现了容
32、易死机,特别是测量以上和以下的距离时,这时候需要优化一下程序的结构问题,我们只需要做两次判断,一次是检测是否为(为说明计数器溢出了,此时说明探测距离超过,但是由于溢出计数器重新计数导致运算出的距离是假数据),如果是说明在安全距离之外无需显示和报警,直接返回开始,再次将数值与做减法,当发生借位时,也就是标志寄存器为,此时就小于安全距离,所以要显示,如果大于了的话就可以直接返回开始继续下一次循环。如此一来紧密的结合考虑了各种情况,使得程序不再有逻辑上的漏洞导致单片机死机或进入死循环。5. 总结论文的总结标志着毕业设计的临近尾声,大学生活的即将结束。本次毕业设计主要做的是倒车雷达。笔者的产品已经具有
33、显示、报警,但是倒车影像显示部分没有做,而且一个人没有能力也没有时间完成 。另外本倒车雷达的探头不能防水,这都是这个倒车雷达的不足。硬件部分单片机模块由老师及松翰公司提供,超声波模块是从电子市场上购买的,其他模块是自己焊接的,然后把这几个模块搭建起来。 软件设计是通过汇编语言编程实现的。笔者只通过简单的汇编语言就实现了倒车雷达的功能 。另外,本设计无需改变内部程序就可以直接在原来的单片机的外围电路扩展,实现多探头的测量,并且扩展方式简单,只需要将新的探头按照之前的探头以同样的方式连接。这对于一般的汽车来说已经是足够了。另外现在市面上的倒车雷达设备价格均在千元左右,而上述的整套系统的价位不到元,
34、批量生产将会更加便宜我的倒车雷达有以下几个发展方向:可以方便的扩展数个探头,保证可以探测到车身离最近的障碍物的距离,而且扩展极为方便和简单。可以增加一个视频的摄像头和显示器,这样更能实时显示车体与障碍物得情况。采用多个扩展探头,并且实时的采集每个探头的信息,然后经过分析和算法处理后辅助司机自动倒车。致 谢本次毕业设计基本已经做到了我个人能力的极限,虽然有很多缺陷,但是总体来说基本功能都实现了。首先,这要归功于帮助过我的赵亮老师,赵亮老师的严格管教并多次指导我对程序的修改和逻辑上的纠正;同时陈登峰老师也对我的设计进行了多次指导,还有远在深圳的杨工程师给了我不可估量的帮助与指导。谢谢你们,没有你们
35、,我就不可能把毕业设计做出来。其次,我要感谢帮助过我的秦文昊同学,对我的设计方式提出过很多宝贵意见;谢谢你们!我也得感谢舍友们和同学们,他们在生活上给了我很多关怀和帮助,让我可以安心的做毕业设计,谢谢你们!参考文献1边焕鹤.汽车电器与电子设备M.北京:人民交通出版社,19972申荣卫.汽车电器 M.北京:机械工业出版社,20063高洪一康国初.汽车电子技术M.北京:北京交通大学出版社,20074吴妍汽车倒车雷达预警系统研究J硕士学位论文武汉理工大学20075朱华发展中的汽车倒车雷达城市车辆20066杨兴明贾保柱万莉张瑞.一种新的倒车雷达系统的设计J. 大气与环境光学学报.20087.tw附录程
36、序:CHIP SN8F27E65L/SONIX_CODE_OPTION.Code_OptionWDT_CLKFlosc/4.Code_OptionReset_PinP04.Code_OptionLVDLVD_Max; 3.3V Reset.Code_OptionWatch_DogDisable.Code_OptionLow_FcpuFlosc/1.Code_OptionHigh_ClkIHRC_16M; Internal 16M RC Oscillator.Code_OptionHigh_FcpuFhosc/16.Code_OptionSecurityEnable.Code_OptionNoi
37、se_FilterEnable/SONIX_CODE_OPTION ORG 0 JMP START ORG 20HSTART: MOV A,#01110001B ;设定PWM发生器的参数 B0MOV TC0M,A MOV A,#231 ;设定25uS的周期 B0MOV TC0R,A B0MOV TC0C,A MOV A,#244 ;设置占空比为50% MOV TC0D,A B0BSET FTC0ENB ;启动PWM发生器 MOV A,#01110000B ;设定定时器参数,定时200uS后关闭PWM B0MOV TC2M,A MOV A,#50 B0MOV TC2C,A B0BSET FTC2
38、ENBL1: B0BTS1 FTC2IRQ ;检测时间到了没并判断是否跳出循环 JMP L1 B0BCLR FTC2IRQ ;关闭中断请求 B0BCLR FTC2ENB ;关闭计数器开关 B0BCLR FTC0ENB ;关闭PWM发生器 CLR P0M ;初始化P0端口设置为数入 MOV A,#0FFH ;设置上拉电阻 MOV P0UR,A MOV A,#01110000B ;延时50uS,避免超声波发生器对接收器的影响 B0MOV TC2M,A MOV A,#220 B0MOV TC2C,A B0BSET FTC2ENBL3: B0BTS1 FTC2IRQ ;检测时间到了没并判断是否跳出循环
39、 JMP L3 B0BCLR FTC2IRQ ;关闭中断请求 B0BCLR FTC2ENB ;关闭计数器开关 MOV A,#30 ;设定T0参数, MOV T0C,A MOV A,#01010000B MOV T0M,A B0BSET FT0ENBL2: B0BTS0 FP00 ;等待接收器的低电平 JMP L2 B0BCLR FT0ENB ;当P00跳变为低电平时关闭计数器T0 MOV A,#136 ;将T0C中的数值进行处理得出将要显示的数值 MOV 009H,A MOV A,T0C ;用采集到的数值和136相乘 MUL A,009H MOV A,R ;将积的低八位去掉 MOV 016H,
40、A B0BCLR FC RRCM 016H B0BCLR FC RRCM 016H ;并将数值左移2位,达到将以上乘积除以1000的效果 MOV A,016H ;得到要显示的数值(此时的数值为十六进制) MOV 004H,A ;将要显示的数值转化为BCD码以供数码管显示使用 CLR 006H MOV A,#10 MOV 005H,A MOV A,004H L7: SUB A,005H ;使用循环减法得到BCD码的十位数值 INCM 006H B0BTS0 FC JMP L7 DECM 006H MOV A,#10 MUL A,006H XCH A,004H ;用十位的数值乘以10 SUB A,
41、004H ;用原数值减去十位乘10得到个位数 MOV 007H,A MOV A,#16 ;将十位数值左移4位 MUL A,006H ADD A,007H ;相加十位与个位得到BCD码 MOV 008H,A MOV A,#0FFH ;初始化P1端口,输出并且无上拉电阻 MOV P1M ,A MOV A,#00H MOV P1UR ,A MOV A,#0FFH ;初始化P4端口,输出并且无上拉电阻 MOV P4M ,A MOV A,#00H MOV P4UR ,A MOV A,#255 MOV 015H,A ;将015H作为计数,并赋予255L9: MOV A,008H MOV 000H,A AN
42、D A,#0F0H ;取将要显示的数值的十位 OR A,#00000111B ;与低四位的地址位相或 MOV P1,A ;输出数值 MOV A,#00000000B B0MOV TC1M,A B0MOV TC1C,A ;延时0.07S B0BSET FTC1ENBL8: B0BTS1 FTC1IRQ JMP L8 MOV A,000H AND A,#00001111B ;取将要显示的数值的十位 MOV 000H,A SWAP 000H ;与低四位的地址位相或 OR A,#00001011B MOV P1,A ;输出数值 MOV A,#00000000B B0MOV TC1M,A B0MOV TC1C,A B0BSET FTC1ENB ;延时0.07SL4: B0BTS1 FTC1IRQ