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