1 引言
随着工业自动化水平的不断提高,以MCS-51单片机为核心所构成的单片机应用系统得到了广泛应用,如水泥生料配料系统、电子皮带秤给料控制、各种现场智能测量仪表等。但其工作现场条件恶劣,干扰多而且幅度大,严重影响着应用系统的正常运行与可靠性,甚至使应用系统计算机进入死循环而瘫痪,通常称为程序“跑飞”。由此引出的计算机可靠性问题,一直是人们研究的重要课题。
采用屏蔽、滤波、退耦、隔离、接地等措施能有效地提高系统的抗干扰能力,但很难在强干扰发生时消除因程序“跑飞”而死机情况的发生。“看门狗”技术能在程序“跑飞”时实现自我诊断并使系统恢复运行,是单片机应用系统抗干扰的有力武器。当然,它是以系统的硬、软件设计开发的合理和成熟为条件的,否则将掩盖系统设计开发过程中的人为缺陷与不足。
2 “看门狗”技术及其对干扰的抑制
2.1 程序“跑飞”对系统的攻击
(1)程序计数器PC的值被攻击,成为一随机拼合的数据。
(2)系统设置的控制字与标志参数因“跑飞”后可能被访问而被攻击。
(3)数据存储器RAM内容被攻击等。
2.2 “看门狗”技术
“看门狗”源于“Watch dog、Watch dog timer”,或称定时监视技术,其本质是一可复位的定时器,其原理如图1、2所示。
图1 原理框图
图2 原理波形图
在程序正常运行时,计算机通过程序以周期T1向定时器发送脉冲触发定时器(或通过软件以T1为周期初始化定时器),而由定时脉冲控制的定时器动作时间为T2(T3),在T1<T2(T3)时,定时器不会动作,处于休眠状态。当计算机受到强干扰等作用破坏后,程序计数器PC中内容不再是程序的正确代码,而可能为一随机拼合的数据,这样会使取指不正确,必然导致程序运行混乱“跑飞”,进入死循环而死机。反过来由于程序脱离正常循环,也使定时器触发脉冲丢失,在经过T2(T3)时间后,“看门狗”定时器被激活,向CPU发出Reset信号使其复位,将“跑飞”的程序从PC=0000H开始,纳入正常轨道。但有些生产过程是不能从头开始的,应用程序均是一循环体,且在开始处均有初始化程序,包含各种寄存器、指针、变量、控制字等。此时状态不能反应“跑飞”时的状态,有时还有人身、设备等方面的安全危险。在这种情况下,程序“跑飞”后应设法找到出错时的断点,此时就可以采用二级“看门狗”的方式。由程序设计时优先级设置为最高级的定时器一先发出中断请求信号,CPU响应中断转向中断处理程序,进而恢复系统。第二级“看门狗”电路只有在第一级未起作用时经过T3才起动Reset信号。
2.3 “看门狗”技术的实施方法
(1)在系统构成时选用芯片内带有“看门狗”电路的单片机,如ATMEL公司的89C52等。
(2)选配专门的“看门狗”电路,如美国Xicor公司的X25043/45、MAXIM公司的MAX813L等,它们均可构成独立的“看门狗”电路。
(3)采用计数器、单稳态触发器、定时器等器件构成。在图3中用4060构成了一个二级“看门狗”电路。
因中断入口0003H处仅有0003H~000AH单元可为中断服务程序所用,很可能容纳不下中断服务程序,故应在其内安排一条JMP Watch dog指令。由于“跑飞”,PC值在响应中断前已被破坏,在响应中断后,该内容自动被压入堆栈,故一定要用两条POP A指令将无用内容弹出,以便为中断返回时由堆栈给PC赋予“跑飞”处的正确值,这一点在设计中断服务程序时尤其要引起重视。通过对P1.0取反,恢复对4060的触发脉冲。在中断服务中应安排被破坏数据的诊断、修复以及查找“跑飞”处的地址正确入口,并在返回前将其压栈。当执行RETI时,“跑飞”处断点地址入口自动弹栈到PC,恢复正常运行。P1.0取反指令在何处插入应通过计算指令周期让两条CLR P1.0指令间隔小于定时器的定时时间T1<T2,可取T2=(1.5~2)T1。
图3 二级“看门狗”电路