『壹』 51單片機中如果要利用他的外部中斷是不是必須把線接到P3.2和P3.3上呢
是的,既然外部中斷,必須由外部輸入,打開總中斷和外部中斷使能,並且設置是電平觸發還是下降沿觸發,當中斷條件滿足時,即可進入中斷服務函數
EA=1; //開總中斷
EX0=1;//開外部中斷0
IT0=1;//下降沿觸發
然後可以寫中斷服務函數了,但一定要注意中斷序號不要搞錯了
至於中斷優先順序可以不設,因其只有0和1兩種,況且用中斷嵌套比較復雜
中斷程序編號:
外部中斷0:0
定時/計數器0中斷:1
外部中斷1:2
定時/計數器1中斷:3
串列口中斷:4
定時/計數器2中斷:5
中斷函數後面必須註明interrupt 及序號如
void timer0()interrupt 1//定時器0中斷
『貳』 51單片機中的外部中斷有什麼作用
可以打個比方,每天上班你都隨時需要知道你同事的工作進度情況,你是希望你不停地打個電話去問「你做完了嗎」,還是希望他做完了主動打個電話給你講「我做完了,我們談談吧」。這就是中斷的意義,在不需要的時候不影響處理 器做其它的事情,提高效率,增強程序的實時性。
『叄』 51單片機外部中斷
一。外部中斷0下降沿方式。如果在中斷過程中,又繼續來了幾個下降沿,那麼這些中斷是被忽略了還是排隊等待執行?
答案:會被忽略,只有在中斷返回時,硬體才會清除中斷標志,此時之後有下降沿來臨才會被觸發申請中斷。
二。外部中斷0低電平方式。如果在中斷過程中,一直都是低電平,那麼這些中斷是被忽略了還是排隊等待執行?
答案:如果中斷返回時還是低電平,那麼會排隊等待執行。
『肆』 51單片機如何使用定時器計數器擴展外部中斷
把定時器設為外部計數模式,初值為65535或255,開定時器中斷,這樣,來一個脈沖,計數器即溢出,可進入中斷程序。
『伍』 51單片機外部中斷是哪幾個管腳
五個中斷有指定的IO口,一般51單片機是P3.2是INT0,P3.3是INT1,P3.4是T0,P3.5是T1,INT0和INT1是外部中斷,T0和T1是定時器,ES是串列口中斷允許位,ET1是定時器1中斷允許位,EX1是外部中斷允許位,ET0和EX0類似。
要產生中斷,必須先配置好並使能中斷線。根據需要的邊沿檢測設置兩個觸發寄存器,同時在中斷屏蔽寄存器的相應位寫1允許中斷請求。
當外部中斷線上發生了期待的邊沿時,將產生一個中斷請求,對應的掛起位也隨之被置l。在掛起寄存器的對應位寫1,將清除該中斷請求。
如果需要產生事件,必須先配置好並使能事件線。根據需要的邊沿檢測通過設置兩個觸發寄存器,同時在事件屏蔽寄存器的相應位寫1允許事件請求。
當事件線上發生了需要的邊沿時,將產生一個事件請求脈沖,對應的掛起位不被置1。通過在軟體中斷/事件寄存器寫1,也可以通過軟體產生中斷/事件請求。
(5)51單片機外部中斷擴展閱讀:
外部中斷的觸發有兩種觸發方式:電平觸發方式和跳沿觸發方式。
電平觸發方式
若外部中斷定義為電平觸發方式,外部中斷申請觸發器的狀態隨著CPU在每個機器周期采樣到的外部中斷輸入線的電平變化而變化,這能提高CPU對外部中斷請求的響應速度。
當外部中斷源被設定為電平觸發方式時,在中斷服務程序返回之前,外部中斷請求輸入必須無效(即變為高電平),否則CPU返回主程序後會再次響應中斷。所以電平觸發方式適合於外部中斷以低電平輸入而且中斷服務程序能清除外部中斷請求源(即外部中斷輸入電平又變為高電平)的情況。
跳沿觸發方式
外部中斷若定義為跳沿觸發方式,外部中斷申請觸發器能鎖存外部中斷輸入線上的負跳變。即便是CPU暫時不能響應,中斷申請標志也不會丟失。
在這種方式里,如果相繼連續兩次采樣,一個機器周期采樣到外部中斷輸入為高,下一個機器周期采樣為低,則置「1」中斷申請觸發器,直到CPU響應此中斷時才清』0』。
這樣不會丟失中斷,但輸入的負脈沖寬度至少保持12個時鍾周期(若晶振頻率為6MHz,則為21xs),才能被CPU采樣到。外部中斷的跳沿觸發方式適合於以負脈沖形式輸入的外部中斷請求。
『陸』 51單片機外部中斷觸發方式
外部中斷觸發方式有2種,低電平觸發方式和下降沿觸發方式和低電平觸發方式一般單片機能識別的低電平是0.8V,只要低於這個電壓就能觸發中斷。
『柒』 51單片機的外部中斷有哪兩種觸發方式
有兩種觸發方式,一是低電平觸發,二是下降沿觸發,由於低電平觸發易引起中斷重入問題,所以常用下降沿觸發。
『捌』 關於51單片機的外部中斷
我也是初學者,不過我覺得你的中斷程序有點問題,如下,僅供參考。
INT00:
PUSH
ACC
PUSH
PSW
MOV
P2,#0FFH
;全滅
CALL
DELAY
MOV
P2,#00H
;全亮
CALL
DELAY
POP
PSW
POP
ACC
RETI
『玖』 關於51單片機的外部中斷使用方法
使用方法:
單片機的P2.5,P2.6,P2.7口分別接三位動態數碼管的位選端,P0口接動態數碼管的段選端。然後,P1.0口接一個電阻串聯一個LED燈然後接地,電阻取200~470歐之間就行,是一個限流電阻。
中斷用的是外部中斷0,要觸發中斷的時候,就用一根杜邦線一端接地,一端接到單片機的P3.2口就行,這樣,就滿足了你的要求了。
外部中斷的觸發方式有低電平觸發和下降沿觸發。到底是那種觸發方式,要設置中斷允許寄存器中IT0的值,如果IT0=0,像我寫的程序,就是低電平觸發,如果為1,就是下降沿觸發。
燈不是一定要接到P3.2口上的。中斷要執行的任務是在中斷函數中寫代碼控制的,就像我寫的代碼中,你只需要控制LED燈接的那個IO口就行了。
代碼如下:
#include
#define
uchar
unsigned
char
sbit
led=P1^0;
uchar
code
an[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar
code
wei[3]={0x06,0x05,0x03};
void
delay(uchar
c);
void
ini_()
//初始化函數,設置中斷觸發方式,開中斷
{
EA=1;
IT0=0;
EX0=1;
}
void
main()
{
uchar
i;
ini_();
led=0;
//由於單片機上電之後,所有的IO口默認是高電平,而要求是開始不亮,所以要將P1.0口開始設置為低電平。
while(1)
{
for(i=0;i<3;i++)
動態數碼管閃爍
{
P2=wei[i];
P0=an[i];
delay(35);
}
}
}
void
led_()
interrupt
0
//外部中斷0函數,中斷函數不需要申明
{
uchar
i;
led=1;
//在中斷中讓燈亮起來
while(1)
{
for(i=0;i<3;i++)
{
P2=wei[i];
P0=an[i];
delay(1);
}
}
}
void
delay(uchar
c)
{
uchar
a,b;
for(c;c>0;c--)
for(a=38;a>0;a--)
for(b=80;b>0;b--);
}