1、程序跑飞现象
随着单片机在能源领域中的广泛应用,单片机的抗干扰问题越来越突出,煤矿井下环境一般比较恶劣,这便会为单片机控制系统带来各种干扰,以致系统不能正常工作。单片机应用系统的抗干扰性能主要取决于硬件的抗干扰设计,但软件
抗干扰设计作为硬件抗干扰的完善和补充,作用也非常重要,因为大量的干扰通常并不能影响系统内硬件的运作,却常会使系统的软件无法正常运行,单片机应用的一个突出问题,便是单片机运行过程中经常出现的程序跑飞现象。
在单片机系统中,因为干扰的原因,在非预期的情况下,使得程序计数器PC 的值发生随机的变化,从而使得程序的流向指向不确定区域,这便是程序的跑飞。程序跑飞后或者会使指令的地址码和操作码发生改变,PC 把操作数当作指令来执行;或者PC值指向一条不合逻辑关系的指令甚或是非程序区,运行结果常常会使单片机进入死循环———便是大家常说的“死机”。为确保在无人当值的情况下,单片机“死机”后能自动恢复过来,通常采用软件陷阱,外部WDT 电路,以及软件控制的WATCHDOG 等方法,使系统恢复正常(后两种俗称“看门狗”),限于篇幅不做专门说明,这里主要向大家介绍用555 定时器软硬结合做看门狗的一种方法。
2、555定时器
一般情况下,看门狗主要是通过不断监视程序运行一个事件的时间是否超过预定的时间来判断程序是否进入了死循环,因此利用555 定时器可复位的触发功能外加延时电路可实现看门狗的功能。555定时器是一种多用途的单片集成电路,内部电路如图1 所示。
CO端是控制电压输入端,加控制电压可改变A1“-”端及A2“ +”端的参考电压,若不用,可通过一个小电容接地,以防旁路高频交流干扰;R 为定时器直接复位端,加低电平可将定时器直接置“0”,此时,OUT输出“0”,Q 为1”,V 导通,D 端对地通路;TH 为复位阀值输入端,当TH 电压超过2/3UDD(即A1 负端分压)时,A1 输出为“1”,OUT 输出“0”,同样,D 端对地通路;TR 为置位输入端,当TR电压低于1/3 UDD(即A2 正端分压)时,A2 输出“1”,定时器被置位,此时,OUT 输出“1”,Q 为“0”,V截止,D端对地断路。
3、看门狗电路及运行指令以INTEL公司的16 位单片机8096 为例,555定时器作为看门狗与单片机的接口电路可设计如图2 所示。
首先在单片机初始化时用指令“ORBPORT1,#01H”置P1.0 为“1”,则三极管T 导通,555 芯片的R 为“1”,TH、TR 端经R、C 充电,电位逐渐上升,当电位还低于1/3 UDD 时,OUT 输出“1”,D端对地断路,电容C 正常充电,(http://www.ippipp.com/版权所有)一旦程序跑飞或进入死循环,在电位上升到高于2/3 UDD时仍没有“喂狗”,则OUT输出变为“0”,经三极管T拉低单片机的RESET 脚,并使复位电容放电,这时
D 端对地短路,电容C 也通过Rf 放电,当TH、TR端电位放电到低于1/3 UDD(注意)时,OUT输出重新变为“1”,单片机进入复位状态。
“喂狗”是指复位看门狗,在本电路中只须运行以下指令即可。
ANDB PORT1,#0FEH ;使P1.0 为“0”
SKIP ;空操作,用于延时
SKIP ;以使TR电压降到1/3 UDD为宜
ORB PORT1,#01H ;使P1.0 为“1”
当P1.0 被置为“0”时,555 定时器的R 端为“0”,三极管T 截止。R 端为“0”则555 芯片被复位,OUT 输出为“0”,同时D 端对地短路,电容C放电为重新延时做准备,但因为三极管的截止,此时OUT 输出虽然也为“0”却并不影响单片机的RESET脚,单片机正常工作,从而区分开了“喂狗”与系统故障时看门狗发生作用的不同之处。
4、需要注意的问题
这里仍然有一个问题需要注意,那就是555定时器的正常工作与否完全依赖于单片机P1.0的状态,但在某些干扰比较严重的情况下,单片机的误操作是有可能改变P1.0 的预置状态的,若单片机在进入死循环之前,P1.0 被误置为了“0”,看
门狗始终处于“被喂”的状态,那这个电路便就无法再发挥作用了,对这种情况我们可用软件冗余的方法来应对,就是在程序的关键地方多次插写看门狗的激活指令:
NOP
ORB PORT1,#01H
值得提醒一下的是这里“NOP”指令的作用不容忽视,可使跑飞的程序纳入正轨,不致冲散后面的关键指令。不过尽管如此软件冗余的应用也还是有一个前提的,那就是跑飞的程序必须落在程序区,冗余的指令得到执行方可生效,若跑飞的程序落在了非程序区,仅凭指令冗余技术便不可靠了,这时我们便还须借助其他抗干扰技术的支持,如软件陷阱、标志技术,本质可靠性程序的设计等,在此不再赘述,但这些都必须包含在一个可靠的程序内———毕竟,单片机系统来自干扰的影响是立体的,那么,我们的应对策略便也须是全方位的。