在CPU 与外设交换信息时,存在着一个快速的 CPU 与慢速的外设之间的矛盾。为解决这个问题,发展了中断的概念。
单片机在某一时刻只能处理一个任务,当多个任务同时要求单片机处理时,这一要求应该怎么实现呢?通过中断可以实现多个任务的资源共享。
中断现象在现实生活中也会经常遇到,例如,你在看书——手机响了——你在书上作个记号——你接通电话和对方聊天——谈话结束——从书上的记号处继续看书。这就是一个中断过程。通过中断,你一个人在一特定的时刻,同时完成了看书和打电话两件事情。用计算机语言来描述,所谓的中断就是,当 CPU 正在处理某项事务的时候,如果外界或者内部发生了紧急事件,要求 CPU 暂停正在处理工作而去处理这个紧急事件,待处理完后,再回到原来中断的地方,继续执行原来被中断的程序,这个过程称作中断。
从中断的定义我们可以看到中断应具备中断源、中断响应、中断返回这样三个要素。中断源发出中断请求,单片机对中断请求进行响应,当中断响应完成后应进行中断返回,返回被中断的地方继续执行原来被中断的程序。
MCS-51单片机的中断系统
MCS-51单片机的中断源
MCS-51单片机的中断源共有两类,它们分别是:外部中断和内部中断
1.
外部中断源
外部中断0(#INT0):来自P3.2引脚,采集到低电平或者下降沿时,产生中断请求。
外部中断1(#INT1):来自#P3.3引脚,采集到低电平或者下降沿时,产生中断请求。
2.
内部中断源
定时器∕计数器0(T0):定时功能时,计数脉冲来自片内;计数功能时,计数脉冲来自片外P3.4引脚。发生溢出时,产生中断请求。
定时器∕计数器1(T1):定时功能时,计数脉冲来自片内;计数功能时,计数脉冲来自片外P3.5引脚。发生溢出时,产生中断请求。
串行口:为完成串行数据传送而设置。单片机完成接受或发送一组数据时,产生中断请求。
中断控制的专用寄存器
MCS-51单片机为用户提供了四个专用寄存器,来控制单片机的中断系统。
1.
定时器控制寄存器(TCON)
该寄存器用于保存外部中断请求以及定时器的计数溢出。进行字节操作时,寄存器地址为88H。按位操作时,各位的地址为88H~8FH。寄存器的内容及位地址表示如下:
位地址 |
8FH |
8EH |
8DH |
8CH |
8BH |
8AH |
89H |
88H |
位符号 |
TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
IT0 和IT1——外部中断请求触发方式控制位
IT0 (IT1)=1
脉冲触发方式,下降沿有效
IT0 (IT1)=0
电平触发方式,低电平有效
IE0和IE1——外中断请求标志位
当CPU采样到#INT0(或#INT1)端出现有效中断请求时,IE0(IE1)位由硬件置“ 1”。当中断响应完成转向中断服务程序时,由硬件把IE (或IE )清零。
TR0 和TR1——定时器运行控制位
TR0 (TR1 )=0
定时器/计数器不工作
TR0 (TR1 )=1
定时器/计数器开始工作
TF0和TF1——计数溢出标志位
当计数器产生计数溢出时,相应的溢出标志位由硬件置“1”。当转向中断服务时,再由硬件自动清“0”。计数溢出标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。
2.
串行口控制寄存器(SCON)
进行字节操作时,寄存器地址为98H。按位操作时,各位的地址为98H~9FH。寄存器的内容及位地址表示如下:
位地址 |
9FH |
9EH |
9DH |
9CH |
9BH |
9AH |
99H |
98H |
位符号 |
SM0 |
SM1 |
SM2 |
REN |
TB8 |
RB8 |
TI |
RI |
其中与中断有关的控制位共2位:
TI——串行口发送中断请求标志位
当发送完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”。
RI——串行口接收中断请求标志位
当接收完一帧串行数据后,由硬件置“1”;在转向中断服务程序后,用软件清“0”。串行中断请求由TI和RI的逻辑或得到。就是说,无论是发送标志还是接收标志,都会产生串行中断请求。
3.
中断允许控制寄存器(IE)
进行字节操作时,寄存器地址为0A8H。按位操作时,各位的地址为0A8H~0AFH。寄存器的内容及位地址表示如下:
位地址 |
0AFH |
0AEH |
0ADH |
0ACH |
0ABH |
0AAH |
0A9H |
0A8H |
位符号 |
EA |
/ |
/ |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
其中与中断有关的控制位共6位:
EA——中断允许总控制位
EA=0 中断总禁止,禁止所有中断
EA=1
中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位进行设置。
EX0和EX1——外部中断允许控制位
EX0(EX1)=0
禁止外部中断
EX0(EX1)=1
允许外部中断
ET0和ET1——定时器/计数器中断允许控制位
ET0(ET1)=0
禁止定时器/计数器中断
ET0(ET1)=0
允许定时器/计数器中断
ES——串行中断允许控制位
ES=0
禁止串行中断
ES=1
允许串行中断
可见,MCS-51单片机通过中断允许控制寄存器对中断的允许(开放)实行两级控制。即以EA位作为总控制位,以各中断源的中断允许位作为分控制位。当总控制位为禁止时,关闭整个中断系统,不管分控制为状态如何,整个中断系统为禁止状态;当总控制位为允许时,开放中断系统,这时才能由各分控制位设置各自中断的允许与禁止。
MCS-51单片机复位后(IE)=00H,因此中断系统处于禁止状态。单片机在中断响应后不会自动关闭中断。因此在转中断服务程序后,应根据需要使用有关指令禁止中断,即以软件方式关闭中断。
4.
中断优先级控制寄存器(IP)
MCS-51单片机的中断优先级控制比较简单,因为系统只定义了高、低2个优先级。高优先级用“1”表示,低优先级用“0”表示。各中断源的优先级由中断优先级寄存器(IP)进行设定。IP寄存器地址0B8H,位地址为0BFH~0B8H。寄存器的内容及位地址表示如下:
位地址 |
0BFH |
0BEH |
0BDH |
0BCH |
0BBH |
0BAH |
0B9H |
0B8H |
位符号 |
/ |
/ |
/ |
PS |
PT1 |
PX1 |
PT0 |
PX0 |
其中:
PX0——外部中断0优先级设定位;
PT0——定时中断0优先级设定位;
PX1——外部中断1优先级设定位;
PT1——定时中断1优先级设定位;
PS——串行中断优先级设定位。
以上各位设置为“0”时,则相应的中断源为低优先级;设置为“1”时,则相应的中断源为高优先级。
优先级的控制原则是:
低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。
如果一个中断请求已被响应,则同级的其它中断服务将被禁止。即同级不能嵌套。
如果同级的多个中断同时出现,则按CPU查询次序确定哪个中断请求被响应。其查询次序为:外部中断0→定时中断→外部中断→定时中断→串行中断。
中断优先级控制,除了中断优先级控制寄存器之外,还有两个不可寻址的优先级状态触发器。其中一个用于指示某一高优先级中断正在进行服务,从而屏蔽其它高优先级中断;另一个用于指示某一低优先级中断正在进行服务,从而屏蔽其它低优先级中断,但不能屏蔽高优先级的中断。此外,对于同级的多个中断请求查询的次序安排,也是通过专门的内部逻辑实现的。