系統(tǒng)受到干擾侵害致使PC值改變,造成程序運行失常。對于程序運行失常的軟件對策主要是發(fā)現(xiàn)失常狀態(tài)后及時引導(dǎo)系統(tǒng)恢復(fù)原始狀態(tài)。
1.設(shè)置監(jiān)視跟蹤定時器
使用定時中斷來監(jiān)視程序運行狀態(tài)。定時器的定時時間稍大于主程序正常運行一個循環(huán)的時間,在主程序運行過程中執(zhí)行一次定時器時間常數(shù)刷新操作。這樣,只要程序正常運行,定時器不會出現(xiàn)定時中斷。而當(dāng)程序運行失常,不能及時刷新定時器時間常數(shù)而導(dǎo)致定時中斷,利用定時中斷服務(wù)程序?qū)⑾到y(tǒng)復(fù)位。在8031應(yīng)用系統(tǒng)中作為軟件抗干擾的一個事例,具體做法是:使用8155的定時器所產(chǎn)生的“溢出”信號作為8031的外部中斷源INT1。用555定時器作為8155中定時器的外部時鐘輸入;8155定時器的定時值稍大于主程序的正常循環(huán)時間;在主程序中,每循環(huán)一次,對8155定時器的定時常數(shù)進行刷新;在主控程序開始處,對硬件復(fù)位還是定時中斷產(chǎn)生的自動恢復(fù)進行分類判斷處理。
2.設(shè)置軟件陷井
當(dāng)PC失控,造成程序“亂飛”而不斷進入非程序區(qū),只要在非程序區(qū)設(shè)置攔截措施,使程序進入陷井,然后強迫使程序進入初始狀態(tài)。例如Z80指令系統(tǒng)中數(shù)據(jù)FFH正好對應(yīng)為重新起動指令RST 56,該指令使程序自動轉(zhuǎn)入0038H入口地址。因此,在Z80 CPU構(gòu)成的應(yīng)用系統(tǒng)中,只要將所有非程序區(qū)全部置成FFH用以攔截失控程序。并在0038H處設(shè)置轉(zhuǎn)移指令,使程序轉(zhuǎn)至抗干擾處理程序。