看门狗.txt

来自「51单片机初学者的一些参考C程序」· 文本 代码 · 共 35 行

TXT
35
字号
#include <reg52.h> 
#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--) 
for(j=110;j>0;j--);
}
void main()
{
	WDT_CONTR=0x35;
	led1=0;
	delayms(500);
	led1=1;
	while(1) 
	{
		delayms(1000);
		WDT_CONTR=0x35; 
	}
}
(1)“sfr WDT_CONTR=0xe1;”定义STC单片机中新加入的看门狗寄存器,因为reg52.h头文件中没有对该寄存器的定义,以后要定义其它新的寄存器时方法相同,当然也可以写在reg52.h头文件中。

(2)程序开始后,点亮发光二极管后延时约500ms后再熄灭,这里延时不可过长,若两次喂狗之间程序运行的总时间超过看门狗的溢出时间,看门狗将复位单片机,大家可调节这个延时时间看实际演示效果。

(3)喂狗时使用和设定看门狗寄存器同样的语句,只要看门狗寄存器中的CLR_WDT位被置1,看门狗定时器将重新计数,CLR_WDT位被置1后,由硬件自动将其清零。

(4)演示结果表现为发光二极管点亮后,马上熄灭,再不会点亮,这说明程序没有被复位,始终停止在while(1)循环中,看门狗处于被正常喂狗的情况下。

【例】只需把while(1)循环中的“WDT_CONTR=0x35;”这句删掉,演示结果为小灯不停的闪烁,因为有了看门狗的作用,当看门狗定时器溢出时,使单片机复位从头重新执行程序,所以小灯闪烁。

在应用看门狗时,需要在整个大程序的不同位置喂狗,每两次喂狗之间的时间间隔一定不能小于看门狗定时器的溢出时间,否则程序将会不停的复位。 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?