新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機—軟件看門狗—01

51單片機—軟件看門狗—01

作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
這是第一次寫一寫下自己的學習的過程,這只是個開始,呵呵,當然沒有結(jié)束的一個開始

今天沒有事情,就看看單片機的書,突然發(fā)現(xiàn)自己學了這么長的時間還沒有用過看門狗這個東東~~表示很慚愧,(*^__^*) 嘻嘻……

本文引用地址:http://m.butianyuan.cn/article/201611/321502.htm

既然這是自己的第一篇文章,那就來個簡單,但是也好寫的東東吧~~~

001.軟件看門狗

當程序跑飛到一個臨時構(gòu)成的死循環(huán)中時,這是如果沒有人為的操作(也就是按下復(fù)位鍵),那么軟件系統(tǒng)將完全癱瘓。那么我們就要讓MCU自己實現(xiàn)監(jiān)視系統(tǒng)運行的情況,這就是程序運行監(jiān)視系統(tǒng)(WatchDog)。

簡單來說吧,好比一個主人養(yǎng)了一條狗,主人在正常工作時總是不忘記每隔一段時間就喂一次狗,狗吃過東西就安靜下來,這樣也就不會影響主人生活。但是如果主人打瞌睡忘記喂狗,那么時間到了,狗就餓了,發(fā)現(xiàn)主人還沒有喂它,就會大叫起來,把主人吵醒。呵呵,這就是嘍。。。。。。國外把這種程序運行監(jiān)控系統(tǒng)成為WatchDog(看門狗)。其中看門狗的特性有:

1》本身能獨立工作,基本上不依賴于CPU(這里還要解釋一下,它占用CPU主要是那么幾微秒,既喂狗)

2》CPU在一個固定的時間間隔和系統(tǒng)打一次交道(也就是喂狗,1中已經(jīng)提到),以表明系統(tǒng)目前正常

3》當CPU陷入死循環(huán)后,能即使發(fā)覺并可以使系統(tǒng)復(fù)位

下面就是程序的設(shè)計過程了~~~

當系統(tǒng)陷入死循環(huán)后,什么樣的程序才能使它跳出來呢?只有比這個死程序更高級的中斷程序才能奪走死程序?qū)PU的控制權(quán)。為此,咱們可以用一個定時器來做看門狗,將它的溢出中斷設(shè)定為高優(yōu)先級中斷,然后將系統(tǒng)的其它中斷設(shè)定為低優(yōu)先級的中斷(這里一定要保證你設(shè)定的看門狗的那個中斷一定要比你程序中的其它的中斷要高!?。。。ㄟ@里的設(shè)置方法很多,但是剛才說的原則一定要滿足?。?。那就比如說吧,用T0作看門狗,定時約為16ms,如果你的系統(tǒng)中沒有用到INT0,那么你就不需要設(shè)置PTO了(這里我就不多解釋了~~大家懂得的)。

當看門狗啟動后,系統(tǒng)工作程序必須經(jīng)常“喂它”,而且每兩次的間隔不得大于16ms(這里還是上邊的例子)

當程序陷入死循環(huán)后,16ms之內(nèi)即可引起一次T0中斷,產(chǎn)生高優(yōu)先級中斷,從而結(jié)束死循環(huán)。同時,建議在T0中斷里直接轉(zhuǎn)向出錯處理程序,也就是在中斷向量區(qū)放置一條“LJMP ERROR”就哦了(這里用匯編語言好解釋~~)

下面是用匯編寫的看門狗程序,它包含模擬的主程序,“喂狗”(DOG)程序和空彈返回0000H(TOP)程序。

ORG 0000H

AJMP MAIN

ORG 000BH

LGMP TOP

MAIN: MOV SP,#06H;模塊硬件復(fù)位,這些可根據(jù)系統(tǒng)對資源的使用情況增減

MOV PSW,#OOH

MOV SCON,#01H

.

.

.

MOV IE,#00H

MOV IP,#00H

MOV TMOD,#01H

LCALLDOG ;調(diào)用DOG的時間間隔應(yīng)該小于例題中的16ms

. ;這里就省了要添加的程序,自己根據(jù)自需要來添加就哦了,我也就不費話了

.

.

DOG: MOV TH0,#0B1H;這就是喂狗程序,這里用的是定時計數(shù)器0

MOV TL0,#0E0H

SETBTR0

RET

TOP: POP ACC ;空彈斷點地址,也就是先將你壓入的地址取出來,然后賦予新的值

POP ACC;這里賦值為0,你懂得,也就是要讓它返回到程序的開頭~~

CLR A;當然你也可以不這樣做,這里也可以來一個調(diào)用指令,自己搞定吧!

PUSH ACC

PUSH ACC

RETI;(這里是RETI,不是RET)

  到這里看門狗的都該說清楚了~~~

  這是軟件抗干擾的方法之一,還有一種方法就是軟件陷阱技術(shù),這個也挺簡單的,我也就不多贅述了~~

提示:軟件陷阱就是一條引導(dǎo)指令強行將捕獲的程序引向一個指定的地址,再那里有一段專門對程序出錯進行處理的程序,用來使程序按既定的目標執(zhí)行。真正的軟件陷阱由三條指令組成:

  NOP

NOP

LJMP ERROR




關(guān)鍵詞: 51單片機軟件看門

評論


技術(shù)專區(qū)

關(guān)閉