MCS51系列單片機軟件復位的方法-基礎電子_第1頁
MCS51系列單片機軟件復位的方法-基礎電子_第2頁
MCS51系列單片機軟件復位的方法-基礎電子_第3頁
MCS51系列單片機軟件復位的方法-基礎電子_第4頁
MCS51系列單片機軟件復位的方法-基礎電子_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

精品文檔-下載后可編輯MCS51系列單片機軟件復位的方法-基礎電子摘要:文章指出了一種廣泛流傳的誤解:在MCS-51系列單片機中,只要用指令使程序從起始地址開始執(zhí)行,就可以復位單片機,擺脫干擾。通過一個簡單的實驗,揭示了軟件復位的可靠方法。

有的單片機(如8098)有專門的復位指令,某些增強型MCS-51系統(tǒng)單片機雖然沒有復位指令,但片內集成了WATCHDOG電路,故抗干擾也不成問題。而普及型MCS-51系列單片機(如8031和8032)既然無復位指令,又不帶硬件WATCHDOS,如果沒有外接硬件WATCHDOG電路,就必須采用軟件抗干擾技術。常用的軟件抗干擾技術有:軟件陷阱、指令冗余、軟件WATCHDOG等,它們的作用是在系統(tǒng)受干擾時能及時發(fā)現(xiàn),再用軟件的方法使系統(tǒng)復位。所謂軟件復位就是用一系列指令來模仿復位操作,這就是MCS-51系列單片機所特有的軟件復位技術。

現(xiàn)用一簡單的實驗說明,實驗電路如附圖所示。接于仿真插座P1.0的發(fā)光二極管LED0用來表示主程序的工作情況,接于P1。1的發(fā)光二極管LED1用于表示低級中斷子程序的工作情況,接于P1。2的發(fā)光二極管LED2用來表示中斷子程序的工作情況,接于P3。2口的按鈕用來設立干擾標志,程序檢測到干擾標志后故意進入死循環(huán)或掉進陷井,模仿受干擾的情況,從而檢驗各種復位方法的實際效果。寮驗初始化程序如下:

ORG0000H

STAT:LJMPMAIN;復位入口地址

LJMPPX0;按鈕中斷向量(低級中斷)

ORG000BH

LJMPPT0;t0中斷向量(低級中斷)

ORG001BH

LJMPPT1;T1中斷向量(中斷)

ORG0030H

MAIN:

CLREA

MOVSP,#7

MOVP1,#0FFH

MOVP3,#0FFH

MOVTMOD,#11H

CLR00H;干擾標志初始化

SETBET0

SETBET1

SETBEX0

SETBPT1

SETBTR0

SETBTR1

SETBEA

LOOP:CPLP1.0;主程序發(fā)光二極管LED閃爍

MOVR6,#80H

MOVR7,#0

TT1:

DJNZR7,TT1

DJNZR6,TT1

SJMPLOOP

PX0:

SETB00H;設立干擾標志,模擬發(fā)生干擾

PT0:CPLP1.1;低級中斷程序發(fā)光二極管LED1閃爍

RETI

PT1:CPLP1.2;中斷程序發(fā)光二極管LED2閃爍

RETI

END

實驗步驟如下:

1.按上述程序啟動執(zhí)行,三個發(fā)光二極管都應閃爍(否則應先排除故障),表示主程序和各中斷子程序正常。因模擬干擾標志未加檢測,故不受按鈕影響。

2.修改主程序如下,按下按鈕后主程序即掉入死循環(huán)中。

LOOP:CPLP1.0

MOVR6,#80H

MOVR7,#0H

TT1:DJNZR7,TT1

DJNZR6,TT1

JNB00H,LOOP;受干擾否?

STOP:LJMPSTOP;掉入死循環(huán)。

這時可以看到,主程序停止工作(LED0停止閃爍),而兩個中斷子程序繼續(xù)運行(LED1和LED2繼續(xù)閃爍)。

3.將定時器T1妝作軟件WATCHDOG,將30H單元用作軟件WATCHDOG計數(shù)器。主程序中加入一條復位軟件WATCHDOG的指令。

LOOP:CPLP1.0

MOV30H,#0;復位軟件WATCHDOG計數(shù)器

LOOP:CPLP1.0

MOVR6,#80H

MOVR7,#0H

TT1:DJNZR7,TT1

DJNZR6,TT1

JNB00H,LOOP;受干擾否?

STOP:LJMPSTOP;掉入死循環(huán)。

T1中斷子程序修改如下:

PT1:CPLP1.2;中斷程序發(fā)光二極管閃爍

INC30H

MOVA,30H

ADDA,#0FDH

JCERR;達到3次否?

RETI

ERR:LJMPSTAT;軟件WATCHDOG動作

當按下按鈕前,程序正常運行(三個LED全閃)。按下按鈕后,主程序能迅速恢復工作,但兩個中斷子程序被封鎖,不再工作。過程如下:主程序檢測到干擾后進入死循環(huán),不能執(zhí)行復位30H單元的操作,T1中斷使30H不斷增值,計數(shù)到3時,軟件WATCHDOG執(zhí)行動作,執(zhí)行一條LJMP指令,使程序從頭執(zhí)行。MAIN過程中清除了干擾標志(表示干擾已經(jīng)過去),使主程序迅速恢復工作。按理說MAIN過程中也重新設定了各個中斷,并開放了它們,為什么中斷不能恢復工作呢?這是因為中斷激活標志的復位工作被遺忘了,因為它沒有明確的位地址可供編程,直接轉向0000H地址并不能完成真正的復位。軟件復位是使用軟件陷井和軟件WATCHDOG后必須進行的工作,這時程序出錯完全有可能發(fā)生中斷子程序中,中斷激活標志已置位,它將阻止同級中斷響應。由于軟件WATCHDOG是中斷,它將阻止所有中斷響應。由此可見,清除中斷激活標志的得要性,很多文獻的作者回為沒有認識到這一點進入誤區(qū)。

4.在所有指令中,只有RETI指令能清除中斷激活標志。出錯處理程序ERR主要是完成這一功能,其它的善后工作交由復位后的系統(tǒng)去完成。為此,我們重新設計T1中斷子程序如下所示:

PT1:CPLP1.2;中斷程序發(fā)光二極管閃爍

INC30H;軟件WATCHDOG計數(shù)器增值

MOVA,30H

ADDA,#0FD

JCERR;達到3次否?

RETI

ERR:CLREA;關中斷

CLRA;準備復位地址(0000H)

PUSHACC

PUSHACC

RETI;清除中斷激活標志并復位

這段程序先關中斷,以便后續(xù)處理能順利進行,然后用RETI指令替代LJMP指令,從而既清除了中斷激活標志又完成了轉向0000H的任務。按這樣改好后程序再運行,結果仍不理想:按下按鈕后,有時只有主程序和中斷子程序能迅速恢復正常,而低級中斷仍有被關閉的可能。如果按如下方法把干擾轉移到低級中斷中,則按下按鈕后低級中斷必然被關閉:

LOOP:CPLP1.0

MOVR6,#80H

MOVR7,#0H

TT1:DJNZR7,TT1

DJNZR6,TT1

SJMPLOOP

PT0:CPLP1.1

JB00H,STOP

RETI

STOP:LJMPSTOP;掉入死循環(huán)。

仔細分析后可能得出結論:當軟件WATCHDOG是嵌套在低級中斷中起作用時,復位后只清除了中斷激活標志,低級中斷標志仍然被置位,從而使低級中斷一直被關閉。

5.修改出錯處理如下:

ERR:CLREA;正確的軟件復位入口

MOV66H,#0AAH;重建上電標志

MOV67H,#55H

MOVDPTR,#ERR1;準備次返回地址

PUSHDPL

PUSHDPH

RETI;清除中斷激活標志

ERR1:CLRA

PUSHACC

PUSHACC

RETI;清除低級中斷激活標志

這時,必須執(zhí)行兩次RETI,才能到達0000H,以保證清除全部中斷激活標志,達到和硬件復位相同的效果。同樣,軟件陷井也必須由下列三條指令

NOP

NOP

LJMPSTAT

改成:

NOP

NOP

LJMPERR

才能達到目的。

當主程序受到干擾被軟件陷阱捕獲時,中斷標志并未置位,執(zhí)行ERR過程中,RETI指令等效于RET指令,同

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論