實驗參考: 《單片機輕松入門》(周堅)
實驗板:
FB51A。
方法: 通過按鍵模擬外部中斷的產(chǎn)生信號,用P0.0口接的LED作為中斷響應(yīng)。
實驗現(xiàn)象:鍵按下時,P0.0口的LED亮滅交替。
電路如下:

在程序中,將中斷0設(shè)置為下降沿觸發(fā):
org 0000h
ajmp start
org 0003h ; 外部中斷地址入口
ljmp int_0 ; 轉(zhuǎn)到真正的處理程序
org 30h
start: mov sp, #5fh ; 初始化堆棧
mov p0, #0ffh ; 燈全滅
mov p3, #0ffh ; P3口置高電平
setb IT0 ; 下降沿觸發(fā)
setb EA ; 開總中斷
setb EX0 ; 開外中斷0
ljmp $ ; 原地踏步等待中斷
int_0: ; 中斷服務(wù)程序
cpl P0.0 ; 取反
reti
end
★ 其中原地踏步等待中斷處在實際應(yīng)用中可以是單片機的工作部分,當中斷觸發(fā)后,停下這部分工作進行中斷處理,處理完后再繼續(xù)原來的工作,這正是中斷的功能。
編譯下載到板子上驗證,得到預(yù)計結(jié)果: 鍵按下時,P0.0口的LED亮滅交替(由于此板上鍵并非按上圖的接法設(shè)計,故在實測時用導(dǎo)線連接P3.2口和地模擬上述鍵按下)。用Proteus仿真結(jié)果如下:

★ 對中斷而言,下降沿觸發(fā)和低電平觸發(fā)兩種方式是有所區(qū)別的(IT0=0是低電平觸發(fā),IT0=1是下降沿觸發(fā))。做一下這個實驗會發(fā)現(xiàn)有如下兩個現(xiàn)象:
<1> 將"setb IT0"改為"clr IT0",即改用低電平觸發(fā),按住按鈕后LED一定是亮的;而用下降沿觸發(fā),按下按鈕后LED可能是亮的,也可能是滅的。
<2> 用低電平觸發(fā),如果一直按著按鈕不放,會發(fā)現(xiàn)LED的亮度會有所下降。
這兩個現(xiàn)象說明了這樣一個問題,低電平觸發(fā)是可重復(fù)的。即如果外中斷引腳上一直保持低電平,那么在產(chǎn)生一次中斷返回之后,馬上就會產(chǎn)生第二次中斷,接著是第三次……如此一直到低電平消失為止;而下降沿觸發(fā)沒有這個問題,一次中斷產(chǎn)生后,即使外部中斷引腳上仍保持抵電平,也不會引起重復(fù)中斷。實際應(yīng)用中如采用低電平觸發(fā)方式,外部電路要采用可以及時撤去該引腳上低電平的設(shè)計方式。