新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 單片機系統(tǒng)在測控領域的探討

        單片機系統(tǒng)在測控領域的探討

        作者: 時間:2012-03-07 來源:網(wǎng)絡 收藏

        近年來在工業(yè)測控的應用越來越廣泛,而對于環(huán)境惡劣的工業(yè)現(xiàn)場,這種新型的微控制器的可靠性,安全性就成為了一個大的問題。在實驗室運行正常的程序到了工業(yè)現(xiàn)場卻不能運行,或者出現(xiàn)運行不穩(wěn)定經(jīng)常死機等。在這里我們主要討論一下如何通過軟件技術來增強的穩(wěn)定運行。

        本文引用地址:http://www.104case.com/article/171937.htm

        的CPU部位受到干擾信號的作用時,將使系統(tǒng)失控。最典型的故障是破壞程序計數(shù)器PC的狀態(tài)值。導致程序在地址空間內(nèi)“亂飛”,或者陷入死循環(huán)。而我們對這種情況的處理主要有這么幾種方法:
          1、 指令冗余技術;
          2、 軟件陷阱技術;
          3、 看門狗技術。

        我們以MCS-51來做以說明。

        一、指令冗余技術

        我們知道,指令由操作碼和操作數(shù)組成,操作碼指明CPU要完成什么樣的操作,而操作數(shù)是操作碼的對象。單字節(jié)指令只有操作碼,隱含操作數(shù);雙字節(jié)指令,第一個字節(jié)是操作碼,第二個字節(jié)是操作數(shù);三字節(jié)指令第一個字節(jié)是操作碼,后二個字節(jié)是操作數(shù)。CPU在取指令的時候是先取操作碼再取操作數(shù),如何判斷是操作碼還是操作數(shù)就是通過取指令的順序。而取指令的順序完全由指令計數(shù)器PC來控制,因此,一旦PC受干擾出現(xiàn)錯誤程序便會脫離正常軌道,出現(xiàn) “亂飛”,這樣就會使得把操作數(shù)當作操作碼,或者把操作碼當作操作數(shù)的情況。但只要PC指針落在單字節(jié)指令上程序就可納入正軌,所以為了快速的將程序納入正軌,我們應該多用單字節(jié)指令,并在關鍵的地方人為的插入一些單字節(jié)指令NOP,或?qū)⒂行У膯巫止?jié)指令重寫,這就稱之為指令冗余。

        常用的方法就是在一些雙字節(jié),三字節(jié)指令后面插入兩個單字節(jié)指令NOP,或在一些對程序的流向起決定作用的指令前面插入兩條NOP指令。還可對一些重要的指令進行重復放置。

        但采用指令冗余技術將程序納入正軌的條件是:亂飛的PC必須指向程序運行區(qū)。

        二、軟件陷阱技術

        當亂飛的程序進入非程序區(qū)的時候, 我們就可設定軟件陷阱對亂飛的程序進行攔截從而將程序引向一個固定的位置。這樣我們就可將捕獲的程序重新納入正軌。

        軟件陷阱主要就是把程序從新引入它的復位入口處,也就是說我們在適當?shù)牡胤皆O置這樣的指令:
          NOP
          NOP
          LJMP 0000H

        對于軟件陷阱的安排,我們主要安排在這樣一些區(qū)域,未使用的中斷區(qū),未使用的EPROM空間及非EPROM空間。程序運行區(qū),及中斷服務程序區(qū)。在這里我們主要來看前三種:

        1、 未使用的中斷區(qū)

        如果對于未使用的中斷因干擾而開放的話,我們可以把中斷服務程序這樣來寫:
          NOP
          NOP
          POP D1 ;將原來的錯誤斷點彈出
          POP D2 ;將原來的錯誤斷點彈出
          PUSH 00H
          PUSH 00H ;將斷點地址重寫為0000H
          RETI

        2、 未使用的EPROM區(qū)

        假設我們用了一片2764,但并沒有用完整個存儲區(qū)。這時候就可在未用的區(qū)域里填充上020000數(shù)據(jù),這樣當程序飛入其中時就會很快的走入正軌。這條指令其實是“LJMP 0000H”的機器碼。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 西峡县| 黄陵县| 渭南市| 新邵县| 中山市| 五莲县| 永宁县| 徐州市| 凤城市| 龙岩市| 隆子县| 晋中市| 仙居县| 富裕县| 松江区| 霍邱县| 北安市| 当涂县| 东辽县| 陇南市| 那坡县| 滁州市| 河间市| 三穗县| 廉江市| 拜泉县| 福泉市| 洮南市| 洛南县| 福鼎市| 瓮安县| 伊宁市| 濮阳市| 安塞县| 唐山市| 靖安县| 广东省| 理塘县| 道孚县| 类乌齐县| 长子县|