飛書文檔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;}
}