本程序对工作过程分了8个状态:准备状态(t0~t1)、发射超声波(t1~t2)、不接收信号时间(t2~t3)、等待声波反射时间(t3~t4)、测反射的个数(t4~t5)、不计反射波个数,间歇一段时间(t5~t6)、再测波的个数(t6~t7)、间歇时间(t7~t0)。为测得超声波收发时间差t,换算成距离s和判断是否报警,程序中使用了两个函数:
一个是void t0Interrupt(void)interTupt:1 using 1,它是t0计时中断函数,通过switch语句处理由工作过程分成的8种状态。
另外一个是函数void intInterrupt(void)interrupt2 using 2,它处理反射回来的输入信号,发生在t3~r4阶段,主要是由int1外部中断来得出时间distanceIn-time,并启动T1计数器,它用来计算反射波个数。
通过以上两个函数可获得t,后面转换成s和判断是否报警便迎刃而解。Chret.c的函数组成:
主程序对抗干扰采取了3个措施(防止误报警):
(1)t4~t5状态,给反射回来的波定个窗口,对于高于33.3 Hz或小于11.1 Hz的波不计数;
(2)t6~t7状态,通过测10 ms来判断:若是干扰在此时能测到;若是正常反射,此时应根本测不到波;
(3)对报警判断两次(1.3 s会自动清0一次)。
3.2 串口通信模块——transplant.c
主要将主AT89C52的程序中chDis准确无误传给显示部分(位于驾驶室),设计一个通信协议,以保证不收乱码,即在chDis这个数据前面添加一个报头数据Head,而后面添加一个检验数据check,这样显示部分就只在Head出现时才接收,且检验正确才显示。由于测t时,程序的时序已经固定,在此基础上进行串口通信,就只能够采用中断方式,而不能采用查询方式,否则将出现“死机”现象。
对于display.c,eraseint.a51这两个模块,在主程序中调用即可,功能单一:一个用来显示数据;一个用来执行iret指令。
4 结 语
本文设计的防撞装置在结构上采用微电脑技术和专用芯片设计,具有结构简单,小型化的特点,非常适合用于测控系统;在软件设计上,突出模块的灵活性,并且C51语言简洁,大大简化了编写程序的工作量。比较现在市场上已有的汽车防撞器,该系统结构紧凑,成本低,可靠性好,通信能力强,能有效地避免汽车相撞事故的发生,具有一定的市场价值。