||
今天在AT 80S52板子上做了看门狗实验。
我这个板子在群脉冲2.6KV下会被打死机,而不会复位。自然想到了51内部自带的WDT功能。在
main函数中初始化调用
void watchdog_ini(void)
{
WDTRST=0x1E;
WDTRST=0xE1;//初始化看门狗。
}
在T0定时器2ms中断中清狗
void CLR_WDT()
{
WDTRST=0x1E;
WDTRST=0xE1;//喂狗
}
====================================
先验证了下看门狗是否起作用。初始化后而不在中断中喂狗。------程序死机。
而在中断中喂狗的程序能正常工作。说明WDT已经按我的意愿工作了。
在群脉冲上调到2.6KV,跟以前同样的实验条件,我的板子还是被打死机,并且没有复位。看门狗形同虚设。
我分析:WDT用的是晶振12分频后的CPU频率,群脉冲把分频电路也打死了引起WDT不能计数。也有可能是晶振起振电路死机引起。