新闻中心

EEPW首页>嵌入式系统>设计应用> 一种新的单片机“看门狗”电路软件设计方法

一种新的单片机“看门狗”电路软件设计方法

作者: 时间:2012-03-16 来源:网络 收藏

当然,象上述这种情况是比较少见的。大多数情况下,程序跑飞后都会使PC指针越出有效程序区,造成“死机”。这时“狗”就起作用了。在大多数系统中,中断子程序执行的时间占总运行时间的百分比都非常小,而在执行中断程序时,PC指针跑飞越过RETI指令,而主程序又能正常运行的机会就更少。但是如果中断子程序处理数据比较复杂或带有一些函数运算的功能时,则出现这种系统失常的情况就有可能发生了。以前,在笔者的智能流量计中就曾经出现过这种现象:键盘显示操作都正常,看起来不象“死机”,但是在设定参数时,数据位该内烁的不闪烁,总流量不会累计上去,显然是T0定时中断系统失效,而主程序仍然在运行,因为“喂狗”指令插在主程序中。那么,针对这种情形,有没有彻底解决的呢?“喂狗”指令直接插在中断子程序中是不合适的,而单独插在主程序中又显然是不够的。笔者通过仔细推敲后,将“喂狗”指令分解开来,取反指令变成置位和清零两种指令(即SETB P1.0和CLR P1.0),将置位指令插在主程序中,而将清零指令插在T0中断子程序中,这样将两者联系起来,缺一不可,无论主程序运行失效,还是T0中断请求失效,都不能完成完整的“喂狗”指令,造成“狗”动作,从而确保了系统安全可靠地工作。
具体做法如下:
ORG 0000H
LJMP START
ORG 000BH
LJMP INTT0
……
ORG 0030H
START:MOV SP,#30H
……
MAIN:NOP
NOP
SETB P1.0
NOP
NOP
SETB EA
NOP
SETB ET0
……
LJMP MAIN
……
INTT0:NOP
NOP
CLR P1.0
NOP
NOP
……
RETI

这样,在整个用户程序中只唯一的一对指令(SETB P1.0及CLR P1.0)能使“狗”定时器复位。也就是说不会有任何“非法”的指令能使“看门狗”定时器误复位,致使系统已经“死机”而“看门狗”失效。当然,对对没有中断的用户系统,只需将清零指令(CLR P1.0)也插在主程序中就可以了;对于有多种中断的用户系统,如果没有中断嵌套,则清零指令(CLR P1.0)可以插在任一个中断子程序中,而在主程序中适当加入一些有关中断的冗余指令(如SETB ET0等),以免因有关中断的特殊功能寄存器数据受到干扰时导致中断功能失效;对于有二级中断嵌套的用户系统,清零指令(CLR P1.0)可以插在中断种数比较多的那一级中的任一个中断子程序中,插有“喂狗”指令的那一级中断系统将会受到“看门狗”的保护,而另一级中断系统如果失效,“看门狗”是“无动于衷”的,这时只能尽量减少这种中断子程序的执行时间以减少受到干扰的可能性。如果二级中断嵌套系统者受到“看门狗”的保护,就必需一个非常复杂的“看门狗”,其“喂狗”指令要由三部分来保证各个部分都能正常工作,需要说明的是,如果主程序运行一次的时间(包括可能被中断的时间)超过1.6秒,则要适当再插入一条SETB P1.0指令,而T0中断时间间隔是不能超过1.6秒的。

DIY机械键盘相关社区:机械键盘DIY


电路相关文章:电路分析基础


单片机相关文章:单片机教程


单片机相关文章:单片机视频教程


单片机相关文章:单片机工作原理




评论


相关推荐

技术专区

关闭