后存储在 RAM 中,而且每次发射周期的开始,需要对计数器清零,以备后续处理。
三、 信号处理
RAM 中存储的计数值并不能作为距离值直接显示输出,因为计数值与实际的距离值之间转换公式为:S=0.5*V*T=0.5*V*(Tr*N)其中,T 为发射信号到接收之间经历的时间,Tr 为方波信号作为计数脉冲时计数器的时间分辨率,N 为计数器的值。在这个部分中,信号处理包括计数值与距离值换算,二进制与十进制转换。
四、 数据传输与显示
经软件处理得到的距离送显示输出,用三位 LED 表示。由于采用了单片机AT89C51并考虑整个系统的控制流程,整个系统软件都有 AT89C51系列单片机汇编语言实现。由于距离值的得出及显示是在中断子程序中完成的,因此在初始化发射程序后进入中断响应的等待。在中断响应之后,原始数据经计数值与距离值换算子程序,二进制与十进制转换子程序后显示输出。整个系统软件功能的实现可以分为主程序、中断服务程序几个主要部分。
4.2.1主程序
主程序是单片机程序的主体,整个单片机端系统软件的功能的实现都是在其中完成的,在此过程中主程序调用了子程序及中断服务程序。程序首先完成初始化过程,然后是一个重复的控制发射信号的过程,即调用发射子程序几遍,而且每次发射周期结束都会判断在发射信号后延时等待的过程中是否发生了中断,即是否有回波产生来判断程序得流程。流程图如图4.3所示。
图4.3 主程序流程图
9
一、 40kHz 脉冲的产生与超声波发射
在脉冲产生前先对定时/计数器T0进行初始化,在这里选择的是工作方式1定时器模式,所以TMOD应该设定为01H。接着用STEB TR0指令开启T0,在开启T0的同时开发发射超声波脉冲。
测距系统中的超声波传感器采用UCM40的压电陶瓷传感器,它的工作电压是40kHz的脉冲信号,这由单片机执行下面程序来产生。
PUZEL: MOV 14H, #12H ;超声波发射持续200ms HERE: CPL P1.0 ;输出40kHz方波
NOP NOP NOP
DJZN 14H,HERE RET
前方测距电路的输入端接单片机P1.0端口,单片机执行上面的程序后,在P1.0 端口输出一个40kHz的脉冲信号,经过三极管T放大,驱动超声波发射头UCM40T,发出40kHz的脉冲超声波,且持续发射200ms。右侧和左侧测距电路的输入端分别接P1.1和P1.2端口,工作原理与前方测距电路相同。这里省略,只研究正对方向的障碍物。
二、 超声波的接收与处理
超声波的接受是由外部中断口INT0是否有中断脉冲产生来判断的。定时子程序转回来的时候,要对中断进行初始化。选定的是INT0口,工作方式为脉冲方式。
STEB EA ; 中断总允许 STEB EX0 ; INT0中断允许
STEB PX0 ; 设置INT0为高优先级中断 STEB IT0 ; 设置INT0为脉冲方式 HERE:JMP $ ;等待中断
接收头采用与发射头配对的UCM40R,将超声波调制脉冲变为交变电压信号,经运算放大器IC1A和IC1B两极放大后加至IC2。IC2是带有锁定环的音频译码集成块LM567,内部的压控振荡器的中心频率f0=1/1.1R8C3,电容C4决定其锁定带宽。调节R8在发射的载频上,则LM567输入信号大于25mV,输出端8脚由高电平跃变为低电平,作为中断请求信号,送至单片机处理。
前方测距电路的输出端接单片机INT0端口,中断优先级最高,左、右测距电路的输出通过与门IC3A的输出接单片机INT1端口,同时单片机P1.3和P1.4接到IC3A的输入端,中断源的识别由程序查询来处理,中断优先级为先右后左。部分源程序如下
RECEIVE:PUSH PSW PUST ACC CLR ACC
JNB P1.1,RIGHT;P1.1引脚为0,转至右测距电路中断服务程序 JNB P1.2,LEFT;P1.2引脚为0,转至左测距电路中断服务程序 RETURN: SETB EX1;开外部中断INT1 POP ACC POP PSW
10
RET1
三、 数据读取和储存
为了得到发射信号与接收回波间的时间差,要读出T0计数器的计数值,然后存 储在 RAM 中,而且每次发射周期的开始,需要对计数器清零,以备后续处理。
RECEIVE0:PUSH PSW PUSH ACC
CLR EX0 ;关外部中断0 MOV R7, TH0 ;读取时间值 MOV R6, TL0? CLR C
MOV A, R6
SUBB A, #0BBH ;计算时间差 MOV 31H, A ;存储结果 MOV A, R7 SUBB A, #3CH MOV 30H, A
SETB EX0 ;开外部中断0 POP ACC POP PSW RETI
四、 计算超声波传播时间
T0中读取出来的时间差数据并不能作为距离值直接显示输出,因为时间差值与实际的距离值之间转换公式为:S=0.5*V*T 。其中,V为声音在常温下的传播速度,T为发射信号到接收之间经历的时间,在这个部分中,信号处理包括计数值与距离值换算,二进制与十进制转换。
4.2.2 显示子程序和蜂鸣报警子程序
考虑到提高系统资源的利用率,显示采用动态显示法实现。采用8155芯片作为单片机应用系统的扩展I/O口。8155的PA口做为LED的字形输出口,PC口做为LED的位选控制口,采用共阴显示接法。将计算好的距离数据设置显示缓冲区起始地址,显示缓冲区中被显示的字符的字形码的地址偏移量预先制表放入。流程图及部分源程序如下:
11
图4.4 子程序流程图
DISP:MOV DPTR,#7F00H ;指向8155控制口 MOV A,#0DH ;8155初始化 MOVX @DPTR,A
MOV R7,#01H ;从右边第1位显示器开始 MOV R1,#30H ;显示缓冲区首地址送R1 LOOP:MOV DPTR,#7F03H ;指向8155控制口地址 MOV A,R7 ;位控码初值 MOVX @DPTR,A
MOV DPTR,#7F01H ;指向8155段控制口地址 MOV A,@R1 ;取待显示数据
MOV DPTR, #TAB ;取字形段码表首地址 MOVX A,@A+DPTR ;查表获取字形段码 INC R1 ;指针指向下一缓冲单元 MOV A,R7
JB A CC.5,RETURN ;判断是否到最高位?返回 RL A ;不到,左移一位 MOV R7,A
AJMP LOOP ;继续扫描 RETURN:RET
TAB: DB 0C0H,OF9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H
12