STC12C2052AD單片機(jī)看門狗及其溢出時(shí)間計(jì)算公式
;本程序用于驗(yàn)證STC12C2052AD系列單片機(jī)的看門狗及其溢出時(shí)間計(jì)算公式
;看門狗及其溢出時(shí)間=(12*Pre_scale*32768)/OscillatorFrequency
WDTCREQU0E1H;看門狗地址
WDT_TIME_LEDEQUP1.5;用P1.5控制看門狗溢出時(shí)間指示燈,
;看門狗溢出時(shí)間可由該指示燈亮的時(shí)間長(zhǎng)度或熄滅的時(shí)間長(zhǎng)度表示
WDT_FLAG_LEDEQUP1.7;用P1.7控制看門狗溢出復(fù)位指示燈,如點(diǎn)亮表示為看門狗溢出復(fù)位
Last_WDT_Time_LED_StatusEQU00H;位變量,存儲(chǔ)看門狗溢出時(shí)間指示燈的上一次狀態(tài)位
;WDT復(fù)位時(shí)間(Oscillatorfrequency=18.432MHz):
;Pre_scale_WordEQU00111100B;清0、啟動(dòng)看門狗,預(yù)分頻數(shù)=320.68S
Pre_scale_WordEQU00111101B;清0、啟動(dòng)看門狗,預(yù)分頻數(shù)=641.36S
;Pre_scale_WordEQU00111110B;清0、啟動(dòng)看門狗,預(yù)分頻數(shù)=1282.72S
;Pre_scale_WordEQU00111111B;清0、啟動(dòng)看門狗,預(yù)分頻數(shù)=2565.44S
ORG0000H
AJMPMAIN
ORG0100H
MAIN:
MOV A,WDTCR;檢測(cè)是否為看門狗復(fù)位
ANLA,#10000000B
JNZWDT_Reset;WDTCR.7=1,看門狗復(fù)位,跳轉(zhuǎn)到看門狗復(fù)位程序
;上電復(fù)位,冷啟動(dòng),RAM單元內(nèi)容為隨機(jī)值
SETBLast_WDT_Time_LED_Status;上電復(fù)位,
;初始化看門狗溢出時(shí)間指示燈的狀態(tài)位=1
CLRWDT_TIME_LED;上電復(fù)位,點(diǎn)亮看門狗溢出時(shí)間指示燈
MOV WDTCR,#Pre_scale_Word;啟動(dòng)看門狗
WAIT1:
SJMPWAIT1;循環(huán)執(zhí)行本語(yǔ)句(停機(jī)),等待看門狗溢出復(fù)位
;看門狗復(fù)位,熱啟動(dòng),RAM單元內(nèi)容不變,為復(fù)位前的值
WDT_Reset:;看門狗復(fù)位,熱啟動(dòng)
CLRWDT_FLAG_LED;點(diǎn)亮看門狗溢出復(fù)位指示燈
JBLast_WDT_Time_LED_Status,Power_Off_WDT_TIME_LED
;根據(jù)看門狗溢出時(shí)間指示燈的上一次狀態(tài)位設(shè)置WDT_TIME_LED燈,
;若上次亮本次就熄滅,若上次熄滅本次就亮
CLRWDT_TIME_LED;上次熄滅本次點(diǎn)亮看門狗溢出時(shí)間指示燈
CPLLast_WDT_Time_LED_Status;將看門狗溢出時(shí)間指示燈的上一次狀態(tài)位取反
WAIT2:
SJMPWAIT2;循環(huán)執(zhí)行本語(yǔ)句(停機(jī)),等待看門狗溢出復(fù)位
Power_Off_WDT_TIME_LED:
SETBWDT_TIME_LED;上次亮本次就熄滅看門狗溢出時(shí)間指示燈
CPLLast_WDT_Time_LED_Status;將看門狗溢出時(shí)間指示燈的上一次狀態(tài)位取反
WAIT3:
SJMPWAIT3;循環(huán)執(zhí)行本語(yǔ)句(停機(jī)),等待看門狗溢出復(fù)位
END