微控制器看門狗的使用
阿新 • • 發佈:2018-12-19
首先 ,你要知道什麼是看門狗?
在由微控制器構成的微型計算機系統中,由於微控制器的工作常常會受到來自外界電磁場的干擾,造成程式的跑飛,而陷入死迴圈,程式的正常執行被打斷,由微控制器控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的後果,所以出於對微控制器執行狀態進行實時監測的考慮,便產生了一種專門用於監測微控制器程式執行狀態的晶片,俗稱"看門狗"(watchdog)。
其次,看門狗的工作原理是什麼?
在系統執行以後也就啟動了看門狗的計數器,看門狗就開始自動計數,如果到了一定的時間還不去清看門狗,那麼看門狗計數器就會溢位從而引起看門狗中斷,造成系統復位。所以在使用有看門狗的晶片時要注意清看門狗(俗稱喂狗)。
下面這段程式是我成功除錯過了的,看門狗暫存器的各位的具體的意義,你可以自己去看下微控制器的 PDF文件,裡面有詳細的介紹
#include <reg52.h> 52系列微控制器標頭檔案 #define uchar unsigned char #define uint unsigned int sfr WDT_CONTR=0xe1;/*看門狗暫存器宣告*/ sbit led1=P1^0; /*接發光二極體*/ void delayms(uint xms) /*延時函式*/ { uint i,j; for(i=xms;i>0;i--) /*i=xms即延時約xms毫秒 */ for(j=110;j>0;j--); } void main() { WDT_CONTR=0x35; led1=0; delayms(500); led1=1; while(1) { delayms(1000); // WDT_CONTR=0x35;/*喂狗,如果這句話不加的話微控制器就 會一直復位,看到的現象是發光二極體閃爍,加上這句的話,發光二極體一直亮著,所以在實際工程應用的時候通常要在程式裡面呼叫比較頻繁的函式內部寫上這句話*/ } } /******************************************************************* 喂狗的技巧:如果一個大迴圈少於看門狗益處時間, 放在while(1)哪個地方都可以啊,如果大於,看下 哪個地方停頓時間長就放哪 *********************************************************************/