本帖最后由 Kxuan163 于 2020-12-18 23:06 編輯
一、制作因由:
筆者開發了一個以AT89s52為MCU的家電控制系統。
在未有看門狗之前,控制系統受到來自所控對象電路通/斷或電網波動之類的干擾,時有程序指針跑飛的死機異常。
為保障控制系統工作可靠穩定,決定使用看門狗(Watchdog)。
起初,試用AT89s52片內的看門狗WDT, 實踐中發現WDT不可靠----當晶振受干擾而停振時,WDT失效。
決定改用抗干擾能力較強的片外看門狗。有行家提及,可選用片外狗芯片MAX708、MAX813、X25045.....
筆者手頭上無該類芯片實物及資料。于是自行設計制作了本文所述的片外看門狗。
半年多以來的使用實踐表明,筆者自制的這個片外看門狗有效、實用。
二、基本工作原理:
(1)在單片機程序正常運行狀態:
每隔t0時間,T0中斷服務程序"喂狗"一次,使它暫不"犬吠"
t0≈65毫秒,由T0初始化程序設置定(請參閱下述的程序塊代碼 )。
所謂"喂狗",就是由單片機PO.3引腳輸出低電平信號,送至片外狗電路的U3_2腳,使狗不"犬吠"。
("喂狗"的實際細節請參閱下述的流程圖)
(2)因外界干擾導致程序指針跑飛或晶振停振,不能定時喂狗:
若停止喂狗時間長達td(≈6秒),則狗"犬吠",使單片機復位,復位后恢復平定時喂狗功能。
所謂"犬吠",就是由J5_3腳輸出高電平信號送至單片機RST引腳(細節請參閱下述的流程圖)。
td時間長短取決于R3阻值與C2電容值的乘積,即RC充放電時間常數。
三、片外看門狗電路圖:
我的單片機片外看門狗電路.jpg (69.22 KB, 下載次數: 44)
下載附件
2020-12-11 22:57 上傳
四、片外看門狗工作流程圖:
片外看門狗工作流程圖.jpg (133.76 KB, 下載次數: 42)
下載附件
2020-12-11 22:57 上傳
五、89s52單片機與喂狗相關的程序塊:
;;--------------------------------------------
ORG 000BH ;定時器T0中斷處理入口地址
AJMP T0_INT
;;--------------------------------------------
;;
;;
;;--------------------------------------------
SET_T0: ;; T0初始化,
;; 定時65ms的計數值 =65000μs/1μs =65000
;; 方式1,16位計數器,計數值 =65536-65000 =536 =218H
MOV TMOD, #01H ;; T0定時模式.方式1(16位計數器)
MOV TH0, #02H ;; 裝入計數初值高字節
MOV TL0, #18H ;; 裝入計數初值低字節
SETB TR0 ;; 啟動T0
SETB ET0 ;; 允許T0中斷
SETB EA ;; MPU開中斷
RET
;;-------------------------------------------
;;
;;
;;-------------------------------------------
T0_INT: ;; T0定時中斷處理程序,每隔65ms喂狗一次
CLR P0.3 ;; 89s52的P0.3引腳輸出低電平
MOV TH0, #02H ;; 重裝計數初值高字節
MOV TL0, #18H ;; 重裝計數初值低字節
RETI
;;--------------------------------------------
|