首先介绍单片机中断技术的优点:它解决了快速主机和慢速I/O设备之间的数据传输问题; 分时操作。 CPU可以分时的方式为多个I/O设备服务,提高计算机的利用率和实时响应。 CPU能够及时处理应用系统的随机事件,大大增强了系统的实时性,可靠性高。 CPU具有处理设备故障、断电等突发事件的能力,从而提高系统的可靠性。 中断的相关概念: 中断发生:当CPU正在处理一个事件A时,另一个事件B发生,请求CPU快速处理; 中断响应:CPU暂时中断当前工作; 中断服务:CPU转入处理事件B; 中断返回:CPU处理完事件B后,会返回事件A被中断的地方继续处理事件A;
流程图如下:
中断系统的相关概念: CPU中断的来源称为中断源。 中断源向CPU发出中断请求。 CPU暂时中断原来的事务A,转而处理事件B。事件B处理完后,返回到原来中断的地方(即断点)称为中断返回。 实现上述中断功能的组件称为中断系统。
下图为中断系统结构图:
涉及中断的其他概念-优先级:
51单片机的中断优先级有3个原则:
当CPU同时收到多个中断时,首先响应优先级最高的中断请求。 正在进行的中断进程不能被同级别或较低优先级的新中断请求打断。 正在进行的低优先级中断服务可以被高优先级中断请求中断。
为了实现上面提到的最后两个原理,中断系统配备了两个用户无法寻址的优先级状态触发器。 其中之一设置为1,表示正在响应高优先级中断,这会阻塞所有后续的中断请求; 另一个设置为1,表示正在响应低优先级中断,并且会阻塞所有后续的低优先级中断请求。
涉及中断的其他概念——中断嵌套:
如果单片机正在处理一个中断程序,又发生另一个中断(新的中断具有更高的优先级),单片机将停止当前的中断程序,转而执行新的中断程序。 新的中断程序处理完成后,返回到刚刚停止的中断程序继续执行。 执行完该中断后,返回主程序继续执行主程序。
流程图如下:
51单片机中断系统结构
对于上图,从左到右:
中断源:
中断请求标志(TCON中断标志):
IT0(TCON.0),外部中断0触发方式控制位。
IE0(TCON.1),外部中断0中断请求标志。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志。
TR0(TCON.4):T0操作控制位。 当TR0设置为1时,T0开始工作; 当TR0设置为0时,T0停止工作。 TR0 由软件置位或清零。 因此,可以用软件来控制定时器/计数器的启动和停止。
TF0(TCON.5),定时器/计数器T0溢出中断请求标志。
TR1(TCON.6):T1操作控制位,其功能与TR0类似。
TF1(TCON.7),定时器/计数器T1溢出中断请求标志。
中断使能控制(IE):
CPU对中断系统中所有中断以及某个中断源的开启和阻止都是由中断使能寄存器IE来控制的。
EX0(IE.0),外部中断0使能位;
ET0(IE.1),定时器/计数器T0中断使能位;
EX1(IE.2),外部中断1使能位;
ET1(IE.3),定时器/计数器T1中断使能位;
ES(IE.4),串口中断使能位;
EA(IE.7),CPU中断使能(始终使能)位。
优先注册IP:
当同一优先级有多个中断申请时,就会出现中断优先级排队问题。 相同优先级的中断优先级队列由中断系统硬件决定的自然优先级组成,其排列如下:
硬件查询:
这两个寄存器就是上面“涉及中断的其他概念——优先级”中提到的寄存器。
中断响应条件:
综上所述,当且仅当满足以下三点时,CPU才有可能响应中断。
中断源有中断请求; 该中断源的中断使能位为1; CPU打开中断(即EA=1)。 如何使用中断? 您想使用哪个中断? 选择对应的中断号; 你想要的触发条件是什么? 中断之后你希望做什么?
以外部中断0为例:
主程序中需要如下代码:
中断服务函数:
void 函数名() interrupt 中断号
{
do anything that you want
}