新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機系統中的軟件抗干擾技術

        單片機系統中的軟件抗干擾技術

        作者: 時間:2012-03-15 來源:網絡 收藏

        近年來單片機系統在工業測控領域的應用越來越廣泛,而對于環境惡劣的工業現場,這種新型的微控制器的可靠性、安全性就成為了一個大問題。在實驗室運行正常的程序到了工業現場卻不能運行,或者出現運行不穩定經常死機等。在這里主要討論一下如何通過軟件技術來增強系統的穩定運行。
        當系統的CPU部位受到干擾信號的作用時,將使系統失控。最典型的故障是破壞程序計數器PC的狀態值。導致程序在地址空間內"亂飛",或者陷入死循環。對這種情況的處理主要有這么幾種方法:
        1、指令技術;
        2、軟件陷阱技術;
        3技術。
        下面 以MCS-51單片機來做說明。
        指令技術
        指令由操作碼和操作數組成,操作碼指明CPU要完成什么樣的操作,而操作數是操作碼的對象。單字節指令只有操作碼,隱含操作數;雙字節指令,第一個字節是操作碼,第二個字節是操作數;三字節指令第一個字節是操作碼,后二個字節是操作數。CPU在取指令的時候是先取操作碼再取操作數,如何判斷是操作碼還是操作數就是通過取指令的順序。而取指令的順序完全由指令計數器PC來控制,因此,一旦PC受干擾出現錯誤程序便會脫離正常軌道,出現"亂飛",這樣就會出現把操作數當作操作碼,或者把操作碼當作操作數的情況。但只要PC指針落在單字節指令上程序就可納入正軌,所以為了快速將程序納入正軌,應該多用單字節指令,并在關鍵的地方人為插入一些單字節指令NOP,或將有效的單字節指令重寫,這就稱之為指令
        常用的方法就是在一些雙字節、三字節指令后面插入兩個單字節指令NOP,或在一些對程序的流向起決定作用的指令前面插入兩條NOP指令。還可對一些重要的指令進行重復放置。
        但采用指令冗余技術將程序納入正軌的條件是:亂飛的PC必須指向程序運行區。
        軟件陷阱技術
        當亂飛的程序進入非程序區的時候,就可設定軟件陷阱對亂飛的程序進行攔截從而將程序引向一個固定的位置。這樣就可將捕獲的程序重新納入正軌。
        軟件陷阱主要就是把程序重新引入它的復位入口處,也就是說在適當的地方設置這樣的指令:
        NOP
        NOP

        LJMP 0000H
        軟件陷阱主要安排在這樣一些區域:未使用的中斷區、未使用的EPROM空間及非EPROM空間、程序運行區及中斷服務程序區。主要來看前三種:
        1、未使用的中斷區
        如果對于未使用的中斷因干擾而開放的話, 可以這樣寫中斷服務程序:
        NOP
        NOP

        POP D1
        ;將原來的錯誤斷點彈出
        POP D2 ;將原來的錯誤斷點彈出
        PUSH 00H
        PUSH 00H
        ;將斷點地址重寫為 0000H
        RETI
        2 .未使用的EPROM
        假設用了一片2764,但并沒有用完整個存儲區。這時候就可在未用的區域里填充上020000數據,這樣當程序飛入其中時就會很快的走入正軌。這條指令其實是"LJMP 0000H"的機器碼。
        3 .EPROM空間
        單片機系統的程序空間是64K,正常情況下 所使用的EPROM不會占用所有的空間,假設 現在的EPROM占用16K的空間,那么剩下的48K空間就被閑置不用了。當亂飛的PC落入這些空間時,讀入的數據將為FFH,這是 :MOV R7A 指令的機器碼,將修改R7的內容。因此,當程序亂飛入非EPROM芯片區后,不僅無法導入正規,而且破壞了R7的內容。
        CPU讀程序存儲器的時候,伴隨著會產生一個PSEN信號, 就可利用這個信號,再加上一個非EPROM區的地址譯碼信號,構成一個選通信號來起動一個空閑的中斷,再用的方法從中斷程序中把程序導入正規。
        也可通過硬件的方法用一個緩沖器直接給數據線寫一個值,其原理與上述方法相同。
        軟件技術
        的作用就是防止程序發生死循環,或者說程序跑飛。硬件看門狗是利用了一個定時器,來監控主程序的運行,也就是說在主程序的運行過程中, 要在定時時間到之前對定時器進行復位,如果出現死循環,或者說PC指針不能回來。那么定時時間到后就會使單片機復位。
        軟件看門狗技術的原理和這差不多,只不過是用軟件的方法實現, 還是以51系列來講,在51單片機中有兩個定時器, 可以用這兩個定時器來對主程序的運行進行監控。對T0設定一定的定時時間,當產生定時中斷的時候對一個變量進行賦值,而這個變量在主程序運行的開始已經有了一個初值,要設定的定時值要小于主程序的運行時間,這樣在主程序的尾部對變量的值進行判斷,如果值發生了預期的變化,就說明T0中斷正常,如果沒有發生變化則使程序復位。
        T1 用來監控主程序的運行, 給T1設定一定的定時時間,在主程序中對其進行復位,如果不能在一定的時間里對其進行復位,T1 的定時中斷就會使單片機復位。在這里T1的定時時間要設的大于主程序的運行時間,給主程序留有一定的裕量。而T1的中斷正常與否 再由T0定時中斷子程序來監視。這樣就夠成了一個循環,T0監視T1T1監視主程序,主程序又來監視T0,從而保證系統的穩定運行。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 绵竹市| 屏东市| 永城市| 阳谷县| 临沭县| 阿城市| 上蔡县| 永善县| 根河市| 三门县| 德阳市| 诸城市| 遂川县| 茌平县| 福州市| 积石山| 古蔺县| 青州市| 闽清县| 东丽区| 彩票| 花莲县| 叙永县| 阿尔山市| 穆棱市| 江华| 西充县| 玉环县| 当雄县| 宣城市| 潞西市| 嘉荫县| 冷水江市| 敖汉旗| 沂水县| 名山县| 西乡县| 静宁县| 怀柔区| 金寨县| 东宁县|