CPU在執(zhí)行的過程中,一般來說都是在執(zhí)行主程序(main函數(shù)里面的代碼)。如果希望處理其他的功能,可以通過查詢的方式進行,判斷是否需要處理或者通過中斷的方式,進入中斷服務(wù)函數(shù)程序里面執(zhí)行。
前者是在主程序中判斷條件是否成立,如果成立則執(zhí)行其他功能,否則不執(zhí)行;后者是CPU在執(zhí)行過程中,判斷是否有中斷標志位,響應(yīng)中斷進入中斷服務(wù)函數(shù),執(zhí)行相關(guān)功能。
MCS-51 單片機中,有兩個外部中斷(INT0與INT1),中斷有兩種方式低電平觸發(fā)與負跳變(下降沿)觸發(fā)。
下面通過講INT0說明外部中斷,INT1同理。
原理圖:
P0連接8個LED,INT0引腳連接一個按鈕連接到地。
在中斷系統(tǒng)中,INT0設(shè)計的寄存器中有IE、IP、TCON,在C51規(guī)定特殊寄存器的地址為8的倍數(shù)均可以位尋址。IE寄存器地址為:0xA8;IP寄存器地址為0xB8;TCON寄存器地址為0x88;因此它們可以被位尋址。
以下是它們的位定義。
/* TCON */
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;
/* IE */
sbit EA = IE^7;
sbit ET2 = IE^5; //8052 only
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;
/* IP */
sbit PT2 = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;
如果需要使用外部中斷,需要滿足以下條件
1)中斷中允許設(shè)置(置1)EA = 1;
2)中斷源允許設(shè)置(置1)Ex0 = 1;
3)中斷觸發(fā)方式設(shè)置(置1或置0) IT0 =1 或者 IT0 = 0;
4)中斷服務(wù)函數(shù)
代碼實現(xiàn)
#include "reg52.h"
#include "stdio.h"
void main(){
IT0 = 1;
EA = 1;
EX0 = 1;
while(1){};
}
void irq0(void) interrupt 0
{
P0=~P0;
}
注:由于IT0 =1;設(shè)置中斷觸發(fā)方式為負跳變(下降沿),CPU相應(yīng)中斷后清除中斷標志位。而由于IT0 =0;設(shè)置中斷觸發(fā)方式為低電平觸發(fā),CPU相應(yīng)中斷后不會清除中斷標志位。
在上面的中斷服務(wù)功能中表現(xiàn),按一下LED燈亮,再按一次LED燈滅;
如果將IT0設(shè)置為0,則按下時LED會閃爍。因為中斷標志位沒有清除,不斷進入中斷服務(wù)函數(shù)。
如果需要設(shè)置外部中斷1,負跳變觸發(fā)。只需要改上面代碼的三條語句即可。
IT0 = 1; ---- > IT1 = 1;
EX0 = 1; ---- > EX1 = 1;
void irq0(void) interrupt 0 -- > 修改終端號,將0 修改為2;
void irq0(void) interrupt 2 ---- >函數(shù)名irq0,可根據(jù)需要修改或不改
-
單片機
+關(guān)注
關(guān)注
6040文章
44594瀏覽量
636943 -
寄存器
+關(guān)注
關(guān)注
31文章
5359瀏覽量
120812 -
cpu
+關(guān)注
關(guān)注
68文章
10890瀏覽量
212420 -
51單片機
+關(guān)注
關(guān)注
274文章
5705瀏覽量
123926 -
外部中斷
+關(guān)注
關(guān)注
1文章
132瀏覽量
15843
發(fā)布評論請先 登錄
相關(guān)推薦
評論