中断/Interrupt
什么是中断?
中断是一种特殊的触发信号,它可以让单片机暂停现在正在执行的普通程序。根据系统设置,单片机在中断信号发生后,会执行一个特殊的被称作“中断服务子程序”的应用程序,待中断服务子程序执行完毕后,系统继续执行普通程序。
中断源
单片机有五个中断源
中断源名称 | 默认优先级 | 中断号 |
---|---|---|
外部中断请求0(INT0) | 最高 | 0 |
定时器/计数器0(T0) | · | 1 |
外部中断请求1(INT1) | · | 2 |
定时器/计数器1(T1) | · | 3 |
串口中断 | 最低 | 4 |
INT0、INT1为外部中断,T0、T1以及串口为内部中断。
中断源涉及到的特殊功能寄存器
寄存器名称 | 主要功能 |
---|---|
TCON | Timer的启停标志,外中断的触发方式控制,Timer和外中断的中断触发标志 |
SCON | 串行通信控制寄存器,里面有涉及串行通信的中断标志位 |
IE | 中断允许控制寄存器,可以控制是否启用某个中断源,或一次性控制所有中断源(EA位) |
IP | 中断优先级控制寄存器,更改这个寄存器可以修改中断源之间默认的优先级 |
均可按位寻址
定时器控制寄存器/TCON
位名称 | 功能 |
---|---|
IT0 | INT0的中断触发方式 |
IE0 | INT0的中断标志 |
IT1 | INT1的中断触发方式 |
IE1 | INT1的中断标志 |
TR0 | T0的启停标志 |
TF0 | T0的中断标志 |
TR1 | T1的启停标志 |
TF0 | T1的中断标志 |
ITx:外部中断的触发方式。分为低电平触发和下降沿(负跳变)触发,当ITx为1时即为中断触发方式为下降沿触发,为0时为低电平触发。
下降沿与低电平的相关知识请查阅数电,此处不再赘述
IEx、TFx:外部中断、定时器的中断标志,当其向CPU申请中断时,对应的中断标志会置1,若有中断服务子程序,就会在中断触发时进入子程序,并且中断标志会自动硬件置0。
TRx:定时器/计数器启动的标志,置1即启动定时器/计数器。
串行口控制寄存器/SCON
SCON中最低两位TI、RI为串行口的中断标志,在串行口发送/接收数据完毕时,就会向CPU申请中断,对应的TI/RI位也会自动置1,但是需要注意的时,不同于ITx、TFx,TI、RI在进入中断服务子程序后不会硬件置0,需要软件手动置0。
中断允许寄存器/IE
IE | EA | 无效位 | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
---|---|---|---|---|---|---|---|---|
总控制 | 52子系列,不用管 | 串行口 | T1 | INT1 | T0 | INT0 |
EA:总开关,必须当EA=1时,其他的中断允许位才有效
其他为也都为高电平有效,当需要某一个功能在中断时能够进入中断服务子程序,就需要把对应的IE位置1。
对于记忆方法(同时适用于IP):
位的顺序为:从低到高分别是外内外内串,序号依次升高
外部中断为X,定时器为T(timer),串行口为S(serial)
中断优先级寄存器/IP
PS | PT1 | PX1 | PT0 | PX0 |
---|---|---|---|---|
串行口 | T1 | INT1 | T0 | INT0 |
当某一位为1时,对应的中断优先级为高。
当优先级处于同级时,同时申请中断的优先级按照本节开头的表格中默认优先级来决定。(外内外内串
)。
当一个中断进行的时候,若再触发一个中断:
新的中断优先级高:打断正在进行的中断,等新中断执行完毕再回到原中断继续执行;
新的中断优先级一样:不会打断正在进行的中断,等正在进行的中断执行完毕再执行新中断。
编写中断服务子程序
中断服务子程序的编写遵循以下规则
void 函数名() interrupt 中断号 { //程序主体 }
void
:子程序没有返回值,即全部子程序均为void。但是需要注意的是,在汇编中,所有中断子程序均有一条RETI
返回指令。
第七、八、九章客观题中有一道题:
在中断服务程序中,至少应有一条:A. 传送指令; B. 转移指令; C. 加法指令; D. 中断返回指令。
由此可知本题答案为D。
interrupt 中断号
:这里的interrupt
关键字是中断子程序必须加的,且应在函数名的小括号后面,中断号即为本节开头表格中的中断号(从0到1:外内外内串
)。
除了必要的中断服务子程序,还需要在主程序中进行中断点的初始化
中断的初始化
中断的初始化即在主程序中对各中断的特殊功能寄存器进行设置,例如中断的允许(IE),是否需要设置中断的优先级(IP),外部中断的触发方式(ITx)等等。
下面是单片机中断实验中第三个程序中的初始化例子
1 |
|
应用举例
本例为单片机中断实验中第一个程序
1 |
|
中断的撤销
在进入中断服务程序后,中断请求标志由硬件自动复位;
若外部中断为电平触发方式时,中断请求标志需要软件清”0”,且需要设计中断请求信号撤销电路,即需外部电路来进行撤销,因此一般不使用低电平触发。
第七、八、九章客观题中有一道题:
在AT89S51的中断请求源中,需要外加电路实现中断撤销的是。A. 电平方式的外部中断请求;B. 跳沿方式的外部中断请求;C. 外部串行中断;D. 定时中断。
由此可知,答案为A. 电平方式的外部中断请求。
中断/Interrupt