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