吴浩然 万民凯 徐卓凡 南京邮电大学海外教育学院
微处理器实验设计:超声波测距及显示系统
吴浩然 万民凯 徐卓凡 南京邮电大学海外教育学院
本次实验设计,我们希望通过编程在模块组件HYSRF05上实现超声波测距并在LCD1602屏幕上显示结果。
在行动之前,我们进行了一些构思。首先,我们设置了LCD1602的模式和显示的静态字,以便实现动态显示结果。其次,我们从说明书中了解到,我们需要一个10us或以上的脉冲来启动HY-SRF05模块组件,然后模块组件自己接收到一个脉冲和高电平经过周期(P)的数量,其中高电平经过的周期和模块组件与它所面对物体间的距离是成比例的。接着,我们使用TimerA的捕获寄存器来确定高电平经过周期(P)的数量,并将它储存在另一个寄存器之中。在试验中,我们用D = P ⋆ 340 / (100000⋆2) m来代表距离。最后,我们用10000,1000,100,10取模,来将二进制数D换成十进制数,并且通过ASCII码表转换,将D显示在LCD1602上。
构思之后,我就开始了设计与实验。我们的MSP430界面图如下
首先,我们将 P4 的全部 8个管脚和 P5.5,P5.6,P5.7用来控制LCD1602。
MOV.B #00H, &P4SEL
MOV.B #0FFh, &P4DIR
MOV.B #00H, &P5SEL
MOV.B #BIT5+BIT6+BIT7, &P5DIR
我们设置P6通过灯来检测我们的程序
MOV.B #00H, &P6SEL
MOV.B #0FFh, &P6DIR
其次,如下是1602序列图
通过图表我们得知,如果我们想在LCD1602中写入指令或数据,我们需要重置R/W,设置或重置RS然后让E从高电平变为低电平从而写入指令或数据。
然后,我们使用HY-SRF05模块组件
这是HY-SRF05的测试模式序列图。它需要一个10us 5V的脉冲来激活,然后它就会自动接收一个长度与距离成比例的脉冲。
它 的 链 接 方 式:1.VCC 2.trig(T) 3.echo(R) 4.OUT 5.GND
我们用CCR1的捕获输入P1.2来测量echo,然后我们用P1.4 来发出 10us脉冲。所以我们先设置 P1.2 和 P1.4.
BIC.B #BIT4 , &P1SEL BIS.B #BIT2 , &P1SEL
BIS.B #BIT4, &P1DIR
BIC.B #BIT2, &P1DIR
BIC.B #BIT4 , &P1OUT
在主要的功能中,我们向trig接口发送10us脉冲并添加延时以确保下一个trig在至少30ms之后。
BIS.B #BIT4, &P1OUT
MOV #2,R15
loop31: dec R15
JNZ loop31
BIC.B #BIT4, &P1OUT
MOV #20000,R15
loop32: dec R15
JNZ loop32
我们设置TimerA和CCR1来捕获echo接口的信号
MOV #02E6H, &TACTL
MOV #4910H, &TACCTL1
接着,我们编写中断处理程序。我们首先确定了是CCR1产生了中断,因为我们只使用了CCR1和TimerA,而且我们没有启动TimerA的中断。然后我们确定了echo在上升沿还是下降沿到来,假设是上升沿,我们将&TACCR1储存在R6中,当echo在下一个下降沿到来时,我们用R5储存&TACCR1然后计算R5-R6。关键点在于,我们需要先捕获上升沿信号再转而捕获下降沿信号。
最后是取模10000,1000,100,10。这一部分就是做除法,一个思路就是取模1000的余数就是取模100的被除数,以此类推。我们将得到的结果通过ASCII码表转化,再将数字动态的显示在LCD1602上。
完成设计之后,我们根据设置连接管脚和HY-SRF05,并在LCD602上看到了想要的结果。
我们虽然实现了测距,但仍有不足和需要改进的地方。比如,我们仪器的精度还需要提高。我们假设这是由于两个10us脉冲间的间隔造成的,在未来的实验中我们会证明我们假设。再比如,我们的程序中没有设定&TAR在大于65536时重置为0,这可能会产生一些问题,我们在未来的改进中将会加入相应字段。但是,我们的首要问题还是要确保有更好的精度。