2.3 硬件Whatchdog电路
图中的双可再触发单稳态多谐振荡器74LS123在清除端为高电平,B端为高电平的情况下,若A端输入负跳变,则单稳态触发器脱离原来的稳态(Q为低电平)进入暂态,即Q端变为高电平。在经过一段延时后,Q端重新回到稳定状态。这就使Q端输出一个正脉冲,其脉冲宽度由定时元件R、C决定。当C>1000pF时,输出脉冲宽度计算如下:
tw=0.45RC 式中,R的单位为Ω,C的单位为F,tw的单位为s。
图中,若R1=100kΩ,C=10μF,则单稳态1#的暂态时间tw1为450ms。若R2=2kΩ,C2=1μF,则单稳态2#的暂态时间tw2为0.9s。
第一个单稳态电路的工作状态由单片机的P1.0控制。在系统开始工作时,P1.0向1A端输入一个负脉冲,使1Q端产生正跳变,但并不能触发单稳2#动作,2Q仍为低电平。P1.0负触发脉冲的时间间隔取决于系统控制主程序运行周期的大小。考虑系统参数的变化及中断、干扰等因素,必须留有足够的余量。本系统最大运行周期为0.3s。单稳1#的输出脉冲宽度为450ms,若此期间内1A端再有负脉冲输入,则1Q端高电平就会在此刻重新实现450ms的延时。因此只要在1A端连续不断地输入间隔小于450ms的负脉冲,则1Q输出将始终维持在高电平上。这时2A保持高电平,2#单稳不动作,2Q端始终维持在低电平。
一旦程序由于干扰而进入“死循环”,“看门狗”脉冲不能正常触发,经过450ms后单稳态1#脱离暂态,1Q端回到低电平,并触发单稳态2#翻转到暂态,在2Q端产生足够宽的正脉冲(0.9ms),使单片机可靠复位。一旦系统复位后程序就可重新进入正常的工作循环中,使系统的运行可靠性大大提高了。
下图所示电路为由定时器/计数器8253和可再触发单稳态多谐振荡器74LS123组成的硬件“看门狗”电路,将8253计数器0设置成方式0计数结束中断方式,其工作原理为
17
第2章 单片机Whatchdog技术
图2-2 “看门狗”电路中断方式工作原理
将8253计数器0设置成方式0计数结束中断方式,写入控制字后,输出端OUT为低电平作为初始状态。因GATE位始终为高电平,则允许计数。对计数器0的计数器高字节和低字节连续两次写操作(由方式控制字的D5D4确定为11)以启动计数器工作。因通常选8253的定时时间稍大于正常程序循环一次运行的时间,所以,若程序正常运行,则在计数值减到0以前,CPU又重写计数值,将重新启动计数器,所以OUT端仍为低电平,74LS123的 端一直为高电平,不能复位8051单片机。但若在计数器减到0时CPU未刷新计数值,说明程序飞掉或死循环,将产生溢出,则GATE变为高电平“1”,相当于74LS123的A端输入一个负跳变信号,则其进入暂稳态, 变为低电平“0”,取反后变为高电平,即可复位8051单片机,使程序进入0000H重新执行程序。 1).系统复位的WDT
18
这种WDT要求片内定时器T0(或T1)工作在定时器方式,并允许中断。程序运行时,对T0初始化,使其定时时间稍大于程序运行时间,使之不会溢出。一旦程序因为干扰或故障出现死循环时,T0不再被定时初始化,经过一段时间便会溢出,从而激活中断服务程序,中断服务程序调节PC值为0000H,使系统重新运行。 下面是修改PC值为0000H的中断服务程序WDT0和片内定时器T0的初始化子程序SETT0。
ORG 0000H LJMP
MAIN
ORG 000BH
MOV A, #00H
R0 ;弹出CPU响应中断时压入堆栈内的 R0 故障发生处的PC值 A A
;把PC值换成累加器的内容,在此 PC=0000H
WDT0:
POP POP PUSH PUSH RETI
ORG 0080H MAIN:
??
ACALL SETT0
??
;运行正常程序
;置T0为定时方式,方式1
SETT0:
MOV TMOD, #01H
MOV IE, #82H ;开中断 MOV TH0, #Thi ;置定时常数 MOV TL0, #Tlow SETB RET
TR0
;启动定时器T0
注意:定时器T0的定时常数应稍大于主程序中循环调用SETT0的间隔时间。 2.就地恢复的WDT
19
第2章 单片机Whatchdog技术
这种WDT是指,由于干扰而使某一段程序未能正常执行时,WDT能使系统从故障中恢复过来,重新执行这段程序,而非系统从头执行。如果在程序重新执行时干扰消失,系统虽然略有延迟,却能恢复正常运行。
与系统复位的WDT类似,就地恢复的WDT也要求定时器T0(或T1)工作在定时器方式,作WDT用,中断服务程序用以修改PC的值。不同之处在于,要增加一段记录程序,以返回正确地址的程序。这段记录程序也可放在T0的初始化子程序中。T0的初始化与前述相同,是为了保证程序正常执行时计数器不发生溢出。
下面是T0初始化和程序返回点地址记录子程序REC,以及实现PC值调整的中断服务子程序WDT0。
ORG 0000H LJMP
MAIN
ORG 000BH
POP R0
;弹出故障处的PC值
WDT0:
POP R1 MOV R1, 41H
;记录在内部RAM中的正确返回地
PUSH
R1
址送PC
MOV R0, 40H PUSH SETB RETI ORG 0080H
??
R0 ET0
MAIN:
ACALL REC
??
;运行正常程序
;把栈顶保存的正确返回地址记录在
MOV 40H, R0
REC:
POP R0
片内RAM40H、41H中,供中断服
务程序调整PC用
POP R1
20

