首页 理论教育 单片机看门狗定时器的使用示例

单片机看门狗定时器的使用示例

时间:2023-10-23 理论教育 版权反馈
【摘要】:在单片机程序运行正常情况下,软件会在一定时间内对看门狗定时器及时清零复位,从而保证系统不被重启,这个程序称为喂狗程序。一旦出现程序死循环故障,喂狗程序失效,不能对看门狗定时器及时来清零,就会导致计数溢出,重启系统。STC89C5×系列单片机给内部看门狗提供了6时钟周期和12时钟周期两种机器周期,可以在下载程序过程中对下载软件有关项进行修改。

单片机看门狗定时器的使用示例

由于环境、电磁干扰或程序可靠性等因素的影响,单片机系统程序有时会出现运行中断或错误,从而造成整个系统瘫痪。人们通常把单片机软件运行故障称“跑飞或死机”现象。单片机的程序“跑飞”对系统的危害极大,有时会发生不可预料的严重后果。

作为电子系统的核心控制单元,单片机的运行状态必须有实时监测和自我保护机制,因此人们设计出一种专门用于单片机程序运行状态的监测电路,俗称“看门狗”(WATCH DOG)。看门狗可以制作成独立芯片作为单片机的外围部件使用,如X5045芯片,也可以集成在单片机内部,如增强型51系列单片机。在单片机系统设计时,看门狗可作为单片机内部硬件资源直接应用。

1.看门狗的工作原理

看门狗实际上是一个定时器或计数器,简称WDT。单片机运行工作中,看门狗会对单片机机器周期脉冲不停计数,当单片机程序陷入死循环时,单片机程序如果不能及时对看门狗的定时器复位,看门狗就会在其定时器计满溢出时产生一个复位信号,从而使系统重启。在单片机程序运行正常情况下,软件会在一定时间内对看门狗定时器及时清零复位,从而保证系统不被重启,这个程序称为喂狗程序。

看门狗应用时,首先确定看门狗计数器的位数,然后参考计数脉冲周期计算出看门狗计数溢出所需的时间T,喂狗程序喂狗时间要小于T,这样隔一段时间喂一次狗,只要程序正常运行,看门狗定时器就不会溢出。一旦出现程序死循环故障,喂狗程序失效,不能对看门狗定时器及时来清零,就会导致计数溢出,重启系统。

比如,一个WDT为16bit,最大计数65535,如果单片机的机器脉冲周期为1μs,WDT从0开始计到65535共耗时65ms,若程序在每隔50ms左右对WDT清零一次,只要程序正常运行,计数器永远不会计满,也就永远不会被“看门狗”复位。喂狗的时间是程序设计用户自定的,只要不超过65ms即可。

看门狗一般有软件看门狗和硬件看门狗两种。软件看门狗不需增加电路,但要占用单片机系统的一个定时器资源,若系统软件运行不正常,可能导致看门狗系统也瘫痪,所以软件看门狗在系统设计时很少被采用。

2.STC系列单片机的片内看门狗

STC系列单片机内部自带看门狗电路,通过对其相应特殊功能寄存器(WDT_CONTR)进行设置,就可实现系统具有看门狗的自动保护功能。

(1)溢出时间估算

STC89C5X系列单片机由于采用了预分频技术,它的溢出时间为

TN×P×32768

中,N是单片机的机器周期;P(Presales)是预分频数,可通过设置看门狗控制寄存器得到。STC89C5×系列单片机给内部看门狗提供了6时钟周期和12时钟周期两种机器周期,可以在下载程序过程中对下载软件有关项进行修改。比如,单片机的晶振频率为12MHz,如果单片机机器周期N=1μs,此时选择P=2,则看门狗溢出时间约为65.5ms,使用时,只需在65.5ms之内对看门狗定时器清零(喂狗)即可。

(2)看门狗定时器寄存器WDT_CONTR设置

在STC89C5×系列单片机内部,WDT_CONTR寄存器主要用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。WDT_CONTR在特殊功能寄存器中的字节地址为E1H,不能位寻址,单片机复位时该寄存器不一定全部被清零。在STC下载程序软件界面上,可通过设置来复位看门狗。WDT_CONTR各个位见表4-6。

表4-6 看门狗定时器寄存器(WDT_CONTR)各位设置

978-7-111-43463-4-Chapter04-90.jpg(www.xing528.com)

EN_WDT,看门狗定时器允许位,当设置为“1”时,启动看门狗。

CLR_WDT,看门狗定时器清零位,当设为“1”时,看门狗定时器将重新计数。硬件自动清“0”此位。

IDLE_WDT,看门狗定时器“IDLE”模式位,当设置为“1”时,看门狗定时器在单片机的“空闲模式”计数,当清零该位时,看门狗定时器在单片机的“空闲模式”时不计数。PS2、PS1、PS0,看门狗定时器预分频值,不同值对应预分频数见表4-7。

表4-7 看门狗定时器预分频值(单片机晶振频率为12MHz)

978-7-111-43463-4-Chapter04-91.jpg

看门狗溢出时间越长,喂狗时间越长,程序可以节省更多的单片机硬件资源,尤其是对时间要求精准的系统,如果程序执行过程中不停地“喂狗”,就会占用单片机资源。

3.看门狗应用

STC系列单片机片内看门狗应用程序设计的一般步骤为:设置看门狗相关寄存器、启动看门狗、隔一段时间对看门狗清零一次(俗称喂狗)。如果程序运行正常,看门狗计数器不会计满溢,说明程序运行正常,如果程序出错,没有按时“喂狗”,“看门狗”就在溢出的时候会让单片机系统复位。下面通过一个实验说明看门狗的作用。

参考电路可采用项目1单只LED的闪烁电路,这里设定看门狗时间为1s,在1s内必须再次喂狗,否则单片机自动复位。通过发光二极管可以看出其看门狗是否起作用。看门狗演示项目程序如下:

978-7-111-43463-4-Chapter04-92.jpg

978-7-111-43463-4-Chapter04-93.jpg

由于reg52.h头文件不包含看门狗定时器WDT_CONTR的定义,因此需要使用寄存器声明关键字sfr对WDT_CONTR的地址进行声明,0x01为WDT_CONTR的地址。

WDT_CONTR=0x14,设置看门狗定时器的工作情况为启动、空闲模式计数,预分频数位为2,溢出时间为65.5ms。

WDT_CONTR=0x24,设置看门狗定时器的工作情况为CLR_WDT=0,看门狗定时器清零,其他位不变。

在此程序中,看门狗定时器一直被清零时,看门狗不起作用,程序在while(1)处循环,发光二极管只闪烁一次;当屏蔽掉喂狗程序后,1s后单片机重启,会看到LED一直处于闪烁状态。程序编译后可以下载到STC单片机实验开发板上运行,观察屏蔽前和屏蔽后的LED效果,验证看门狗在系统中的作用。

应用看门狗时,需要在程序中选择合适的位置加入喂狗语句,连续两次喂狗之间的时间间隔不能大于看门狗定时器的溢出时间,否则程序将会重新复位。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈