MCS-51与中断有关的寄存器、中断入口地址及编号
扫描二维码
随时随地手机看文章
1、中断入口地址及编号
MCS-51在每一个机器周期顺序检查每一个中断源,在机器周期的S6按优先级处理所有被激活的中断请求,此时,如果CPU没有正在处理更高或相同优先级的中断,或者现在的机器周期不是所执行指令的最后一个机器周期,或者CPU不是正在执行RETI指令或访问IE和IP的指令(因为按MCS-51中断系统的特性规定,在执行完这些指令之后,还要在继续执行一条指令,才会响应中断),CPU在下一个机器周期响应激活了的最高级中断请求。
中断响应的主要内容就是由硬件自动生成一条长调用LCALL addr16指令,这里的addr16就是程序存储器中相应的中断区入口地址,这些中断源的服务程序入口地址如下:
表1 5个中断源的服务程序入口地址 |
||||||||||
中断源 |
入口地址 |
中断号 |
|
|
|
|
|
|
|
|
外中断0 |
0003H |
0 |
|
|
|
|
|
|
|
|
定时/计数器0 |
000BH |
1 |
|
|
|
|
|
|
|
|
外中断1 |
0013H |
2 |
|
|
|
|
|
|
|
|
定时/计数器1 |
001BH |
3 |
|
|
|
|
|
|
|
|
串行口中断 |
0023H |
4 |
|
|
|
|
|
|
|
|
定时/计数器T2 |
002BH |
5 |
|
|
|
|
|
|
|
|
|
生成LCALL指令后,CPU紧跟着便执行之.首先将PC(程序计数器)的内容压入堆栈保护断点,然后把中断入口地址赋予PC,CPU便按新的PC地址(即中断服务程序入口地址)执行程序。
值得一提的是,各中断区只有8个单元,一般情况下(除非中断程序非常简单),都不可能安装下一个完整的中断服务程序。因此,通常是在这些入口地址区放置一条无条件转移指令,使程序按转移的实际地址去执行真正的中断服务程序。
对于汇编,中断函数的一般形式为:
1. ORG 中断入口地址
2.
3. AJMP 中断服务程序地址
4.
5. 中断服务程序地址:
6.
7. ......
对于C语言,中断函数的一般形式为:
1. void FunctionName(void) interrupt 中断号 //其中“中断号”可查表1
2.
3. {
4.
5. .........
6.
7. }
2、与中断有关的寄存器
(1) 定时器控制寄存器TCON
表2 TCON寄存器结构 |
||||||||
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
|
|
IE1:外部边沿触发中断1请求标志,其功能和操作类似于TF0。
IT1:外部中断1类型控制位,通过软件设置或清除,用于控制外中断的触发信号类型。IT1=1,边沿触发。IT=0是电平触发。
IE0:外部边沿触发中断0请求标志,其功能和操作类似于IE1。
IT0:外部中断0类型控制位,通过软件设置或清除,用于控制外中断的触发信号类型。其功能和操作类似于IE1。
(2) 中断允许寄存器IE
|
表3 IE寄存器结构 |
||||||||
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:定时/计数器T1中断控制位。ET1=1,允许T1中断,ET1=0,禁止T1中断。
EX1:外中断1中断控制位,EX1=1,允许外中断1中断,EX1=0,禁止外中断1中断。
ET0:定时/计数器T0中断控制位。ET1=1,允许T0中断,ET1=0,禁止T0中断。
EX0:外中断0中断控制位,EX1=1,允许外中断0中断,EX1=0,禁止外中断0中断。
(3) 中断优选级控制寄存器IP
|
表4 IP中断优先级控制寄存器结构 |
||||||||
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
- |
- |
- |
PS |
PT1 |
Px1 |
PT0 |
PX0 |
|
|
PS:串行口中断口优先级控制位,PS=1,串行口中断声明为高优先级中断,PS=0,串行口定义为低优先级中断。
PT1:定时器1优先级控制位。PT1=1,声明定时器1为高优先级中断,PT1=0定义定时器1为低优先级中断。
PX1:外中断1优先级控制位。PT1=1,声明外中断1为高优先级中断,PX1=0定义外中断1为低优先级中断。
PT0:定时器0优先级控制位。PT1=1,声明定时器0为高优先级中断,PT1=0定义定时器0为低优先级中断。
PX0:外中断0优先级控制位。PT1=1,声明外中断0为高优先级中断,PX1=0定义外中断0为低优先级中断。
(4)串行通信控制寄存器SCON
它是一个可寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下:
|
表5串行通信控制寄存器SCON |
||||||||
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
|
SM0 |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
TI |
RI |
|
TI:发送中断标志位。
方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。
RI:接收中断标志位。
接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。
(5)T2状态控制寄存器T2CON
表6 T2定时器控制寄存器T2CON |
|||||||
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
TF2 |
EXF2 |
RCLK |
TCLK |
EXEN2 |
TR2 |
C/T2 |
CP/RL2 |
TF2:T2溢出中断标志。TF2必须由用户程序清“0”。当T2作为串口波特率发生器时,TF2不会被置“1”。
EXF2:定时器T2外部中断标志。EXEN2为1时,当T2EX(P1.1)发生负跳变时置1中断标志DXF2,EXF2必须由用户程序清“0”。
EXEN2:T2的外部中断充许标志