看门狗定时器原理介绍
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看门狗定时器原理介绍相关的知识,希望对你有一定的参考价值。
参考技术A watchdog timer,又被人叫做“看门狗定时器”,是单片机的一种。听上去萌态十足的名字实际上是一个计数器,当我们给看门狗一个大数时,它就会在程序开始运行后开始自动倒计时。今天小编就给大家介绍一下看门狗定时器的工作原理,感兴趣的亲赶紧收藏起本文吧!什么是看门狗定时器
看门狗定时器,作为单片机的一个重要组成部分,它起着计数器的作用,当我们交给它一个大数时,它会自动程序化地进行倒计时,如果在这个过程中程序运行平稳,过上一段时间,主板就会发出让看门狗复位的指令,看门狗据此又重新开始倒计数。如果在这个过程中看门狗减到了0这个数值,我们就可以以此判断程序某些部分出现了错误,可以采取手动的方式进行系统复位。
看门狗定时器工作原理
当我们使用它时,看门狗的数值将递增,直至达到“超时”状态,当处于休眠或者空闲的状态下,看门狗超时会强制所有的器件复位,所以为了避免看门狗超时复位,使用者必须使用CLRWDT软件等把看门狗定时器的数值定时清零。而后分频器的分配则是由软件进行控制,所以我们可以人工在执行期间进行修改。为了避免后期发生未知的器件复位,我们要设定好久看门狗定时执行的指令序列,表示“就算在WDT被禁止的情况下,也要执行这个序列。”
看门狗定时器的用途
首先看门狗定时器对汽车电子系统的电路检测有着重要的作用,同时还能检测故障容限以及各种安全性的参数。其次,某些微控制器在日常工作条件下的周期脉冲也能通过看门口定时器来检测,IC或者电路失效的情况一般都能检测的出来。像大多数微控制器一旦发生不可预知的故障时,看门狗定时器还能立即反应,切换到备份系统,不会影响整体的进程。
了解了这么多关于看门狗定时器原理的相关知识,相信大家再也不会对这个名词感到陌生了,想要了解更多的生活常识,欢迎继续关注土巴兔装修网,这期的电子知识介绍完毕,下期我们在土巴兔上不见不散!
在线算报价免费
房子装修一平方多少钱?
- 在线客服官方服务
- 官方网站装修报价免费设计
zigbee学习之路:看门狗
一.前言
今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来。
二.原理与分析
在CPU 可能受到一个软件颠覆的情况下,看门狗定时器(WDT)用作一个恢复的方法。当软件在选定时间间隔内不能清除WDT 时,WDT 必须就复位系统。看门狗可用于受到电气噪音、电源故障、静电放电等影响的应用,或需要高可靠性的环境。如果一个应用不需要看门狗功能,可以配置看门狗定时器为一个间隔定时器,这样可以用于在选定的时间间隔产生中断。这也是我们学习看门狗的作用,我们首先要配置WDT寄存器,WDT寄存器如下:
这次实验选用的是看门狗模式,时间间隔1秒检测一次,清除位也要配置,相当于喂狗。
三.程序
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
#define LED1 P1_0 //P1_0连接LED1
#define LED2 P1_1 //P1_1连接LED2
#define LED3 P1_4 //P1_4连接LED3
//函数声明 void LED_IO_Init(void); void Watchdog_Init(void); void FeetDog(void); void Delayms(uint xms);
/********************* 函 数 名 : main 功能描述 : WatchDog测试(通过注释掉“喂狗函数”来观察实验现象) 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE ****************/
void main(void)
{
LED_IO_Init(); //LED IO初始化
Watchdog_Init(); //看门狗初始化
while(1)
{
LED1=~LED1;
Delayms(1000); //通过注释测试,可以看到LCD1以少于1s的时间间隔闪烁,说明系统在不停地复位 //
FeetDog(); // 防止程序跑飞
} }
/*************** 函 数 名 : LED_IO_Init 功能描述 : LED_IO初始化函数 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE *********/
void LED_IO_Init(void)
{
P1DIR=0xff;
LED1=0; //点亮LED1
LED2=0; //点亮LED2,指示作用
LED3=1; //点亮LED3,指示作用
}
/************************ 函 数 名 : Watchdog_Init 功能描述 : 看门狗初始化函数 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE *************************/
void Watchdog_Init(void)
{
WDCTL = 0x00; //这是必须的,打开IDLE才能设置看门狗
WDCTL |= 0x08; //时间间隔一秒,看门狗模式
}
/************************ 函 数 名 : FeetDog 功能描述 : 喂狗函数 输入参数 : NONE 输出参数 : NONE 返 回 值 : NONE ************************/
void FeetDog(void) { WDCTL = 0xa0; WDCTL = 0x50; }
/*************************** 函 数 名 : Delayms 功能描述 : 毫秒延时 输入参数 : xms:延时时间,如 i=xms 即延时i/2毫秒 输出参数 : none 返 回 值 : none ***********************/
void Delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=587;j>0;j--);
}
四.总结
通过上面这个程序,我们可以看出,主程序里一直在执行FeetDog()这个函数,也就是说一直在喂狗,使看门狗不进行复位,如果没有喂狗这个函数,看门狗就要咬人了,也就是让程序不断的复位,从头开始执行,看门狗在实际项目应用中,还是很常见的,希望大家多多理解。
以上是关于看门狗定时器原理介绍的主要内容,如果未能解决你的问题,请参考以下文章