導航
1.中斷結構系統的中斷源
2.特殊功能寄存器三個主要位置及功能
3.中斷的初始化以及中斷服務函數
————————————————————————————————————————
中斷結構系統的中斷源
中斷源 | 符號 | 類型 | 產生條件 | 中斷請求標誌 |
---|---|---|---|---|
外部中斷0 | INT0 | 外部 | P3.2/INTO引腳,低電平或者下降沿 | IEO |
定時/計數器0 | T0 | 內部 | T0的計數器滿模 | TF0 |
外部中斷1 | INT1 | 外部 | P3.3/INTO引腳,低電平或者下降沿 | IE1 |
定時/計數器1 | T1 | 內部 | T1的計數器滿模 | TF1 |
串行I/O端口 | TI/RI | 內部 | 串口發送完一幀數據,串口接收一幀數據 | TI / RI |
特殊功能寄存器三個主要位置及功能
1.中斷允許控制寄存器 IE(Interrupt Enable)
功能:控制各中斷源的打開與關閉
字節地址爲0xa8,各個位都分配地址,進行位訪問
中間有2個未定義功能,6個有功能的
分別爲
EA | 全局中斷允位 |
---|---|
ES | 串行I/O口中斷允許位 |
ET1 | 定時/計數器1中斷允許位 |
EX1 | 外部中斷1允許位 |
ET0 | 定時/計數器0中斷允許位 |
EX0 | 外部中斷0允許位 |
賦值0爲關閉,1爲打開
0xaf-0xa8位置:EA X X ES ET1 EX1 ET0 EX0
復位後統一變爲0x00
例1:單片機使用外部中斷0,定時中斷0,如何設置IE
IE => 10000011B ,爲0x83 EX0 ,ET0,EA置1,其餘置0
例2:外部中斷0,外部中斷1,和串行中斷,怎麼設置
EX0 = 1 EX1 = 1 ES = 1 EA = 1
開放中斷的規則:先開啓局部中斷,再開啓總中斷也就是EA
2.定時器控制寄存器 TCON(Timer Control Register)
位地址0x88開始的
位置0x8f-0x88:TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
復位後用0x00表示
TF1 TR1:定時/計數器1
TF0 TR0:定時/計算器0
IE1 IT1:外部中斷1
IE0 IT0:外部中斷0
IT i:是外部中斷的觸發方式選擇位
IT i = 0 //外部中斷採用低電平觸發
IT I=1 //外部中斷採用下降沿的方式觸發
IE i :置1後結果:
若開放外部中斷(EX i = 1且 EA = 1),CPU會自動進入對應的外部中斷服務函數中去執行中斷服務
3.中斷的優先級寄存器 IP(Interrupt Priority) 中斷優先級
地址位從0x68開始的
位置0x6f-0x68:X X X PS PT1 PX1 PT0 PX0
PS | 串行優秀級控制位 |
---|---|
PT1 | 定時/計數器1的中斷優先級控制位 |
PX1 | 外部中斷1的中斷優先級控制位 |
PT 0 | 定時/計數器0的中斷優先級控制位 |
PX 0 | 外部中斷0的中斷優先級控制位 |
置1位高優先級,0爲低優先級
若是同級向cpu發出中斷,優先級排序高->低爲:
(外中斷0)IE0 (定時/計數器中斷0)TF0 (外中斷1)IE1 (定時/計算器中斷1)TF1 (串行中斷)T2/R2
若是同時開放T0 T1 INT0 順序 高到低爲:
INT0 T0 T1
若是設置T1,INTO,T0順序響應,怎麼編寫?
PT1設置爲1,其餘不設置,按照原本設置就是INTO TO
PT1 = 1; //另外兩個省略
中斷的初始化
1.選擇外部中斷方式 IT0 = 0(低電平) 或者 IT0 = 1 (下降沿)
2.設置中斷的優先級 Px0 = 0(低優先級) 或者 Px0 = 1(高優先級)
3.開局部中斷 EX0 = 1
4.總中斷 EA = 1
void main(void)
{
IT0 = 1; //外部中斷0 ,下降
Px0 = 1; //外部中斷0 採用高優先級
Ex0 = 1; //開局部中斷
EA = 1; //開全局中斷
}
中斷服務函數:
void 函數名(void) iterrupt n [using m]
其中iterrupt 和 using 關鍵字
n 對應的是中斷號 根據中斷源分配中斷號
m 對應的寄存器組 (一般選擇1-3,0是復位後自動選擇的)
中斷源 | 中斷請求標誌 | 中斷號 |
---|---|---|
外部中斷0 | IE0 | 0 |
定時/計數器0 | TF0 | 1 |
外部中斷1 | IE1 | 2 |
定時/計數器 | TF1 | 3 |
串行發送 | TI | 4 |
串行接收 | RI | 5 |
using m:寄存器組間
m | CPU使用的工作寄存器組間 | R0-R7的地址 |
---|---|---|
0 | 第0組 | 0x00-0x07 |
1 | 第1組 | 0x08-0x0f |
2 | 第2組 | 0x10-0x17 |
3 | 第3組 | 0x18 |
注意點:
中斷服務函數不是通過調函數來實現的
應在函數中做好初始化