1、中斷入口地址及編號
MCS-51在每一個機器周期順序檢查每一個中斷源,在機器周期的S6按優(yōu)先級處理所有被激活的中斷請求,此時,如果CPU沒有正在處理更高或相同優(yōu)先級的中斷,或者現(xiàn)在的機器周期不是所執(zhí)行指令的最后一個機器周期,或者CPU不是正在執(zhí)行RETI指令或訪問IE和IP的指令(因為按MCS-51中斷系統(tǒng)的特性規(guī)定,在執(zhí)行完這些指令之后,還要在繼續(xù)執(zhí)行一條指令,才會響應(yīng)中斷),CPU在下一個機器周期響應(yīng)激活了的最高級中斷請求。
中斷響應(yīng)的主要內(nèi)容就是由硬件自動生成一條長調(diào)用LCALL addr16指令,這里的addr16就是程序存儲器中相應(yīng)的中斷區(qū)入口地址,這些中斷源的服務(wù)程序入口地址如下:
表1 5個中斷源的服務(wù)程序入口地址 |
||||||||||
中斷源 |
入口地址 |
中斷號 |
|
|
|
|
|
|
|
|
外中斷0 |
0003H |
0 |
|
|
|
|
|
|
|
|
定時/計數(shù)器0 |
000BH |
1 |
|
|
|
|
|
|
|
|
外中斷1 |
0013H |
2 |
|
|
|
|
|
|
|
|
定時/計數(shù)器1 |
001BH |
3 |
|
|
|
|
|
|
|
|
串行口中斷 |
0023H |
4 |
|
|
|
|
|
|
|
|
定時/計數(shù)器T2 |
002BH |
5 |
|
|
|
|
|
|
|
|
|
生成LCALL指令后,CPU緊跟著便執(zhí)行之.首先將PC(程序計數(shù)器)的內(nèi)容壓入堆棧保護斷點,然后把中斷入口地址賦予PC,CPU便按新的PC地址(即中斷服務(wù)程序入口地址)執(zhí)行程序。
值得一提的是,各中斷區(qū)只有8個單元,一般情況下(除非中斷程序非常簡單),都不可能安裝下一個完整的中斷服務(wù)程序。因此,通常是在這些入口地址區(qū)放置一條無條件轉(zhuǎn)移指令,使程序按轉(zhuǎn)移的實際地址去執(zhí)行真正的中斷服務(wù)程序。
對于匯編,中斷函數(shù)的一般形式為:
1. ORG 中斷入口地址
2.
3. AJMP 中斷服務(wù)程序地址
4.
5. 中斷服務(wù)程序地址:
6.
7. ......
對于C語言,中斷函數(shù)的一般形式為:
1. void FunctionName(void) interrupt 中斷號 //其中“中斷號”可查表1
2.
3. {
4.
5. .........
6.
7. }
2、與中斷有關(guān)的寄存器
(1) 定時器控制寄存器TCON
表2 TCON寄存器結(jié)構(gòu) |
||||||||
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
|
|
IE1:外部邊沿觸發(fā)中斷1請求標(biāo)志,其功能和操作類似于TF0。
IT1:外部中斷1類型控制位,通過軟件設(shè)置或清除,用于控制外中斷的觸發(fā)信號類型。IT1=1,邊沿觸發(fā)。IT=0是電平觸發(fā)。
IE0:外部邊沿觸發(fā)中斷0請求標(biāo)志,其功能和操作類似于IE1。
IT0:外部中斷0類型控制位,通過軟件設(shè)置或清除,用于控制外中斷的觸發(fā)信號類型。其功能和操作類似于IE1。
(2) 中斷允許寄存器IE
|
表3 IE寄存器結(jié)構(gòu) |
||||||||
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
EA |
- |
- |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
|
|
EA:中斷總控制位,EA=1,CPU開放中斷。EA=0,CPU禁止所有中斷。
ES:串行口中斷控制位,ES=1允許串行口中斷,ES=0,屏蔽串行口中斷。
ET1:定時/計數(shù)器T1中斷控制位。ET1=1,允許T1中斷,ET1=0,禁止T1中斷。
EX1:外中斷1中斷控制位,EX1=1,允許外中斷1中斷,EX1=0,禁止外中斷1中斷。
ET0:定時/計數(shù)器T0中斷控制位。ET1=1,允許T0中斷,ET1=0,禁止T0中斷。
EX0:外中斷0中斷控制位,EX1=1,允許外中斷0中斷,EX1=0,禁止外中斷0中斷。
(3) 中斷優(yōu)選級控制寄存器IP
|
表4 IP中斷優(yōu)先級控制寄存器結(jié)構(gòu) |
||||||||
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
- |
- |
- |
PS |
PT1 |
Px1 |
PT0 |
PX0 |
|
|
PS:串行口中斷口優(yōu)先級控制位,PS=1,串行口中斷聲明為高優(yōu)先級中斷,PS=0,串行口定義為低優(yōu)先級中斷。
PT1:定時器1優(yōu)先級控制位。PT1=1,聲明定時器1為高優(yōu)先級中斷,PT1=0定義定時器1為低優(yōu)先級中斷。
PX1:外中斷1優(yōu)先級控制位。PT1=1,聲明外中斷1為高優(yōu)先級中斷,PX1=0定義外中斷1為低優(yōu)先級中斷。
PT0:定時器0優(yōu)先級控制位。PT1=1,聲明定時器0為高優(yōu)先級中斷,PT1=0定義定時器0為低優(yōu)先級中斷。
PX0:外中斷0優(yōu)先級控制位。PT1=1,聲明外中斷0為高優(yōu)先級中斷,PX1=0定義外中斷0為低優(yōu)先級中斷。
(4)串行通信控制寄存器SCON
它是一個可尋址的專用寄存器,用于串行數(shù)據(jù)的通信控制,單元地址是98H,其結(jié)構(gòu)格式如下:
|
表5串行通信控制寄存器SCON |
||||||||
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
SM0 |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
TI |
RI |
|
TI:發(fā)送中斷標(biāo)志位。
方式0時,發(fā)送完第8位數(shù)據(jù)后,由硬件置位,其它方式下,在發(fā)送或停止位之前由硬件置位,因此,TI=1表示幀發(fā)送結(jié)束,TI可由軟件清“0”。
RI:接收中斷標(biāo)志位。
接收完第8位數(shù)據(jù)后,該位由硬件置位,在其他工作方式下,該位由硬件置位,RI=1表示幀接收完成。
(5)T2狀態(tài)控制寄存器T2CON
表6 T2定時器控制寄存器T2CON |
|||||||
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
TF2 |
EXF2 |
RCLK |
TCLK |
EXEN2 |
TR2 |
C/T2 |
CP/RL2 |
TF2:T2溢出中斷標(biāo)志。TF2必須由用戶程序清“0”。當(dāng)T2作為串口波特率發(fā)生器時,TF2不會被置“1”。
EXF2:定時器T2外部中斷標(biāo)志。EXEN2為1時,當(dāng)T2EX(P1.1)發(fā)生負(fù)跳變時置1中斷標(biāo)志DXF2,EXF2必須由用戶程序清“0”。
EXEN2:T2的外部中斷充許標(biāo)志