多语言展示
当前在线:572今日阅读:117今日分享:28

如何玩转看门狗

看门狗是从英文Watchdog翻译过来的,全称为watchdog timer,即看门狗定时器。本质上它是一个定时器,一般用作单片机程序的监控,当该定时器溢出时系统会进行一次复位,避免程序持续异常造成严重事件。清看门狗定时器的操作叫做“喂狗”,通常会在主程序的特定位置进行“喂狗”操作,当程序运行异常(跑飞或者阻塞)后“喂狗”操作就不能及时执行,导致看门狗溢出,迫使系统复位。在应用上分为硬件看门狗和软件看门狗两种。
硬件看门狗
1

硬件看门狗具备独立的看门狗电路,这个电路可以使独立于单片机的,也可以是单片机内部集成的。其中,外部看门狗电路本质上是一个可控的外接定时器电路,通过将该定时器电路的输出端口和单片机的复位端口相连,将电路的输入端口和单片机的某个端口相连,在程序正常工作是对看门狗电路清零,当程序异常时,由于没有及时清零,看门狗电路溢出后在单片机复位端口产生一个复位信号,使得单片机程序重新回归正轨。

2

下面是一个由分立元件组成的看门狗电路:图中的单片机的第7脚是复位端口,C2和R3构成基本的复位电路(高电平复位)。C1、R1、R2、Q1构成看门狗电路,当R1和C1连接的P12端口为低电平是三极管Q1导通,RST脚被设定为高电平,单片机进入复位阶段。电容C1是为了保证足够的复位时间。需要注意的时,这个电路必须保证P12端口上电是浮空或者高电平状态,否则会导致单片机一直处于复位状态,无法正常工作。

3

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

4

对于内部集成看门狗电路的应用,只需要设置好看门狗的溢出时间、使能看门狗功能,这个操作不同的单片机有所区别,具体可参考相关规格书。

5

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

软件看门狗
1

对于某些单片机,比如古老的80C51单片机,由于内部没有集成看门狗电路,为了节省成本,一般可以使用定时器来充当看门狗。

2

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

3

第二步:在主循环中指定位置对WTD_TICK进行清零,这个操作也可以叫做“喂狗”。

推荐信息