单片机的看门狗怎么用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机的看门狗怎么用相关的知识,希望对你有一定的参考价值。

写个简单的程序,看懂了 加很多分奥!!!

首先 ,你要知道什么是看门狗?
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog)。
其次,看门狗的工作原理是什么?
在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗(俗称喂狗)。
下面这段程序是我成功调试过了的,看门狗寄存器的各位的具体的意义,你可以自己去看下单片机的PDF文档,里面有详细的介绍...................
#include <reg52.h> 52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
sfr WDT_CONTR=0xe1;/*看门狗寄存器声明*/
sbit led1=P1^0; /*接发光二极管*/
void delayms(uint xms) /*延时函数*/

uint i,j;
for(i=xms;i>0;i--) /*i=xms即延时约xms毫秒 */
for(j=110;j>0;j--);

void main()

WDT_CONTR=0x35;
led1=0;
delayms(500);
led1=1;
while(1)

delayms(1000);
// WDT_CONTR=0x35;/*喂狗,如果这句话不加的话单片机就 会一直复位,看到的现象是发光二极管闪烁,加上这句的话,发光二极管一直亮着,所以在实际工程应用的时候通常要在程序里面调用比较频繁的函数内部写上这句话*/


/*******************************************************************
喂狗的技巧:如果一个大循环少于看门狗益处时间,
放在while(1)哪个地方都可以啊,如果大于,看下
哪个地方停顿时间长就放哪
*********************************************************************/
参考技术A 首先,你要知道什么是看门狗?在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog)。其次,看门狗的工作原理是什么?在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。所以在使用有看门狗的芯片时要注意清看门狗(俗称喂狗)。下面这段程序是我成功调试过了的,看门狗寄存器的各位的具体的意义,你可以自己去看下单片机的PDF文档,里面有详细的介绍.#include52系列单片机头文件#defineucharunsignedchar#defineuintunsignedintsfrWDT_CONTR=0xe1;/*看门狗寄存器声明*/sbitled1=P1^0;/*接发光二极管*/voiddelayms(uintxms)/*延时函数*/uinti,j;for(i=xms;i>0;i--)/*i=xms即延时约xms毫秒*/for(j=110;j>0;j--);voidmain()WDT_CONTR=0x35;led1=0;delayms(500);led1=1;while(1)delayms(1000);//WDT_CONTR=0x35;/*喂狗,如果这句话不加的话单片机就会一直复位,看到的现象是发光二极管闪烁,加上这句的话,发光二极管一直亮着,所以在实际工程应用的时候通常要在程序里面调用比较频繁的函数内部写上这句话*//*******************************************************************喂狗的技巧:如果一个大循环少于看门狗益处时间,放在while(1)哪个地方都可以啊,如果大于,看下哪个地方停顿时间长就放哪*********************************************************************/ 参考技术B 看门狗计时器开始倒数
在倒数为0之前及时喂狗,即重置看门狗计时器,若否,进行软件复位
这是俺的理解而已
参考技术C 看门狗分为芯片内 和芯片外两种

原理 等一段时间没喂狗 则导致单片机复位

芯片外的喂狗方式 一般是一个引脚电平变化

芯片内喂狗 一般是想寄存器随便写个数据
参考技术D 带复位输入及溢出信号的计数器电路都可充当看门狗。
1、复位输入作为喂狗信号的输入。溢出信号(也可用译码器自行构建)作为复位信号输出。
2、复位信号输出与单片机的复位引脚相连,注意复位电平,例如,单片机是高电平复位,看门狗复位输出是低电平,那么,需要加一个反相器,或者选择电平匹配的看门狗。
3、复位输入信号与单片机的任意一个IO相连,单片机程序中每隔一段时间输出一个复位信号,时间间隔需小于看门狗计数器的溢出周期。
4、某些单片机内部就有看门狗,并且提供专用的喂狗指令。这种情况下,只需要在程序中初始化看门狗,然后,定时执行一次喂狗指令即可。

看门狗 (监控芯片)

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。
看门狗,又叫 watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。 看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。

定义

编辑
看门狗,又叫watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog/service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。 [1] 

基本原理

编辑
看门狗是一种监控系统的运行状况的手段,通过软硬件结合的方式实现对系统运行状况的监控。稳定运行的软件会在执行完特定指令后进行喂狗,若在一定周期内看门狗没有收到来自软件的喂狗信号,则认为系统故障,会进入中断处理程序或强制系统复位。系统上电后根据不同的工作模式可以选择使能看门狗的时机,若看门狗被使能则计数器开始计数,如果在设定的时间内没有及时喂狗则会发生看门狗超时。看门狗主要由寄存器、计数器和狗叫模块构成:通过寄存器对看门狗进行基本设置,计数器计算狗叫时间,狗叫模块决定看门狗超时后发出的中断或复位方式。 [2] 

应用

编辑
看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。 [3] 

分类

编辑

硬件看门狗

硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813,5045,IMP 813等。

软件看门狗

而在某些情况下,也会采用纯软件的方法来设置看门狗,如在单片机系统中,利用闲置的定时器/计数器就可以设计一个软件看门狗。具体实现步骤如下:
首先,在初始化程序中设置定时器/计数器的方式以控制寄存器(TMOD) 和定时时间的初值,并且打开中断。
然后,根据定时器的时间,在主程序中按一定的时间间隔插人复位定时器的指令(喂狗), 两条喂狗指令之间的时间间隔可以根据系统时钟与指令周期计算出来,而且该时间周期应该小于定时器的定时时间。
最后,在定时器的中断服务程序中,设置一条无条件转移指令,将程序计数器PC转移到初始化程序的入口。
在非单片机系统,如PowerPC系统中,也可以采用多线程的方式来设置软件狗,其主要的步骤如下所述:
首先,新建一个看门狗线程,该线程维护一个全局变量数组,该数组相当于每个工作线程的计数器。看门狗线程为一一个死循环,每隔一段时间就会循环一次,并将全局变量数组的每一个值都加1后判断是否超过预定义的上限值,若发现某个线程对应的变量数值超过最大值,则看门狗线程会重置该线程。
然后,每个工作线程中,每隔一段时间就会将对应的全局变量置0 (喂狗)。
软件看门狗的优点是无需额外的硬件支持,但当系统存在严重的错误时(例如:中断服务出错),则有可能导致软件看门狗失效。 [4]

以上是关于单片机的看门狗怎么用的主要内容,如果未能解决你的问题,请参考以下文章

PIC单片机看门狗程序,关闭看门狗程序正常,打开后异常。请指点错误之处,谢谢 代码如下

看门狗定时器原理介绍

单片机中的看门狗是啥东西,有啥作用

计算机高手解释一下硬件看门狗是什么意思?

STC15W201S系列单片机 实现外部电路的软件看门狗程序设计

当AT89S51单片机运行出错或程序陷入死循环时,如何摆脱困境?