
【資料圖】
STC15W408AS單片機有4個外部中斷,它們分別是:外部中斷0(INT0)、外部中斷1(INT1)、外部中斷2(INT2)、外部中斷3(INT3)。
外部中斷0(INT0)和外部中斷1(INT1)觸發有兩種觸發方式,上升沿或下降沿均可觸發方式和僅下降沿觸發方式。
TCON寄存器中的IT0/TCON.0和IT1/TCON.2決定了外部中斷0和1是上升沿和下降沿均可觸發還是僅下降沿觸發。如果ITx = 0(x = 0,1),那么系統在INTx(x = 0,1)腳探測到上升沿或下降沿后均可產生外部中斷。如果ITx = 1(x = 0,1),那么系統在INTx( x= 0,1)腳探測下降沿后才可產生外部中斷。外部中斷0(INT0)和外部中斷1(INT1)還可以用于將單片機從掉電模式喚醒。
外部中斷2(INT2)、外部中斷3(INT3)都只能下降沿觸發。外部中斷2~3的中斷請求標志位被隱藏起來了,對用戶不可見,故也無需用戶清"0"。當相應的中斷服務程序被響應后或中斷允許位EXn (n=2,3)被清零后,這些中斷請求標志位會立即自動地被清0。這些中斷請求標志位也可以通過軟件禁止相應的中斷允許控制位將其清"0"(特殊應用)。外部中斷2(INT2)、外部中斷3(INT3)也可以用于將單片機從掉電模式喚醒。
由于系統每個時鐘對外部中斷引腳采樣1次,所以為了確保被檢測到,輸入信號應該至少維持2個時鐘。如果外部中斷是僅下降沿觸發,要求必須在相應的引腳維持高電平至少1個時鐘,而且低電平也要持續至少一個時鐘,才能確保該下降沿被CPU檢測到。同樣,如果外部中斷是上升沿、下降沿均可觸發,則要求必須在相應的引腳維持低電平或高電平至少1個時鐘,而且高電平或低電平也要持續至少一個時鐘,這樣才能確保CPU能夠檢測到該上升沿或下降沿。
這里,我們只需要看最上面的部分就可以。
IE寄存器是中斷總控制,IP是中斷優先級控制寄存器,TCON的低4位是外部中斷0和外部中斷1控制位。一般情況下我們只需要操作IE和TCON寄存器即可。
實驗現象是點按一下按鈕,LED閃爍一次,和上面的按鍵輸入實驗效果是一樣的。
#include "stc15.h"void main(){ P11 = 0; // 初始設置P1.1為低電平 熄滅LED IT0 = 1; // 設置INT0的中斷類型 (1:僅下降沿 0:上升沿和下降沿) EX0 = 1; // 使能INT0中斷 EA = 1; // 打開總中斷while (1);}//外部中斷服務程序void exint0() interrupt 0 //INT0中斷入口{ P11 = !P11; //將P1.1口取反}
這里需要說明的是為什么外部中斷服務程序是 interrupt 0。這個后面數字和中斷優先級有關。從上面的中斷結構圖中,我們就可以看出外部中斷0的優先級是最高的,所以這里是0,其他的在后面使用到再講。
標簽: