;本程序用于驗證 STC12C2052AD 系列單片機的看門狗及其溢出時間計算公式;看門狗及其溢出時間 = (12 * Pre_scale *32768)/Oscillator frequencyWDTCR EQU 0E1H ;看門狗地址WDT_TIME_LED EQU P1.5 ;用 P1.5 控制看門狗溢出時間指示燈, ;看門狗溢出時間可由該指示燈亮的時間長度或熄滅的時間長度表示WDT_FLAG_LED EQU P1.7 ;用 P1.7 控制看門狗溢出復位指示燈, 如點亮表示為看門狗溢出復位Last_WDT_Time_LED_Status EQU 00H ;位變量, 存儲看門狗溢出時間指示燈的上一次狀態位;WDT 復位時間(Oscillator frequency = 18.432MHz):;Pre_scale_Word EQU 00111100B ;清0、啟動看門狗,預分頻數=32 0.68SPre_scale_Word EQU 00111101B ;清0、啟動看門狗,預分頻數=64 1.36S;Pre_scale_Word EQU 00111110B ;清0、啟動看門狗,預分頻數=128 2.72S;Pre_scale_Word EQU 00111111B ;清0、啟動看門狗,預分頻數=256 5.44S ORG 0000H AJMP MAIN ORG 0100HMAIN: MOV A, WDTCR ;檢測是否為看門狗復位 ANL A, #10000000B JNZ WDT_Reset ;WDTCR.7 = 1, 看門狗復位, 跳轉到看門狗復位程序;上電復位, 冷啟動, RAM 單元內容為隨機值 SETB Last_WDT_Time_LED_Status ;上電復位, ;初始化看門狗溢出時間指示燈的狀態位 = 1 CLR WDT_TIME_LED ;上電復位, 點亮看門狗溢出時間指示燈 MOV WDTCR, #Pre_scale_Word ;啟動看門狗WAIT1: SJMP WAIT1 ;循環執行本語句(停機),等待看門狗溢出復位;看門狗復位, 熱啟動, RAM 單元內容不變, 為復位前的值WDT_Reset: ;看門狗復位, 熱啟動 CLR WDT_FLAG_LED ;點亮看門狗溢出復位指示燈 JB Last_WDT_Time_LED_Status, Power_Off_WDT_TIME_LED ;根據看門狗溢出時間指示燈的上一次狀態位設置 WDT_TIME_LED 燈, ;若上次亮本次就熄滅, 若上次熄滅本次就亮 CLR WDT_TIME_LED ;上次熄滅本次點亮看門狗溢出時間指示燈 CPL Last_WDT_Time_LED_Status ;將看門狗溢出時間指示燈的上一次狀態位取反WAIT2: SJMP WAIT2 ;循環執行本語句(停機),等待看門狗溢出復位Power_Off_WDT_TIME_LED: SETB WDT_TIME_LED ;上次亮本次就熄滅看門狗溢出時間指示燈 CPL Last_WDT_Time_LED_Status ;將看門狗溢出時間指示燈的上一次狀態位取反WAIT3: SJMP WAIT3 ;循環執行本語句(停機),等待看門狗溢出復位 END |