關(guān)于51單片機(jī)外部中斷的觸發(fā)方式
51單片機(jī)有兩個(gè)外部中斷申請輸入端:INT0 和 INT1。
51單片機(jī)的外部中斷,分為低電平觸發(fā)和下降沿觸發(fā)。在單片機(jī)內(nèi)部,分別由控制位 IT0 和 IT1 來控制。
復(fù)位時(shí),IT0/1 都為 0,即默認(rèn)為低電平觸發(fā)。
一般來說,外設(shè)第一次向單片機(jī)申請外部中斷時(shí),單片機(jī)使用那種觸發(fā)方式,并無什么差別。
但是,返回主程序后,如果外部申請信號仍然是低電平,就有區(qū)別了。
在采用低電平觸發(fā)時(shí),單片機(jī)執(zhí)行了一條主程序的指令后,就會(huì)又重新進(jìn)入中斷程序。
而采用下降沿觸發(fā)時(shí),即使 INT0/1 引腳仍然是低電平,單片機(jī)也不會(huì)重新進(jìn)入中斷程序。
如果外設(shè)想要申請第二次中斷,必須是先恢復(fù)高電平,重新再送來一次下降沿才行。
那么,為了避免僅僅來了一次申請,就產(chǎn)生多次中斷的現(xiàn)象,還是應(yīng)該采用下降沿觸發(fā)中斷的方式。
如果非要使用低電平觸發(fā)呢,那必須在退出前,反復(fù)的檢測中斷輸入端的電平。
只有當(dāng)外設(shè)撤消了中斷申請之后,再退出中斷程序,這才能避免多次的重新中斷。
到底應(yīng)該采用那種觸發(fā)方式,這個(gè)確實(shí)是應(yīng)該根據(jù)外設(shè)的特點(diǎn)來選取。
但是在多數(shù)場合,采用下降沿觸發(fā)方式,還是比較適用的。
即在復(fù)位后,應(yīng)該先執(zhí)行:
SETB IT0
SETB IT1
有人在百度知道,提出了一個(gè)問題,希望能顯示出低電平觸發(fā)和下降沿觸發(fā)的區(qū)別。
題目的基本內(nèi)容如下。
;單片機(jī)匯編程序題:要求一定是匯編
;AT89C51中P3.2接開關(guān)1,P3.3接開關(guān)2。
;當(dāng)開關(guān)1, 2全都斷開時(shí)運(yùn)行主程序,P1口的8個(gè)LED從P1.0~P1.7逐個(gè)點(diǎn)亮并反復(fù)循環(huán)。
;當(dāng)開關(guān)1閉合時(shí)進(jìn)入中斷服務(wù)程序P2口的8個(gè)LED閃爍6次。
;開關(guān)2起到對開關(guān)1觸發(fā)方式進(jìn)行選擇的作用:
;第一次閉合開關(guān)2時(shí)開關(guān)1為下降沿觸發(fā)且P0.0連接的LED點(diǎn)亮;
;第二次閉合開關(guān)2時(shí)開關(guān)1為低電平觸發(fā)且P0.0連接的LED熄滅。
;求一個(gè)用匯編語言編寫的完整程序。
根據(jù)上述題目要求,做而論道畫出了PROTEUS仿真實(shí)驗(yàn)電路如下:
;下列程序,可以滿足要求。
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
;-------------------------------延時(shí)子程序
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
;===============================================