51單片機在微機自動交換系統(tǒng)中穩(wěn)定運行的設(shè)計
MCS—51單片機在電力線載波通信中處理任務時的實時性尤為突出。由于該系統(tǒng)整機配置的主要服務對象是電力調(diào)度,且它的使用環(huán)境將來多為無人值守站,所以系統(tǒng)工作是否穩(wěn)定直接影響到電力線載波機的整機性能。針對電力通信特點,在考慮穩(wěn)定運行方面我們采取了以下幾項措施。
1 設(shè)置上電延時復位電路
1.1 為什么要進行上電復位46
計算機在啟動運行時都要進行復位。作為在控制領(lǐng)域中應用最廣泛的單片機,復位處理更是設(shè)計中的關(guān)鍵。單片機內(nèi)部的各個功能部件均受特殊功能寄存器控制,程序運行直接受程序計數(shù)器指揮,寄存器的復位狀態(tài)決定了單片機內(nèi)有關(guān)功能部件工作用的初始狀態(tài),而程序的正常運行就是從這個狀態(tài)開始的。如果上電時沒有做到正確復位,就可能使CPU從不定地址開始執(zhí)行指令,系統(tǒng)就得不到正確的初始化,也就不能正常工作。
1.2 復位條件
單片機是靠外部電路復位的。上電復位步驟:
(1)必須首先建立電源Vcc;
(2)Vcc穩(wěn)定后(達到允許值)時鐘振蕩器起振;
(3)復位腳必須在振蕩器起振后至少保持兩個機器周期復位電平。也就是說,復位腳(RST)復位電平維持時間應包括Vcc的建立時間、振蕩器起振時間和至少兩個機器周期時間。
1.3 一般上電復位電路
在上電時,電源Vcc的建立時間應小于幾十ms,振蕩器的起振時間取決于振蕩器頻率,對于10MHz晶體,起振時間為1ms,對于1MHz晶體,起振時間一般為10ms。此時可采用一般上電復位電路(圖1)。
如果對電源Vcc建立運行速度相當緩慢的系統(tǒng),RC上電復位電路將不能保證系統(tǒng)可靠復位。假如,建立時間為1s,則RC充電曲線如圖2所示,此時很難使RC電路輸出正常的復位電平(隨著RC的充電,RST腳的電位ΔVc越來越低,在電源穩(wěn)定后,ΔVc的幅度不滿足兩個機器內(nèi)復位電平的要求,RST腳就可能退出復位狀態(tài))。而且,RST腳因易受電源干擾而產(chǎn)生誤復位。
[next]
雖然電力線載波機電源現(xiàn)都采用開關(guān)工作方式,建立速度比以往的串聯(lián)式或并聯(lián)式調(diào)整電源快,但由于機器本身使用的電壓等級多,功率要求大,開機后各種電源的建立至少還需要500ms時間才能穩(wěn)定(+5V電源也不例外),所以在自動交換系統(tǒng)中采用一般上電復位在時間上幾乎不可能滿足復位要求,這是因為 MCS—51采用一般上電復位電路就要求電源至少在20ms內(nèi)建立才能保證復位。這屬于硬件特性,對于克服這一時延性困難來說,我們不可能做到使所有電力電源都迅速建立(該產(chǎn)品要利用與之配套的設(shè)備電源),只有針對MCS—51自身特性在系統(tǒng)設(shè)計上采取相應措施。
MCS—51硬件復位要保證在Vcc穩(wěn)定、振蕩器起振后至少有兩個機器周期(24個振蕩器周期)的高電平出現(xiàn)在RST端,即執(zhí)行內(nèi)部復位。為此我們設(shè)計了一個上電延時電路,該電路能針對不同電源建立時間的長短,改變R、C參數(shù),可調(diào)整延時時間。由于采用了該電路,在無人值守站,系統(tǒng)不會因停電、再上電而出現(xiàn)“死機”造成通信中斷現(xiàn)象,如圖3所示。R1、R2提供比較電位(2/3Vcc),RC充電時間由R、C參數(shù)決定,R4為復原信號邊緣校正,V1二級管為頻繁上電時電容C的泄放電路,V2與Watchdog電路在邏輯上成或關(guān)系。開機時同相端電位大于反相端電位,輸出為上升的電位(在電源建立期間),RC充電時間足夠延遲到電源穩(wěn)定,當RC充電電壓大于2/3Vcc時,該電路輸出“0”,至此上電復位正常完成。
2 應用看門狗電路實現(xiàn)系統(tǒng)保護
2.1 復位寬度設(shè)計要求
因為MCS—51內(nèi)部無Watchdog功能(8096系列單片機有),所以需在外部擴展此電路,如圖4所示。單穩(wěn)電路為可再觸發(fā)電路,只要觸發(fā)脈沖(CP)正常地作周期性輸出,單穩(wěn)一直處于瞬態(tài)階段,輸出低電平。通過V1嵌位,振蕩電路停振,振蕩器輸出“0”不影響RST腳,CPU處于正常工作狀態(tài),如果因某種原因CP無輸出,單穩(wěn)處于穩(wěn)態(tài),輸出“1”振蕩器起振,輸出方波,送至RST腳。為了保證復位,方波寬度遠大于兩機器周期,且至少應大于CP兩個周期,以保證程序有時間作Watchdog
處理(輸出正常的觸發(fā)脈沖,使振蕩器停振,輸出“0”不影響RST腳)。
2.2 周期性觸發(fā)脈沖軟件設(shè)計考慮
由軟件產(chǎn)生周期性觸發(fā)信號來控制該電路工作,以確保系統(tǒng)正常運行。在產(chǎn)生該周期性信號時應注意以下幾點:
(1)信號不采取定時器中斷方式獲得。這基于以下考慮:在初始化后,定時中斷即開始工作,假如由于某種信號干擾使主程序轉(zhuǎn)飛,但并未破壞定時器有關(guān)中斷控制設(shè)置,定時中斷有可能正常工作,則周期性脈沖可能輸出正常,此時Watchdog則不能使主程序恢復正常。
(2)Watchdog輸出模塊放在主程序中,主程序有幾個循環(huán)體就應放入幾個Watchdog輸出模塊,以確保主程序不被破壞。
(3)工作程序部分包括主程序和中斷程序,Watchdog不僅要保護主程序轉(zhuǎn)飛,而且也要保護中斷程序轉(zhuǎn)飛。保護流程如圖5所示。設(shè)高級中斷運行標志為1,次級中斷運行正常標志為2。
如果高級中斷不能正常運行,那么無標志1,雖然次級中斷工作正常,但因無標志1,則無標志2,最終主程序因無標志2,故Watchdog無輸出,結(jié)果導致系統(tǒng)復位。同理,如次級中斷不能正常工作,那么標志2產(chǎn)生,最終導致系統(tǒng)復位;若主程序自身失效,則也無定時輸出,最終也導致系統(tǒng)復位,重新使系統(tǒng)恢復正常運行。[next]
3 被破壞數(shù)據(jù)的修復
Watchdog電路只能保證系統(tǒng)失效后能得到復位處理,重新恢復正常工作,但這說明以前有的工作狀態(tài)已被破壞,只是不“死機”而已。程序的失效、轉(zhuǎn)飛往往是因為有關(guān)轉(zhuǎn)移標志、數(shù)據(jù)或SFR控制字被破壞所致,不管如何好的系統(tǒng),要想完全避免這些破壞是不可能的,因為多種多樣的干擾源根本無法消除,要想保護這些過程數(shù)據(jù)不被破壞,只有設(shè)法在保護方面盡可能做得更加完善些。
3.1 特殊功能寄存器(SFR)內(nèi)容的實時刷新
一般情況下,在初始化程序中SFR已被預置好初值,它代表一定的工作方式。在正常運行后,SFR的內(nèi)容一般是不變的。因為SFR內(nèi)容代表特定的工作方式,該內(nèi)容被破壞也就改變了原來設(shè)定的工作方式,從而使系統(tǒng)失常。比如,系統(tǒng)設(shè)置為以中斷方式工作后,就存在中斷返回問題,在初始化程序中已設(shè)置堆棧(SP)內(nèi)容,如果由于某種干擾,SP內(nèi)容被改變,那么中斷返回將不能轉(zhuǎn)向預定地址,系統(tǒng)工作必然失常。為了盡量減少破壞的機會,我們將有關(guān)SFR放在主程序Watchdog循環(huán)輸出模塊中,以使其不斷得到刷新,程序示意圖如下:
LOOP: ·
·
·
MOV SP, #10H
MOV TMOD, #12H
MOV SCON, #00H
ANL PSW, #0E7H
SETB TR0
SETB TR1
SETB IT0
MOV IE, #8AH
MOV IP, #02H
·
·
·
LJMP LOOP
[next]
3.2 數(shù)據(jù)區(qū)以及位區(qū)嵌套式保護數(shù)據(jù)RAM區(qū)的單元內(nèi)容多數(shù)是運行中經(jīng)運算或經(jīng)各種處理而得到的關(guān)鍵數(shù)據(jù),這些數(shù)據(jù)被破壞的可能性更大些,除了干擾源破壞,另外運算錯誤或處理失誤,也會造成錯誤數(shù)據(jù)。比如,要想確切地取得一個收信標志位01H的值,首先需查尋收信端是否有效,收信處理將作出判斷是否被干擾,如被干擾,則刷新標志(SETB 01H),若有效,則標志為CLR 01H,然后進入收信處理。下面的這些處理都是以位01H作前提的,如果該位被破壞(SETB01H),那么收信處理將無法進行,所以一旦確定進入收信狀態(tài)后,在處理階段,要經(jīng)常重復確認使標志保持有效,即CLR01H,直到該任務完成為止。這也就是說,在完成某一具體任務時,對相關(guān)的標志或數(shù)據(jù)要進行可靠性診斷,作為實時修復,盡量減少被破壞的可能。
4 結(jié)束語
我們所采取的上述方法,經(jīng)幾年來的使用表明比較適合WCZ—X型交換系統(tǒng),在實際應用中該產(chǎn)品的可靠性得到了很好的驗征。
評論