📄 看门狗.txt
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -