STC89C52單片機(jī)入門-看門狗
引言在電腦系統(tǒng)中,為了防止系統(tǒng)在異常情況下受到干擾,MCU/CPU程序跑飛,導(dǎo)致系統(tǒng)長時(shí)間異常工作,通常會(huì)引進(jìn)看門狗??撮T狗是一種特殊的定時(shí)器,如果MCU/CPU不在規(guī)定的時(shí)間內(nèi)按要求訪問看門狗,就認(rèn)
引言
在電腦系統(tǒng)中,為了防止系統(tǒng)在異常情況下受到干擾,MCU/CPU程序跑飛,導(dǎo)致系統(tǒng)長時(shí)間異常工作,通常會(huì)引進(jìn)看門狗??撮T狗是一種特殊的定時(shí)器,如果MCU/CPU不在規(guī)定的時(shí)間內(nèi)按要求訪問看門狗,就認(rèn)為MCU/CPU處于異常狀態(tài)。看門狗將強(qiáng)迫MCU/CPU復(fù)位,使系統(tǒng)重新從頭開始按規(guī)律執(zhí)行用戶程序。這樣的設(shè)計(jì)可以使單片機(jī)系統(tǒng)的可靠性變得更加方便和簡潔。
WDT_CONTR: 看門狗控制寄存器
看門狗控制寄存器(WDT_CONTR)用于設(shè)置看門狗的工作模式和定時(shí)器預(yù)分頻值。具體功能如下表所示:
| 符號(hào) | 功能 |
|--------|--------------|
| DIV | 分頻 |
| EN_WDT | 啟用看門狗 |
| CLR_WDT| 清除看門狗計(jì)數(shù) |
設(shè)置定時(shí)器為50MS
為了實(shí)現(xiàn)一個(gè)穩(wěn)定的看門狗功能,我們需要將定時(shí)器設(shè)置為50毫秒。這可以通過設(shè)置WDT_CONTR寄存器為0x37來實(shí)現(xiàn),即00110111。
看門狗溢出時(shí)間和清零次數(shù)
在設(shè)置看門狗的過程中,需要考慮看門狗溢出時(shí)間和清零次數(shù)的問題。根據(jù)前面的設(shè)置,看門狗的溢出時(shí)間為9.1022秒。而每次累加165次就是8.250秒,所以需要在這個(gè)時(shí)間范圍內(nèi)進(jìn)行一次看門狗的清零操作,這樣可以留出一定的余量。
設(shè)置定時(shí)器中斷函數(shù)和優(yōu)先級(jí)
如果你的程序中有外部中斷或其他中斷存在,一般應(yīng)該將看門狗定時(shí)器的優(yōu)先級(jí)設(shè)置為最高優(yōu)先級(jí)。在主程序main中,可以通過在while(1)循環(huán)之前寫入IP2; IPH2;來設(shè)置T0為最高優(yōu)先級(jí)。
結(jié)論
通過正確設(shè)置和使用看門狗定時(shí)器,可以有效防止單片機(jī)系統(tǒng)在異常情況下失控和工作異常。這種設(shè)計(jì)使得系統(tǒng)的可靠性變得更加方便和簡潔,對(duì)于電腦系統(tǒng)的穩(wěn)定運(yùn)行起到了重要的作用。