如何玩转看门狗
看门狗是从英文Watchdog翻译过来的,全称为watchdog timer,即看门狗定时器。本质上它是一个定时器,一般用作单片机程序的监控,当该定时器溢出时系统会进行一次复醐蛑臀谁位,避免程序持续异常造成严重事件。清看门狗定时器的操作叫做“喂狗”,通常会在主程序的特定位置进行“喂狗”操作,当程序运行异常(跑飞或者阻塞)后“喂狗”操作就不能及时执行,导致看门狗溢出,迫使系统复位。在应用上分为硬件看门狗和软件看门狗两种。
硬件看门狗
1、硬件看门狗具备独立的看门狗电路,这个电路可以使独立于单片机的,也可以是单片机内部集成的。其中,外部看门狗电路本质上是一个可控的外接定时器电路,通过将该定时器电路的输出端口和单片机的复位端口相连,将电路的输入端口和单片机的某个端口相连,在程序正常工作是对看门狗电路清零,当程序异常时,由于没有及时清零,看门狗电路溢出后在单片机复位端口产生一个复位信号,使得单片机程序重新回归正轨。

3、如果担心三极管失效长通导致单片机复位端口一直为高电平,那么可以在看门狗电路的输出端加一个电容进行耦合,这样可以保证该电路仅对脉冲信号有效,对于持续的高电平则无效。

5、看门狗设置完毕后,只需要在主循环指定位置使用相关指令清零看门狗即可完成“喂狗”操作。#define CLR_WDT() {WDT_CONTR = 0x17;}void main(void){ while(1) { CLR_WDT();//清看门狗 }}

2、第一步:设置定时器的溢出值,定义一个变量WTD_TICK,在定时器中断对该变量累加,当该变量累加到一定值后将程序跳转值程序起始位置,迫使程序复位。
