51微控制器入門教程(6) 外部中斷

2021-09-02 14:01:07 字數 3841 閱讀 4765

二、中斷優先順序

中斷是指計算機執行過程中,出現某些意外情況需主機干預時,機器能自動停止正在執行的程式並轉入處理新情況的程式,處理完畢後又返回原被暫停的程式繼續執行。

51微控制器的中斷源優先順序與向量號如下表:

中斷源優先順序

中斷向量號

int0 – 外部中斷0最高0

t0 – 定時器/計數器0中斷第21

int1 – 外部中斷1第32

t1 – 定時器/計數器1中斷第43

串列埠中斷第54

t2 – 定時器/計數器2中斷最低5

除了定時器中斷外,51微控制器還有兩個外部中斷源——外部中斷0、外部中斷1。分別由微控制器的12號引腳(int0/p3.2)、13號(int1/p3.3)引腳的低電平/負跳變觸發。

和定時器中斷一樣,要使用這兩個外部中斷,首先要進行初始化操作,即寫入相關的暫存器。初始化外部中斷需要寫入下面兩個暫存器。

1、ie – 中斷允許控制暫存器

2、tcon – 控制暫存器

以初始化0號外部中斷為例,說明暫存器的設定方法。 序號

d7d6

d5d4

d3d2

d1d0

符號ea

–et2

eset1

ex1et0

ex0說明:

ea全域性中斷允許位,當此位是1時中斷可用。(重要)

et2定時器/計數器2中斷允許位

es串列埠中斷允許位

et1定時器/計數器1中斷允許位

ex1外部中斷1允許位

et0定時器/計數器0中斷允許位

ex0外部中斷0允許位(重要)

和定時器中斷類似,使用外部中斷需要開啟全域性中斷允許位ea,以及開啟外部中斷0允許位ex0

ea =1;

//開啟總中斷

ex0 =1;

//開啟0號外部中斷

序號

d7d6

d5d4

d3d2

d1d0

符號tf1

tr1tf0

tr0ie1

it1ie0

it0說明:

tf1定時器1溢位標誌位

tr1定時器1執行控制位

tf0定時器0溢位標誌位

tr0定時器0執行控制位

ie1 外部中斷1請求標誌ie1=1則外部中斷1在向cpu請求中斷,當cpu響應中斷時硬體清0。一般不用手動設定。

it1 外部中斷1觸發方式選擇位該位為0時int1引腳上的低電平訊號可觸發外部中斷1。該位為1時int1引腳上的負跳變訊號可觸發外部中斷1。

ie0 外部中斷0請求標誌ie0=1則外部中斷0在向cpu請求中斷,當cpu響應中斷時硬體清0。一般不用手動設定。

it0 外部中斷0觸發方式選擇位該位為0時int0引腳上的低電平訊號可觸發外部中斷1。該位為1時int1引腳上的負跳變訊號可觸發外部中斷1。(重要)

ie1和ie0為狀態位,即表示cpu對當前的中斷執行狀態,一般無需手動設定。需要設定的暫存器位是it0,以選擇低電平訊號觸發還是負跳變訊號觸發

低電平訊號:即該引腳電平訊號為0時有效。

負跳變訊號:意思是電平從高跳至低時有效,即1→0的訊號,而一直維持低電平則不會觸發中斷。

it0 =1;

//設定外部中斷觸發方式

由以上內容可知,如果要使用外部中斷0,並設定為負跳變訊號觸發,程式寫法如下:

void initex0()

假如要實現以下功能:

按鍵與int0引腳相連,按下按鍵觸發外部中斷。

每觸發一次外部中斷,計數加一,並將次數顯示在一位數碼管上。

搭建**電路如下:

**如下:

# include 

# define uchar unsigned char

# define uint unsigned int

//共陽數碼管編碼表

uchar code table=

;//初始化0號外部中斷

void initex0()

;//計數變數

uint count =0;

void main()

}void initex0()

void ex0_intr

() interrupt 0

51微控制器的中斷系統有6個中斷源,可實現二級中斷巢狀 。

再次放出這張表

中斷源優先順序

中斷向量號

int0 – 外部中斷0最高0

t0 – 定時器/計數器0中斷第21

int1 – 外部中斷1第32

t1 – 定時器/計數器1中斷第43

串列埠中斷第54

t2 – 定時器/計數器2中斷最低5

假設外部中斷0、1同時向cpu申請中斷,由上表可知,優先執行0號外部中斷的服務程式。

修改**電路如下(按鍵同時連線int0與int1)。按鍵按下,則cpu同時收到兩個中斷請求:

修改程式功能如下:

在0號外部中斷服務程式中數碼管顯示0在1號外部中斷服務程式中數碼管顯示1

**如下

# include 

# define uchar unsigned char

# define uint unsigned int

//共陽數碼管編碼表

uchar code table=

;//初始化0、1號外部中斷

void init()

;void main()

void init()

void ex0_intr

() interrupt 0

void ex1_intr

() interrupt 2

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提出的中斷...

微控制器快速入門教程

2006 04 29 00 04 09 微控制器快速入門教程俗話說 工欲善其事,必先利其器 我們學習要微控制器也是這樣,就應該先 購買一套學習器件。然後再去看書學習,而不是先買書看。只是看書,而不去實踐,這樣是學不會的。即時是看明白了書中的意思,沒有實踐的學習,也只是紙上談兵。記得我剛參加工作的時候...