單片機的程序在運行過程中,為了增加系統的可靠性,防止芯片受到外界幹擾而程序跑飛等系統異常,我們引入看門狗功能,Watch Dog Timer,簡稱為WDT。如圖1.
圖1 看門狗監控單片機的程序
它本質上是一個遞增定時器,它的工作原理很簡單,當程序開始運行時,看門狗定時器的值從零開始向上遞增,當到達預設值時,就會強制單片機複位,使系統程序從頭開始運行。如圖2.
圖2 看門狗本質上是一個定時器
那麼我們如何使用它呢?我們的代碼中,當看門狗定時器的值即将溢出時将其清零,使它重新從零開始計數,那麼隻要程序正常運行,看門狗就不會強制單片機複位。這樣就實現了看門狗對程序的監控功能。如圖3.
圖3 清零看懵定時器
上述方法實現的是軟件看門狗功能,當然,我們也可以搭建硬件看門狗電路,同樣實現超時強制單片機複位的功能。他的思路就是不斷的給一個電容充電,在電容從滿電狀态放電至阈值電壓前再次充電,就能保證電路不輸出複位信号。從而實現硬件看門狗功能。如圖4.
圖4 不斷給電容充電
圖5為電路原理圖,它由兩個與非門外加阻容器件串聯而成。
圖5 硬件看門狗電路
當我們給第1引腳一個低電平,也就是喂狗的時候,A與非門輸出高電平,此時電容C兩端開始充電。同時,與非門B的兩個輸入端電平為高,那麼輸出端第4引腳就為低電平,不産生複位動作。如圖6.
圖6 不産生複位信号
喂狗操作完畢之後,第1引腳為高電平,那麼,A與非門輸出低電平,此時電容C開始放電,當電容C的電量低于阈值時,第五,六引腳電平為低,則第4引腳輸出高電平,産生複位。如圖7。圖8為産生複位時的時序圖。
圖7 産生複位信号
圖8 複位時序
我們需要操作的是在電容C放電至阈值的時間段内給第1引腳一個低電平,也就是喂狗操作,保證第4引腳持續輸出低電平,這樣就實現了看門狗對電路的監控功能。如圖9.
圖9 正常情況下不産生複位的時序圖
,