關於51微控制器外部中斷的觸發方式
51微控制器有兩個外部中斷申請輸入端:INT0 和 INT1。
51微控制器的外部中斷,分為低電平觸發和下降沿觸發。在微控制器內部,分別由控制位 IT0 和 IT1 來控制。
復位時,IT0/1 都為 0,即預設為低電平觸發。
一般來說,外設第一次向微控制器申請外部中斷時,微控制器使用那種觸發方式,並無什麼差別。
但是,返回主程式後,如果外部申請訊號仍然是低電平,就有區別了。
在採用低電平觸發時,微控制器執行了一條主程式的指令後,就會又重新進入中斷程式。
而採用下降沿觸發時,即使 INT0/1 引腳仍然是低電平,微控制器也不會重新進入中斷程式。
如果外設想要申請第二次中斷,必須是先恢復高電平,重新再送來一次下降沿才行。
那麼,為了避免僅僅來了一次申請,就產生多次中斷的現象,還是應該採用下降沿觸發中斷的方式。
如果非要使用低電平觸發呢,那必須在退出前,反覆的檢測中斷輸入端的電平。
只有當外設撤消了中斷申請之後,再退出中斷程式,這才能避免多次的重新中斷。
到底應該採用那種觸發方式,這個確實是應該根據外設的特點來選取。
但是在多數場合,採用下降沿觸發方式,還是比較適用的。
即在復位後,應該先執行:
SETB IT0
SETB IT1
有人在百度知道,提出了一個問題,希望能顯示出低電平觸發和下降沿觸發的區別。
題目的基本內容如下。
;微控制器彙編程式題:要求一定是彙編
;AT89C51中P3.2接開關1,P3.3接開關2。
;當開關1, 2全都斷開時執行主程式,P1口的8個LED從P1.0~P1.7逐個點亮並反覆迴圈。
;當開關1閉合時進入中斷服務程式P2口的8個LED閃爍6次。
;開關2起到對開關1觸發方式進行選擇的作用:
;第一次閉合開關2時開關1為下降沿觸發且P0.0連線的LED點亮;
;第二次閉合開關2時開關1為低電平觸發且P0.0連線的LED熄滅。
;求一個用匯編語言編寫的完整程式。
根據上述題目要求,做而論道畫出了PROTEUS模擬實驗電路如下:
;下列程式,可以滿足要求。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP X0_INT
ORG 0013H
LJMP X1_INT
;------------------------------------
MAIN:
SETB IT1
MOV SP, #60H
MOV IE, #85H
MOV A, #254
M_LOOP:
MOV P1, A
RL A
CALL DL_500MS
SJMP M_LOOP
;------------------------------------
X0_INT:
PUSH PSW
SETB RS1
MOV R4, #12
SH_6:
XRL P2, #255
CALL DL_500MS
DJNZ R4, SH_6
POP PSW
RETI
;------------------------------------
X1_INT:
CPL IT0
CPL P0.0
RETI
;-------------------------------延時子程式
DL_500MS:
MOV R5, #9 ;1T
DL1: MOV R6, #128 ;1T
DL2: MOV R7, #215 ;1T
NOP ;1T
DL3: DJNZ R7, DL3 ;2T 2 * 215 = 430 T
DJNZ R6, DL2 ;2T [1+1+430+2] * 128 = 55552 T
DJNZ R5, DL1 ;2T [1+55552+2] * 9 = 499995 T
RET ;2T 1 + 499995 + 2 = 499998 T
;------------------------------------
END
;===============================================
原題網址:http://zhidao.baidu.com/question/270426318.html
提問者對於答案的評價:謝了,採用你的答案
;===============================================