文章目录
- 第六章 单片机的中断系统
- 6.1 中断系统简介
- 6.2 中断系统的控制
- 1. 定时器/计数器控制寄存器TCON
- 2. 中断允许寄存器IE
- 3. 中断优先级寄存器IP
- 6.3 中断系统的编程
- 1. 中断函数
- 2. 编程的具体流程
第六章 单片机的中断系统
6.1 中断系统简介
当cpu在执行某一程序过程中,在突发事件的请求下,cpu中断当前正在执行的程序,自动转去执行为处理该事件而预先编写的程序服务;当服务程序执行完后,cpu继续执行原来的程序。这一过程称为中断。
8051单片机提供5个中断源,包括两个外部中断源 I N T 0 ‾ \overline{INT0} INT0 和 I N T 1 ‾ \overline{INT1} INT1 ,两个定时器/计数器中断源T0和T1,以及一个串口中断源。
中断的自然优先级:
中断函数编号 | 中断名称 | 中断标志位 | 中断使能位 | 中断向量地址 | 默认优先级 |
---|---|---|---|---|---|
0 | 外部中断0 | IE0 | EX0 | 03H | 1(最高) |
1 | 定时器T0中断 | TF0 | ET0 | 0BH | 2 |
2 | 外部中断1 | IE1 | EX1 | 13H | 3 |
3 | 定时器T1中断 | TF1 | ET1 | 1BH | 4 |
4 | UART中断(串口) | T1/R1 | ES | 23H | 5 |
6.2 中断系统的控制
1. 定时器/计数器控制寄存器TCON
字节地址为88H,可以位寻址。
位序号 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H |
-
TF1
: 定时器1溢出标志位,当定时器1计满溢出时,由硬件将TF1
置1,并申请中断;进入中断服务程序后,由硬件自动清零。 -
TR1
: 定时器1运行控制位:TR
=1表示启动定时器,需要配合GATE
和INT1
。- 当
GATE
=1,且INT1
为高电平时,TR1
置1启动定时器。 - 当
GATE
=0时,TR1
置1启动定时器1。
- 当
-
TF0
: 定时器0溢出标志位,功能和用法同TF1
. -
TR0
: 定时器0运行控制位,功能和用法同TR1
. -
IE1
: 外部中断1请求标志位.-
IT1
=0时,为电平触发方式,每个机器周期的S5P2采样INT1引脚,若INT1
脚为高电平,则置1;否则IE1
清0. -
IT1
=0时,为跳变沿触发方式,当第一个机器周期采样到INT1
为低电平时,将IE1
置1,表示外部中断1正在向CPU请求中断.当CPU响应,转向中断服务程序时,IE1
由硬件清零.
-
-
IT1
: 外部中断1触发方式选择位.-
IT1
=0时,为电平触发方式,引脚INT1
上的低电平有效. -
IT1
=1时,为跳变沿触发方式,引脚INT1
上的电平从高到低的负跳变有效.
-
-
IE0
: 外部中断0请求标志位,功能和用法同IE1
. -
IT0
: 外部中断0触发方式选择位,功能和用法同IT1
.
2. 中断允许寄存器IE
按位寻址,地址:A8H。
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
---|---|---|---|---|---|---|---|
EA | - | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
-
EA
(IE.7): EA=0时,所有中断禁止(即不产生中断)
EA=1时,各中断的产生由个别的允许位决定 -
-(IE.6) :保留
-
ET2
(IE.5):定时2溢出中断充许(8052用) -
ES
(IE.4):串行口中断充许(ES=1充许,ES=0禁止) -
ET1
(IE.3):定时1中断充许 -
EX1
(IE.2):外中断INT1中断充许 -
ET0
(IE.1):定时器0中断充许 -
EX0
(IE.0):外部中断INT0的中断允许
3. 中断优先级寄存器IP
中断控制位 | ||||||||
---|---|---|---|---|---|---|---|---|
位序 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
位序号 | - | - | - | PS | PT1 | PX1 | PT0 | PX0 |
高电平为高优先级。
PS
:串行口中断优先
PS=1,设置串行口中断为高优先级。
PS=0,设置串行口中断为低优先级。
PT1
:定时器/计数器1中断优先
PX1
:外中断INT1中断优先
PT0
:定时器0中断优先
PX0
:外部中断INT0的中断优先
6.3 中断系统的编程
1. 中断函数
定义如下:
void 函数名(void) interrupt n using m
{
中断函数内容
}
修饰符interrupt表示该中断服务程序所对应的中断源的中断号
修饰符using m用于指定本函数内部使用的寄存器工作组,该修饰符可省略,让编译器分配。
注意:
-
中断函数不带任何参数。
-
中断函数没有返回值。
-
中断函数必须由中断源触发而自动调用,不得直接调用,因此也不用提前声明。
-
中断函数要精简,避免因执行时间过长影响其他中断的响应。
2. 编程的具体流程
(1) 外部中断,例如INT1
-
设置IT1选择触发方式。
-
开启总中断允许EA = 1。
-
开启外部中断1允许EX1 = 1。
(2) 定时器/计数器中断, 例定时器T0
-
确定计数初值, TH0, TH1初始化
-
确定定时器工作方式, TMOD初始化
-
开放定时器,EA=1,ET0=1
-
启动T0工作,TR0=1
-
若不是工作方式2,则每次中断必须重新装载计数初值。