int0—外部中斷0,由p32埠線引入,低電平或下降沿觸發中斷。
int1—外部中斷1,由p33埠線引入,低電平或下降沿觸發中斷。
t0—定時器/計數器0中斷,由t0計數器計滿回零引起。
t1—定時器/計數器1中斷,由t1計數器計滿回零引起。
t2—定時器/計數器2中斷,由t2計數器計滿回零引起。
ti/ri—序列口中斷,串列埠完成一幀字元傳送/接收後引起。
在定時器實驗中,我們已經對t0、t1、t2中斷進行了學習,本文我們對int0和int1這兩個外部中斷進行學習。與這兩個外部中斷有關的暫存器是中斷允許暫存器ie和定時器/計數器控制暫存器tcon。
ie用來設定各個中斷源的開啟和關閉,ie在特殊功能暫存器中位元組位址為a8h,位位址(由低位到高位)分別為a8h~afh,該暫存器可進行位定址,即可以對這個暫存器的每一位進行操作。微控制器復位時ie暫存器全部被清0,這個暫存器的各位如下表所示。
中斷允許暫存器ie
位序號d7
d6d5
d4d3
d2d1
d0位符號
ea--
et2es
et1ex1
et0ex0
位位址afh
--adh
achabh
aaha9h
a8hea—全域性中斷允許位。
ea=1,開啟全域性中斷控制,在此條件下,由各個中斷控制位確定相應中斷的開啟和關閉。
ea=0,關閉全部中斷。
--—無效位。
et2—定時器/計數器2中斷允許位。
et2=1,開啟t2中斷。
et2=0,關閉t2中斷。
es—序列口中斷允許位。
es=1,開啟序列口中斷。
es=0,關閉序列口中斷。
et1—定時器/計數器1中斷允許位。
et1=1,開啟t1中斷。
et1=0,關閉t1中斷。
ex1—外部中斷1中斷允許位。
ex1=1,開啟外部中斷1中斷。
ex1=0,關閉外部中斷1中斷。
et0—定時器/計數器0中斷允許位。
et0=1,開啟t0中斷。
et0=0,關閉t0中斷。
ex0—外部中斷0中斷允許位。
ex0=1,開啟外部中斷0中斷。
ex0=0,關閉外部中斷0中斷。
tcon在特殊功能暫存器中,位元組位址為88h,位位址(由低位到高位)分別為88h~8fh,該暫存器可以進行位定址。tcon暫存器用來控制定時器的啟、停,標誌定時器的溢位和中斷情況。微控制器復位時tcon全部清0。這個暫存器的給位定義如下表所示。其中tf1、tr1、tf0和tr0位用於定時器/計數器的設定。ie1、it1、ie0和it0位用於外部中斷的設定。
定時器/計數器控制暫存器tcon
位序號d7
d6d5
d4d3
d2d1
d0位符號
tf1tr1
tf0tr0
ie1it1
ie0it0
位位址8fh
8eh8dh
8ch8bh
8ah89h
88htf1—定時器1溢位標誌位。
當定時器1計滿溢位時,由硬體使tf1置1,並且申請中斷。進入中斷服務程式後,由硬體自動清0。需要注意的是,如果使用定時器的中斷,那麼該位完全不用人為去操作,但是如果使用軟體查詢的方式的話,當查詢到該位置1後,就必須用軟體清0。
tr1—定時器1執行控制位。
由軟體清0關閉定時器1。當gate=1時,int1為高電平且tr1置1啟動定時器1;當gate=0時,tr1置1啟動定時器1。
tf0—定時器0溢位標誌位。
該位與tf1功能和操作方法相同。
tr0—定時器0執行控制位。
該位與tr1功能和操作方法相同。
ie1—外部中斷1請求標誌。
當it1=0時,外部中斷int1為電平觸發方式,每個機器週期採用int1引腳,若int1引腳為低電平,則置1,否則ie1清0。
當it1=1時,外部中斷int1為邊沿觸發方式,當採集到int1由高電平向低電平的跳變時則將ie1置1。ie1=1表示外部中斷1正向cpu申請中斷。當cpu響應中斷轉向中斷服務程式時,該位由硬體清0。
it1—外部中斷1觸發方式選擇位。
it1=0,電平觸發方式,引腳int1上低電平觸發中斷。
it0=1,邊沿觸發方式,引腳int1上由高電平向低電平的跳變觸發中斷。
ie0—外部中斷0請求標誌。
這一位的用法與ie1相同。
it0—外部中斷0觸發方式選擇位。
這一位的用法與it1相同。
在這個實驗中,我們把按鍵f1與外部中斷的0通道連線在一起。用f1作為外部觸發的訊號源。這裡例程的**如下所示。
main()
void int0_isr(void) interrupt 0 using 1
在主函式中,首先給led賦初值,然後開啟外部中斷,設定外部中斷為電平觸發方式,之後for迴圈使程式處於等待狀態。在外部中斷的處理函式中,將led的每一位取反。
將程式燒寫之後可以看到實驗現象,發光管中有4個點亮,按下f1按鍵則發光管全部點亮,鬆開f1按鍵,則4個發光管點亮。
int0和int1分別與p32和p33口復用,將按鍵接到p32口上後,按下按鍵之後,int0口輸入低電平。則觸發中斷。在中斷中,對led按位取反。由於採用電平觸發中斷,因此只要按鍵按下,就會一直進入中斷,對led一直取反。因此,看到的現象是8個發光管都發光。
這個實驗與上乙個實驗不同,這個實驗我們採用邊沿觸發的方式採集外部中斷,並對led進行控制,實驗**如下所示。
main()
void int0_isr(void) interrupt 0 using 1
這個實驗用外部中斷0的下降沿來觸發中斷。在中斷中進行去抖後,將led1的狀態改變。將按鍵接到p32口上後,按下按鍵之後,則led1狀態改變。 51微控制器 外部中斷
int0是外部中斷0 0 int1是外部中斷1 2 t0和t1是定時器中斷 1,3 rx和tx是串列埠中斷 it0和it1確定工作方式 暫存器tcon中配置 ie0和ie1是中斷標誌位,為1的時候,向cpu傳送請求中斷 tf0和tf1是溢位中斷請求位 定時器溢位便置1,傳送請求中斷 ri和ti是序列...
C51微控制器 外部中斷
cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷發生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 如圖 引起cpu中斷的根源,稱為中斷源。中斷源向cpu提出的中斷...
51微控制器 中斷
一 中斷的概念 cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷發生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 二 中斷源 在51微控制器中有5個中斷源 中斷號...