南阳市工信局地址在哪:利用单片机内部定时器实现软件看门狗

来源:百度文库 编辑:偶看新闻 时间:2024/05/01 08:10:33
勤镐工控(05/09/04)

软件看门狗(WATCH DOG)也叫做程序运行监视系统。当程序运行受到干扰,程序飞到一个临时构成的死循环中时,系统将完全瘫痪,软件陷阱也无能为力了,这时就需要人工复位或硬件复位;如果没有人工操作和硬件复位系统,我们采用软件看门狗技术同样也能使系统复位,恢复正常。这种程序监视系统就好比主人家养了一条狗,主人总要定时喂狗,如果主人忘了喂狗(程序受到干扰,跑飞掉了),狗就会大叫起来,提醒主人(程序重新运行)。软件看门狗的特性如下:
1、本身独立工作,基本上不依赖CPU;
2、CPU在一个固定的时间间隔内和系统打一次交道(喂一次狗),以表明系统目前工作正常。
3、当CPU陷入死循环后,能及时发觉并使系统复位。
当系统陷入死循环后,怎样才能从死循环中跳出来呢?只有比这个死循环更高级的中断程序才能夺走CPU的控制权。为此,可以用一个定时器来做软件看门狗,因为定时器在运行时不占用CPU资源,它是独立工作的,所以,将它的溢出中断设定为最高优先级中断,系统的其它中断均设为比它低级的中断优先级。然后根据看门狗的定时时间来设定定时器初值。软件看门狗启动后,系统工作程序必须经常“喂它”,且每两次之间的间隔不得大于定时器的定时时间。程序中只要设立一个设置定时器初值的子程序,喂它时只要调用这个子程序即可。
当程序陷入死循环后,定时器溢出,产生高优先级中断,从而跳出死循环。我们还可以在定时器中断服务程序中放置一条LJMP  ERR指令,即可使程序转向出错处理程序;由出错程序来完成以后的工作,并用软件的方法使系统复位。
以下是一个用定时/计数器T0作软件看门狗的完整程序:
ORG0000H
AJMPMAIN
ORG000BH
LJMPERR
MAIN:MOVSP,#60H
MOVPSW,#00H
MOVSCON,#00H
MOVTMOD,#01H;设置T0为16位定时器
SETBET0 ;允许T0中断
SETBPT0 ;设置T0中断为高级中断
MOVTL0,#00H;设定T0的定时初值,定时时间约为16ms(6M晶振)
MOVTH0,#0B0H
SETBEA ;开中断
SETBTR0 ;启动T0
LOOP:......  ;主程序开始
LCALLWATCH DOG ;调用喂狗子程序
......
LJMPLOOP
WATCH DOG:MOVTL0,#00H;喂狗子程序
MOVTH0,#0B0H
SETBTR0
RET
ERR:POPACC ;定时器中断
POPACC ;看门狗软件复位程序
CLRA
PUSHACC
PUSHACC
RETI
在程序中,由于执行了中断服务程序后,PC的指针已经指向0000H,从而实现了软件复位的目的。