(陜西中醫(yī)學(xué)院,陜西 西安 712046)
經(jīng)濟(jì)的發(fā)展,促進(jìn)了科學(xué)技術(shù)的不斷延伸,C51系統(tǒng)的單片機(jī)也在不斷的發(fā)展,這大大滿足了實(shí)際工作的需要,也不可避免的帶來了一些弊端。比如單片及芯片的抗干擾現(xiàn)象,這種現(xiàn)象不利于智能型儀表單片機(jī)系統(tǒng)的穩(wěn)定運(yùn)行。本文就看門狗硬件電路及其設(shè)計(jì)方案展開分析,通過采取相應(yīng)的措施,解決問題。
在實(shí)際工作中,看門狗的電路系統(tǒng)的應(yīng)用范圍是比較廣泛的,它實(shí)現(xiàn)了單片機(jī)系統(tǒng)的內(nèi)部相關(guān)環(huán)節(jié)的穩(wěn)定運(yùn)行,確保了無人監(jiān)控下的程序的正常運(yùn)作??撮T狗電路系統(tǒng)的正常運(yùn)行,離不開看門狗芯片與單片機(jī)的I/O引腳環(huán)節(jié)的正常運(yùn)作。這就需要我們針對這一環(huán)節(jié)進(jìn)行具體分析,I/O引腳環(huán)節(jié)的穩(wěn)定性決定了看門狗系統(tǒng)的正常運(yùn)行,該環(huán)節(jié)如果受到內(nèi)外因素的干擾,是極易導(dǎo)致程序的不正常發(fā)展的,容易使系統(tǒng)陷入不良的循環(huán)中。為此我們要實(shí)現(xiàn)看門狗的引腳程序環(huán)節(jié)的穩(wěn)定運(yùn)行,從而保證單片機(jī)的有效復(fù)位,這樣保障了程序的順利執(zhí)行,保證單片機(jī)的自動復(fù)位。
(1)為了保證看門狗電路系統(tǒng)的穩(wěn)定運(yùn)行,我們要進(jìn)行看門狗電路設(shè)計(jì)方式的深化,它主要包括兩種環(huán)節(jié),硬件看門狗設(shè)計(jì)環(huán)節(jié)與軟件看門狗設(shè)計(jì)環(huán)節(jié)。前者的正常運(yùn)行,離不開對定時(shí)器的有效應(yīng)用,從而確保主程序的有效監(jiān)控,在主程序的運(yùn)作過程中,我們要確保定時(shí)器的及時(shí)復(fù)位,避免下序環(huán)節(jié)出現(xiàn)運(yùn)行故障。
軟件看門狗技術(shù)模式與硬件看門狗有類似之處,它通過對軟件的利用,實(shí)現(xiàn)程序的穩(wěn)定運(yùn)行。比如對51單片機(jī)的定時(shí)器的應(yīng)用。它利用內(nèi)部定位器實(shí)現(xiàn)對主程序的實(shí)施監(jiān)控。確保主程序運(yùn)作過程中的相關(guān)變量值的有效判斷,確保該值的準(zhǔn)確控制,在運(yùn)作過程中,沒有發(fā)生變化則就會進(jìn)行程序的復(fù)位。
傳統(tǒng)的看門狗電路復(fù)位指令是通過主程序的插入來進(jìn)行的,其指令模式主要是脈沖式,進(jìn)行兩條取反指令的運(yùn)行,這是為了促進(jìn)程序跑飛時(shí)其中斷功能的穩(wěn)定運(yùn)行,促進(jìn)CPU的正常運(yùn)作,保證中斷子程序的穩(wěn)定運(yùn)行,確保該看門狗整體系統(tǒng)的正常運(yùn)作。在此過程中,如果中斷子程序執(zhí)行喂狗指令,那么必然會看門狗的定時(shí)器的穩(wěn)定運(yùn)行,導(dǎo)致微機(jī)系統(tǒng)的運(yùn)作混亂,不能實(shí)現(xiàn)其正常裝套的運(yùn)轉(zhuǎn),從而不利于實(shí)際工作程序的順利開展。
(2)在喂狗指令的運(yùn)作過程中,主程序系統(tǒng)都能得到良好的響應(yīng),促進(jìn)單片機(jī)系統(tǒng)的穩(wěn)定運(yùn)行。在此運(yùn)作過程中,有一種模式影響單片機(jī)的穩(wěn)定運(yùn)行,比如其主程序正常運(yùn)行,但是其中斷響應(yīng)功能的缺乏,是不利于看門狗電路系統(tǒng)的正常運(yùn)行,不利于單片機(jī)系統(tǒng)的正常工作。比如在系統(tǒng)進(jìn)行中斷子程序環(huán)節(jié)的運(yùn)作時(shí),受到外界因素的干擾。程序出現(xiàn)跑飛現(xiàn)象,導(dǎo)致中斷功能的無法響應(yīng)。
這種情況是由51單片機(jī)的中斷系統(tǒng)內(nèi)部的相關(guān)環(huán)節(jié)導(dǎo)致的,比如其兩個(gè)優(yōu)先級的狀態(tài)觸發(fā)器,進(jìn)行兩級中斷響應(yīng)狀態(tài)的分別指標(biāo)。在此過程中,如果CPU響應(yīng)出現(xiàn)中斷的現(xiàn)象,就會引發(fā)相關(guān)環(huán)節(jié)的優(yōu)先級狀態(tài)觸發(fā)器,從而導(dǎo)致同級別的所有中斷申請的屏蔽,等到reti指令運(yùn)作的時(shí)候,此優(yōu)先級狀態(tài)觸發(fā)器才會被CPU硬件清除,確保下序環(huán)節(jié)的中斷請求的正常相應(yīng)。當(dāng)然,象上述這種情況是比較少見的。大多數(shù)情況下,程序跑飛后都會使pc指針越出有效程序區(qū),造成“死機(jī)”。這時(shí)“看門狗”就起作用了。在大多數(shù)系統(tǒng)中,中斷子程序執(zhí)行的時(shí)間占總運(yùn)行時(shí)間的百分比都非常小,而在執(zhí)行中斷程序時(shí),pc指針跑飛越過reti指令,而主程序又能正常運(yùn)行的機(jī)會就更少。
(3)在中斷子程序的運(yùn)作過程中,出現(xiàn)其數(shù)據(jù)信息的運(yùn)作比較復(fù)雜,并且進(jìn)行一系列的函數(shù)運(yùn)作時(shí),就很可能發(fā)生系統(tǒng)失常的現(xiàn)象,比如在智能流量計(jì)過程中的死機(jī)現(xiàn)象,這種死機(jī)現(xiàn)象并不是很明顯,其鍵盤顯示操作是正常情況,但是在設(shè)定參數(shù)環(huán)節(jié),總流量不發(fā)生累計(jì),導(dǎo)致中斷系統(tǒng)的失效,進(jìn)而不利于主程序的穩(wěn)定運(yùn)”指令直接插在中斷子程序中是不合適的,而單獨(dú)插在主程序中又顯然是不夠的。筆者通過仔細(xì)推敲后,將“喂狗”指令分解開來,取反指令變成置位和清零兩種指令,將置位指令插在主程序中,而將清零指令插在t 0中斷子程序中,這樣將兩者聯(lián)系起來,缺一不可,無論主程序運(yùn)行失效,還是t 0中斷請求失效,都不能完成完整的“喂狗”指令,造成“看門狗”動作,從而確保了系統(tǒng)安全可靠地工作。
為了保證該看門狗電路整體設(shè)計(jì)的穩(wěn)定運(yùn)行,我們要進(jìn)行C51單片機(jī)內(nèi)部定時(shí)器系統(tǒng)的有效編程,確??撮T狗的電路功能的穩(wěn)定運(yùn)行。進(jìn)行軟件環(huán)節(jié)與硬件環(huán)節(jié)的有效設(shè)置,確??撮T狗的定時(shí)器設(shè)置程序的穩(wěn)定運(yùn)行。在此過程中,我們要實(shí)現(xiàn)對主程序的有效應(yīng)用,確保對看門狗的定時(shí)器程序的有效設(shè)置,確保其定時(shí)器系統(tǒng)的計(jì)時(shí)環(huán)節(jié)的穩(wěn)定運(yùn)行,將其計(jì)時(shí)規(guī)定在50ms,當(dāng)達(dá)到這一標(biāo)準(zhǔn)時(shí),定時(shí)器會發(fā)生溢出中斷,從而推動溢出中斷服務(wù)程序環(huán)節(jié)的運(yùn)作,確保下序環(huán)節(jié)的穩(wěn)定運(yùn)作,實(shí)現(xiàn)看門狗電路系統(tǒng)的正常運(yùn)行。當(dāng)num的值等于100時(shí),說明看門狗定時(shí)器已經(jīng)計(jì)時(shí)5s,此時(shí),單片機(jī)I/O端口P1.0輸出高電平,對程序進(jìn)行復(fù)位。在此過程中,喂狗代碼將被穿插于程序中循環(huán)體末尾。當(dāng)循環(huán)體結(jié)束時(shí),喂狗代碼執(zhí)行,關(guān)閉定時(shí)器1、清空num并重新初始化定時(shí)器設(shè)置。若循環(huán)體進(jìn)入死循環(huán),喂狗代碼無法執(zhí)行,num將一直累加至100,此時(shí)程序復(fù)位。 喂狗代碼放置位置可根據(jù)num預(yù)計(jì)數(shù)值進(jìn)行調(diào)整:當(dāng)num門限值較小,即看門狗計(jì)數(shù)時(shí)間較短時(shí),喂狗代碼可放于程序中各循環(huán)體之后或均勻分布于整個(gè)主程序中。當(dāng)num門限值較大,即看門狗計(jì)數(shù)時(shí)間較長時(shí),喂狗代碼可放于程序主循環(huán)體末尾。但是需注意看門狗計(jì)數(shù)時(shí)間必須長于正常工作時(shí)間,以免非正常復(fù)位。
在此過程中,我們要注意對看門狗的定時(shí)器復(fù)位影響因素的應(yīng)用,確保該用戶程序的唯一指令的應(yīng)用,避免出現(xiàn)看門狗定時(shí)器的誤復(fù)位現(xiàn)象,避免出現(xiàn)系統(tǒng)的死機(jī)現(xiàn)象,從而保證看門狗系統(tǒng)內(nèi)部程序的穩(wěn)定運(yùn)行,確保實(shí)際工作的正常開展。對沒有中斷的用戶系統(tǒng),只需將清零指令也插在主程序中就可以了;對于有多種中斷的用戶系統(tǒng),如果沒有中斷嵌套,則清零指令可以插在任一個(gè)中斷子程序中,而在主程序中適當(dāng)加入一些有關(guān)中斷的冗余指令,以免因有關(guān)中斷的特殊功能寄存器數(shù)據(jù)受到干擾時(shí)導(dǎo)致中斷功能失效。
[1]李烈彪,李仙.計(jì)算機(jī)系統(tǒng)的可靠性技術(shù)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007,17(11):142-145.
[2]范立南.單片機(jī)原理及應(yīng)用教程[M].北京:北京大學(xué)出版社,2006.
[3]盧大偉,劉炳云.用定時(shí)器實(shí)現(xiàn)軟件看門狗應(yīng)注意的問題[J].中國儀器儀表,1998(04):36-37.