單片機的看門狗_第1頁
單片機的看門狗_第2頁
單片機的看門狗_第3頁
單片機的看門狗_第4頁
單片機的看門狗_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

單片機的看門狗-S51及STC89系列為什么要看門狗?你家的看門狗是做什么的?“看門狗定時器”是這樣一種東西,從功能上說它可以讓微控制器在意外狀況下(比如軟件陷入死循環(huán)或跑飛)重新回復到系統(tǒng)上電狀態(tài),以保證系統(tǒng)出問題的時候重啟一次。就跟我們現(xiàn)在用電腦一樣,死機了你就按一下reset鍵重啟一次電腦,看門狗就是負責干這個事兒的。它是52單片機增加的一個功能,以前Intel8031、……、AT89C51時代單片機片內(nèi)都沒有“看門狗”功能,需要我們外擴看門狗芯片,比如X5045?!翱撮T狗”就是一個計數(shù)器,由于位數(shù)有限計數(shù)器能夠裝的數(shù)值是有限的(比如8位的最多裝256個數(shù)、16位的最多裝65536個數(shù)),從開啟“看門狗”那刻起,它就開始不停的數(shù)機器周期,數(shù)一個機器周期就計數(shù)器加1,加到計數(shù)器盛不下了(術語叫溢出)就就產(chǎn)生一個復位信號,重啟系統(tǒng)。注解:這里順便說一下,一般教材上叫“看門狗定時器”,其實定時器原理還是計數(shù)器,只是計的是時鐘周期,所以我為了初學者好理解叫統(tǒng)一叫“計數(shù)器”,這里闡明一下??撮T狗的看門原理我們在設計程序時,先根據(jù)看門狗計數(shù)器的位數(shù)和系統(tǒng)的時鐘周期算一下計滿數(shù)需要的時間,就是說在這個時間內(nèi)“看門狗”計數(shù)器是不會裝滿的,然后在這個時間內(nèi)告訴它重新開始計數(shù),就是把計數(shù)器清零,這個過程叫“喂狗”,這樣隔一段時間喂一次狗,只要程序正常運行他就永遠計不滿,一旦出現(xiàn)死循環(huán)之類的故障,沒有及時來清零計數(shù)器,就會導致裝滿了溢出,他就重啟系統(tǒng),這就是舉個例子說:8051單片機選用12MHz晶振,一個時鐘周期為1us,如果“看門狗計數(shù)器”是16位的,最大計數(shù)65536個,那么從0開始計到65535需要約65ms,所以我們可以在程序的50ms左右清零一次計數(shù)器(“喂狗”),讓他重新從0開始計,再過50ms,再清,……,這樣下去只要程序正常運行,計數(shù)器永遠不會計滿,也就永遠不會被“看門狗”復位。當然這個喂狗的時間是大家自己選的,只要不超過65ms,你選多少都可以,一般不要喂得太勤,這樣單片機運行時間浪費了,比如你1ms喂一次就太勤了,也不要說那我65ms喂一次,這樣太邊緣,這樣抗干擾能力就下降了,最好是留一定的余量,這個就是設計者自己掌握了,我一般是讓計到90%左右就清一次。每種單片機的“看門狗”實現(xiàn)方法不盡相同,但是原理都一樣,而且“看門狗”都是啟動了之后就不能被關閉,只能系統(tǒng)復位(重新斷電在上電)才能關閉。設置“看門狗”的一般步驟如下:

1.設置“看門狗”相關寄存器,

啟動“看門狗”;

2.

隔一段時間清零一次,“喂狗”;

3.如果程序正常,一直運行;如果程序出錯,沒有按時“喂狗”,“看門狗”就在溢出的時候復位系統(tǒng)。S51的看門狗AT89S52單片機看門狗定時器是14位的,最大計數(shù)214=16384個數(shù),每計16384個時鐘周期就溢出一次。也就是說如果使用12M晶振的話,至少應該在16.384ms內(nèi)喂一次狗。STC89STC89C5X系列單片機由于采用了“預分頻技術”,它的溢出時間是=(N*Prescale*32768)/晶振頻率(不要問我為什么,他們就是這么設計的,我們就這么用就行)。其中N是單片機的時鐘周期,STC89C5X系列單片機提供6時鐘周期和12時鐘周期兩種時鐘周期,可以在燒寫程序時修改;Prescale是預分頻數(shù),通過設置【看門狗控制寄存器】可以設置為2、4、8、16、32、64、128、256;怎么設置演示程序中有介紹;晶振頻率就是系統(tǒng)選用的晶振。所以如果同樣選擇12MHz晶振,使用傳統(tǒng)的12時鐘周期,它最小的溢出時間是(12*2*32768)/(12*106)=65.536ms,最大溢出時間是(12*256*32768)/(12*106)≈8.38s。如果選擇256分頻,也就是說只要在8.38秒之內(nèi)喂一次狗就可以了。對于我們用戶來說,看門狗的時間是越長越好,這樣可以節(jié)省更多的單片機資源,尤其是對時間要求精準的系統(tǒng),如果執(zhí)行過程中我們不停地“喂狗”,那么是比較浪費時間的。所以STC89C5X系列單片機的看門狗更有優(yōu)勢一些。當然這個也是個人的選擇,如果對時間要求的不苛刻的話,勤喂幾次狗也沒關系。STC看門狗應用舉例STC89C52最小單片機系統(tǒng)+兩個指示燈串行口接口(用于下載程序和測試本次試驗關于實驗的注意事項:1. 本次試驗使用的是11.0592MHz晶振,設置WDT_CONTR=(00110100)B,32預分頻,單片機使用12指令周期模式。 計算看門狗溢出時間:[12*32*32768/(11059200)]≈1s。2. 本次試驗的硬件電路很簡單,就是最小系統(tǒng)上增加兩個LED燈,原理圖見正文,用戶可以很容易實現(xiàn)。***************************************************************************/#include<Reg52.H>sfrWDT_CONTR=0xE1; //定義特殊功能寄存器:STC單片機看門狗控制寄存器#defineucharunsignedchar#definetrue1#definefalse0#defineWEIGOUWDT_CONTR=0x34 //看門狗啟動設置和“喂狗”操作sbitLED=P1^6; //信號燈,系統(tǒng)正常工作就一閃一閃的sbitLED_busy=P1^7; //工作燈,上電滅一會兒(約800ms),然后正常工作的時候一直亮著;用于指示系統(tǒng)是否重啟uchartimer0_ctr,i;constucharstr[]="IloveMCU!"; //定義一句話,讓他從串口輸出,只有系統(tǒng)重啟的時候才輸出一次,所以也是用于驗證看門狗有沒有重啟系統(tǒng)//延時函數(shù),11.0592MHz晶振下延時約xms毫秒voiddelay_ms(unsignedxms){ unsignedx,y; for(x=xms;x>0;x--) for(y=110;y>0;y--);}//主程序初始化函數(shù)voidInitMain(){ //初始化時兩盞燈都熄滅 LED=1; LED_busy=1; TMOD=0x21; //定時器0工作在方式1,作為16位定時器;定時器1工作在方式2,作為串行口波特率發(fā)生器 TH0=0x4C; //定時器0裝初值:每隔50ms溢出一次 TL0=0x00; IE=0x82; //IE=(10000010)B,使能定時器0中斷 TR0=1; //啟動定時器0}//串行口初始化程序voidInitCOM(){ SCON=0x50; //SCON=(01010000)B,波特率不加倍,允許接收 TH1=0xFD; //設置波特率=9600bps TL1=TH1; TR1=1; //啟動定時器1}/定時器0中斷服務程序程序,控制信號燈閃爍。如果系統(tǒng)正常運行,信號燈1.5秒閃一次voidTimer0_isr()interrupt1{ TH0=0x4C;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論