单片机-89C51部分:13、看门狗
飞书文档https://x509p6c8to.feishu.cn/wiki/LefkwDPU7iUUWBkfKE9cGLvonSh
一、作用
程序发生死循环的时候(跑飞),能够自动复位。
启动看门狗计数器->计数器计数->指定时间内不对计数器赋值(主程序跑飞,无法喂狗)->溢出,发出复位信号。
二、设置步骤
- 设置“看门狗”相关寄存器, 启动“看门狗”;
- 隔一段时间清零一次,“喂狗”;
- 如果程序正常,一直运行;如果程序出错,没有按时“喂狗”,“看门狗”就在溢出的时候,复位系统。
0b0011 0101
EN_WDT:设置为1,启动看门狗
CLR_WDT:设置为1,开始重新计数
IDLE_WDT:设置为0,空闲模式不计数,我们设备工作时处于正常模式,可以通过寄存器设置进入掉电模式、空闲模式,以节省电量。
PS2 PS1 PS0:设置溢出时间
溢出时间是=(N* Prescale* 32768)/晶振频率
N是单片机的时钟周期,默认是12
Prescale是预分频数,由PS2 PS1 PS0组成
如:
程序:
#include <reg52.h>sfr WDT_CONTR=0xe1; //无需这句是否正常?
sbit led=P2^7;void delayms(unsigned int xms) {unsigned int i,j;for (i=xms;i>0;i--)for(j=110;j>0;j--);
}void main()
{WDT_CONTR=0x35; //启动看门狗,开始重新计数,预分频数为64,2s不喂狗会溢出并复位led=0;delayms(500);led=1;while(1){delayms(3000);WDT_CONTR=0x35;}
}