首先 ,你要知道什么是看门狗?
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(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)哪个地方都可以啊,如果大于,看下
- 哪个地方停顿时间长就放哪
- *********************************************************************/
复制代码
|