|
|
首先 ,你要知道什么是看門狗?
在由單片機(jī)構(gòu)成的微型計(jì)算機(jī)系統(tǒng)中,由于單片機(jī)的工作常常會(huì)受到來自外界電磁場的干擾,造成程序的跑飛,而陷入死循環(huán),程序的正常運(yùn)行被打斷,由單片機(jī)控制的系統(tǒng)無法繼續(xù)工作,會(huì)造成整個(gè)系統(tǒng)的陷入停滯狀態(tài),發(fā)生不可預(yù)料的后果,所以出于對單片機(jī)運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測的考慮,便產(chǎn)生了一種專門用于監(jiān)測單片機(jī)程序運(yùn)行狀態(tài)的芯片,俗稱"看門狗"(watchdog)。
其次,看門狗的工作原理是什么?
在系統(tǒng)運(yùn)行以后也就啟動(dòng)了看門狗的計(jì)數(shù)器,看門狗就開始自動(dòng)計(jì)數(shù),如果到了一定的時(shí)間還不去清看門狗,那么看門狗計(jì)數(shù)器就會(huì)溢出從而引起看門狗中斷,造成系統(tǒng)復(fù)位。所以在使用有看門狗的芯片時(shí)要注意清看門狗(俗稱喂狗)。
下面這段程序是我成功調(diào)試過了的,看門狗寄存器的各位的具體的意義,你可以自己去看下單片機(jī)的PDF文檔,里面有詳細(xì)的介紹...................
- #include <reg52.h> 52系列單片機(jī)頭文件
- #define uchar unsigned char
- #define uint unsigned int
- sfr WDT_CONTR=0xe1;/*看門狗寄存器聲明*/
- sbit led1=P1^0; /*接發(fā)光二極管*/
- void delayms(uint xms) /*延時(shí)函數(shù)*/
- {
- uint i,j;
- for(i=xms;i>0;i--) /*i=xms即延時(shí)約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; /*喂狗,如果這句話不加的話單片機(jī)就 會(huì)一直復(fù)位,看到的現(xiàn)象是發(fā)光二極管閃爍,加上這句的話,發(fā)光二極管一直亮著,所以在實(shí)際工程應(yīng)用的時(shí)候通常要在程序里面調(diào)用比較頻繁的函數(shù)內(nèi)部寫上這句話*/
- }
- }
- /*******************************************************************
- 喂狗的技巧:如果一個(gè)大循環(huán)少于看門狗益處時(shí)間,
- 放在while(1)哪個(gè)地方都可以啊,如果大于,看下
- 哪個(gè)地方停頓時(shí)間長就放哪
- *********************************************************************/
復(fù)制代碼
|
|