中斷相關的基礎概念
核心和外設之間的主要互動方式有兩種:輪詢和中斷。
在執行cpu當前程式時,由於系統**現了某種急需處理的情況,cpu暫停正在執行的程式,轉而去執行另外一段特殊的程式來處理出現的緊急事務,處理結束後,cpu自動返回到原來暫停的程式中去繼續執行。這種程式在執行過程中由於外界的原因而被中間打斷的情況,成為中斷。
中斷服務函式:核心響應中斷後執行的相應處理程式。
中短向量:中斷服務函式的入口位址。每個中斷源都對應乙個固定的入口位址。當核心響應中斷請求時,就會暫停當前的程式執行,然後跳轉到該入口位址執行**。
有中斷請求不一定能打斷主程式。
中斷系統
首先將j5處的跳帽接到2 ~ 3 引腳,即s5按鍵接到p32/int0,s4按鍵接到p33/int1。定義乙個working函式,使l1指示燈不斷閃爍。將p32引腳定義為外部中斷功能,按鍵s5按鍵就會產生外部中斷觸發訊號,在中斷響應函式中,點亮l8指示燈,延長一段時間後熄滅,該功能用兩種方式實現:
1-直接在中斷服務函式中延時
2-在中斷服務函式中標誌變數,在外部執行延時
#include
"reg52.h"
sbit l1 = p0^0;
sbit l8 = p0^7;
void
delay
(unsigned
int t)
void
selecthc573()
void
working()
//*************************==
void
init_int0()
void
serviceint0
() interrupt 0
//外部中斷0的中斷號是0
//*************************==
void
main()
}
上面的這個**將延時函式放在了中斷服務函式中。
這個的結果是當使l1閃爍時,按下s5,l8亮,但l1可以亮,可以不亮。這取決於按下的時間點。
如果將延時放在中斷服務函式外面 即:
#include
"reg52.h"
sbit l1 = p0^0;
sbit l8 = p0^7;
void
delay
(unsigned
int t)
void
selecthc573()
void
working()
//*************************==
void
init_int0()
unsigned
char stat_int=0;
void
serviceint0
() interrupt 0
//外部中斷0的中斷號是0
void
ledint()
stat_int=0;
}//*************************==
void
main()
}
上面這個**將延時放在了另乙個函式中,而中斷服務函式中只有標誌變數的改變。
這就使得當有乙個中斷進來使標誌變數改變時,必須等到working執行完之後(即l1閃爍一次之後),才會檢測變數的值,在決定l8是否點亮。
注意一般在中斷服務函式中不要寫太多的語句。
小蜜蜂微控制器04 數碼管的動態顯示
動態顯示實質上就是輪流點亮單個數碼管實現多位數碼管整體顯示的效果 在輪流顯示過程中,每位數碼管點亮時間為1 2ms,由於人的視覺暫留現象及發光二極體的餘輝效應,儘管實際上各位數碼管並非同時點亮,但只要掃瞄的速度夠快,給人的印象就是一組穩定的顯示資料,不會有閃爍感,動態顯示的效果和靜態顯示是一樣的,能...
微控制器中斷系統
微控制器中斷系統的優點 1 實現實時處理。2 實現分時操作。3 進行故障處理。4 待機狀態的喚醒。微控制器嵌入式系統的應用中,為了減少電源的功耗,當系統不處理任何事物,處於待機狀態時,可以讓微控制器工作在休眠的低功耗方式。通常,恢復到正常工作方式往往也是利用中斷訊號來喚醒。中斷處理過程 中斷系統中,...
微控制器的中斷系統
正常的工作過程被外部的事件打斷了,ex 你正在家中看書,突然 鈴響了,你放下書本,去接 和來 的人交談,然後放下 回來繼續看你的書。中斷源引起中斷的事件稱之為中斷源,51中一共有5五個 兩個外部中斷,兩個計數 定時器中斷,乙個序列口中斷。中斷優先順序與巢狀中斷的響應過程5個中斷源的符號 名稱及產生 ...