*外部中断INT0,INT1
*定时器/计数器0.1:溢出中断
*串行口中断
2)外部中断:每个机器周期的S5P2检测INT0或INT1上的信号
3)为保证检测可靠,低(或高)的宽度至少要保持一个机器周期。
(2) TCON寄存器
TF1TF0
IE1
IT1
IE0
IT0
D7D6D5 D4 D3 D2 D1 D0
IT=0:电平触发方式,适用于外部中断输入(低电平输入)
IT=1:边沿触发方式
(3) SCON寄存器
D7D6D5 D4 D3 D2 D1 D0
TI
RI
1.中断控制
2.
3.
(1) 中断允许控制:
D7D0
EA-
ET2
ES
ET1
EX
ET0
EX0
(2) 中断优先级控制
D7 D4D0
-
-
PT2
PS
PT1
PX1
PT0
PX0
(1)中断优先级遵循的原则:
*低优先中断可被高优先级中断所中断
*某个中断一旦得到响应,与它同级的中断请求不能再中断它。
(2)同级中断的优先级:外部中断0(最高)、T/C0、外部中断1、T/C1、串口(最低)。
例如, 某软件中对寄存器IE、 IP设置如下:
MOVIE, # 8FHMOVIP, # 06H则此时该系统中: u CPU中断允许
u 允许外部中断0、 外部中断1、 定时器/计数器0、 定时器/计数器1提出的中断申请
u 允许中断源的中断优先次序为:
u 定时器/计数器0>外部中断 1>外部中断 0>定时器/计数器 1。
3.中断响应
1.
(1)CPU响应中断的条件
1)一条指令执行完成
2)刚执行的不是RETI或访问IE、IP指令,若是则要再执行一条才能响应
3)新的中断优先级要高于当前的正在执行的程序的优先级
(2)中断源的中断服务程序入口地址
外部中断0
T/C0
外部中断1
T/C1
串口
0003H
000BH
0013H
001BH
0023H
例如, 现有外部中断 1 提出申请, 且主程序中有R0、 R1、 DPTR、累加器A需保护, 则编制程序应为:
ORG0000H
AJMPMAINORG0013HLJMPINT1……ORG0100H MAIN: ……;主程序 ……ORG1000HINT1: PUSHACC 中断服务程序
PUSHDPH
PUSHDPL
PUSH0
PUSH1
POP1
POP0
POPDPL
POPDPH
POPACC
RETI
(3)中断处理过程
1) 在每条指令结束后, 系统都自动检测中断请求信号, 如果有中断请求,且CPU处于开中断状态下, 则响应中断。 2) 保护现场, 在保护现场前, 一般要关中断, 以防止现场被破坏。保护现场一般是用堆栈指令将原程序中用到的寄存器推入堆栈。 3) 中断服务, 即为相应的中断源服务。 4) 恢复现场, 用堆栈指令将保护在堆栈中的数据弹出来, 在恢复现场前要关中断, 以防止现场被破坏。在恢复现场后应及时开中断。 5)中断返回, 此时CPU将推入到堆栈的断点地址弹回到程序计数器, 从而使CPU继续执行刚才被中断的程序。
(4)CPU响应中断的过程
单片机一旦响应中断请求, 就由硬件完成以下功能: 1) 根据响应的中断源的中断优先级, 使相应的优先级状态触发器置12) 执行硬件中断服务子程序调用, 并把当前程序计数器PC的内容压入堆栈 3) 清除相应的中断请求标志位(串行口中断请求标志RI和TI除外)4) 把被响应的中断源所对应的中断服务程序的入口地址(中断矢量)送入PC, 从而转入相应的中断服务程序。4)