微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一种新的单片机“看门狗”电路软件设计方法

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

时间:03-16 来源:互联网 点击:


具体做法如下:
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秒的。

另外,为了消除可能的“喂狗”误动作,建议对所应用的用户程序进行彻底仔细的检查,以防程序错乱时生成多余的SETB P1.0(指令码 D290H)或者CLR P1.0(指令码 C290H)指令。利用通用编程软件(如EDIT)的查找功能可搜索用户程序在LST文件中的“90”字符串,就能方便地找到所有可能的非法“SETB P1.0或CLR P1.0”指令,然后用NOP指令将其分离开来就可以了。如
ROM地址 指令码 源程序
……
0306 C2 MOV A,#0C2H
0308 901000 MOV DPTR,#1000H
……
B4D290 CJNE A,#0D2H,STEP1
……
0401 B4D290 CJNE A,#0D2H,STEP1
0494 00 STEP1:NOP
……

可以修改为
……
0306 74C2 MOV A,#0C2H
0308 00 NOP
0309 901000 MOV DPTR,#1000H
……
0402 B4D291 CJNE A,#0D2H,STEP1
0405 00 NOP
……
0496 00 STEP1:NOP
……

其它情况下可以灵活处理,以使其消除以上两种可以出错的组合即可。

通过采取以上几种措施,对于没有二级中断嵌套的用户系统,能够绝对安全地受到监控而不会“死机”;对于有二级中断嵌套的用户系统,也可大大提高其可靠性。当然,一个单片机系统能够准确可靠地运行,除了不“死机”,还需保护数据免受干扰,这属于软件容错、数据冗余、系统重入等范畴,这里不作介绍。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top