www.sfmcu www.sf-edu.cn 盛方单片机整理 作者:不详 初始化N开关是否按下?Y低速行驶是否遇到黑线?Y计时开始计里程开始高速行驶YN是否偏离?N是否有障碍?N是否有光源?NN是否检测到黑线?Y停车
转向子程序Y避障子程序Y驶向光源 图4.1 流程图
23
www.sfmcu www.sf-edu.cn 盛方单片机整理 作者:不详 二 显示子程序设计
程序清单如下: xianshi:
mov p1,#0aah mov p1,#0cch mov a,limiw swap a add a,miao mov p1,a nop nop
mov p1,#0ddh mov a,fenmi swap a add a,fmiao mov p1,a nop nop
mov p1,#0eeh mov a,#0b0h add a,point mov p1,a nop nop
mov p1,#0eeh mov a,meter swap a add a,fenzh mov p1,a nop nop
mov p1,#0ffh mov a,shimi swap a
24
www.sfmcu www.sf-edu.cn 盛方单片机整理 作者:不详 add a,shifn mov p1,a ret
三 避障子程序设计
程序清单如下: zhangai:
jb 25h,stop jnb 22h,youzhuan jnb 23h,youzhuan jnb 24h,zuozhuan jnb 26h,zuozhuan ajmp jiance zuozhuan:
clr p0.5 clr p0.4 mov sudu,#05h acall delaa setb p0.4 setb p0.5 mov sudu,#07h ajmp jiance youzhuan:
clr p0.6 clr p0.7 mov sudu,#05h acall delaa setb p0.7 setb p0.6 mov sudu,#07h ajmp jiance stop:
acall delay jnb 25h,zhangai clr tr0
25
www.sfmcu www.sf-edu.cn 盛方单片机整理 作者:不详 mov a,fenmi mov fenmc,a mov a,#02h add a,fenmc mov fenmc,a here: cjne a,fenmi,here clr tr1 setb p2.6 acall delaa setb p2.7 ajmp $
四 软件抗干扰技术
提高玩具车智能控制的可靠性,仅靠硬件抗干扰是不够的,需要进一步借助于软件抗干扰技术来克服某些干扰[6]。在单片机控制系统中,如能正确的采用软件抗干扰技术,与硬件干扰措施构成双道抗干扰防线,无疑为了将大大提高控制系统的可靠性。经常采用的软件抗干扰技术是数字滤波技术、开关量的软件抗干扰技术、指令冗余技术、软件陷阱技术等。
1、数字滤波技术:
一般单片机应用系统的模拟输入信号中,均含有种种噪音和干扰,它们来自被测量本身、传感器、外界干扰等。为了进行准确测量和控制,必须消除被测信号中的噪音和干扰。对于这类信号,采用积分时间等于20ms的整数倍的双积分A/D转换器,可有效的消除其影响。后者为随机信号,它不是周期信号。对于随机干扰,我们可以用数字滤波方法予以削弱或滤除。所谓数字滤波,就是通过一定的计算或判断程序减少干扰在有用信号中的比重。故实质上它是一种程序滤波。数字滤波克服了模拟滤波器的不足,它与模拟滤波器相比 ,有以下几个优点:
数字滤波是用程序实现的,不需要增加硬设备,所以可靠性高,稳定性好。 数字滤波可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便,功能强的特点。
数字滤波可以对频率很低的信号实现滤波,克服了模拟滤波器的缺陷。 数字滤波器具有以上优点,所以数字滤波在微机应用系统中得到了广泛应用。 2、开关量的软件抗干扰技术:
干扰信号多呈毛刺状,作用时间短,利用这一点,我们在采集某一开关量信号时,可多次重复采集,直到连续两次或两次以上结果完全一致方为有效。若多次采样后,信号总是变化不定,可停止采集,给出报警信号,由于开关量信号主要是来自各类开
26
www.sfmcu www.sf-edu.cn 盛方单片机整理 作者:不详 关型状态传感器,如限位开关、操作按钮、电气触点等,对这些信号的采集不能用多次平均的方法,必须绝对一致才行。如果开关量信号超过8个,可按8个一组进行分组处理,也可定义多字节信息暂存区,按类似方法处理。在满足实时性要求的前提下,如果在各次采集数字信号之间接入一段延时,效果会好一些,就能对抗较宽的干扰。
输出设备是电位控制型还是同步锁存型,对干扰的敏感性相对较大。前者有良好的抗‘毛刺’干扰能力,后者不耐干扰,当锁存线上出现干扰时,它就会盲目锁存当前的数据,也不管此时数据是否有效。输出设备和惯性(响应速度)与干扰的耐受能力也有很大关系。惯性大的输出设备(如各类电磁执行机构)对‘毛刺’干扰有一定的耐受能力。惯性小的输出设备(如通行口、显示设备)耐受能力就小一些。在软件上,最为有效的方法就是重复输出同一个数据。只要有可能,其重复周期尽可能短些。外设设备接受到一个被干扰的错误信息后,还来不及作出有效的反应,一个正确的信息又来了,就可及时防止错误动作的产生。另外,各类数据锁存器尽可能和CPU安装在同一电路板上,使传输线上传送的都是锁存好的电位控制信号,对于重要的输出设备,最好建立检测通道,CPU可以检测通道来确定输出结果的正确性。
3、指令冗余技术:
当CPU受到干扰后,往往将一些操作数当作指令码来执行,引起程序混乱。当程序弹飞到某一字节指令上时,便自动纳入正轨。当弹飞到某一双字节指令上时,有可能落到其操作数上,从而继续出错。当程序弹飞到三字节指令上时,因它有两个操作数,继续出错的机会就更大。因此,我们应多采用单字节指令(NOP)或将单字节指令重复书写,这便是指令冗余。指令冗余无疑会降低系统的效率,但在绝大多数情况下,CPU还不至于忙到不能多执行几条指令的程度,故这种方法还是被广泛采用。
在一些对程序流向起决定作用的指令之前插入两条NOP指令,以保证弹飞的程序迅速纳入正确轨道。在某些对系统工作状态重要的指令前也可插入两条NOP指令,以保证正确执行。指令冗余技术可以减少程序弹飞的次数,使其很快进入程序轨道,但这并不能保证在失控期间不干坏事,更不能保证程序纳入正常轨道后就太平无事了,解决这个问题必须采用软件容错技术。
4﹑软件陷阱技术:
指令冗余使弹飞的程序安定下来是有条件的。首先,弹飞的程序必须落到程序区;其次,必须执行到冗余指令。所谓软件陷阱,就是一套引导指令,强行将捕获的程序引向一个指定的地址,在那里有一段专门对程序出错进行处理的程序。如果我们把这段程序的入口标号记为 ERR 的话,软件陷阱即为一条无条件转移指令,为了加强其
NOP
NOP
ERR
27
捕捉效果,一般还在它前面加两条 NOP 指令,因此真正的软件陷阱由3条指令构成: