首先 ,你要知道什么是看門狗?
在由單片機構成的微型計算機系統中,由于單片機的工作常常會受到來自外界電磁場的干擾,造成程序的跑飛,而陷入死循環,程序的正常運行被打斷,由單片機控制的系統無法繼續工作,會造成整個系統的陷入停滯狀態,發生不可預料的后果,所以出于對單片機運行狀態進行實時監測的考慮,便產生了一種專門用于監測單片機程序運行狀態的芯片,俗稱"看門狗"(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)哪個地方都可以啊,如果大于,看下
- 哪個地方停頓時間長就放哪
- *********************************************************************/
復制代碼
|