文章目录
引言
中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力,它也是单片机最重要的功能之一。中断是指单片机在执行主程序时,遇到某些特定事件(如外部信号、定时器溢出等)时,暂时中止主程序,转而执行中断服务程序,处理完后再返回主程序继续执行。
中断流程图
中断优先级
在同一时刻,当有多个中断源出现,会根据中断源的优先级来判断先执行哪一个,其中TCON寄存器中的IT0位控制的是触发方式,是低电平触发还是下降沿触发,当为0时,是低电平触发,当为1时是下降沿触发
下降沿
在数字电路和信号处理中,上升沿触发和下降沿触发是指在时序逻辑中触发触发器或触发器器件(比如时钟触发器)的两种常见方式。
在数字电路中,想象一下时钟信号就像是一根线,它在高电平和低电平之间变化。这个变化的过程就像是上升和下降。当信号从低电平到高电平变化时,我们称之为上升沿;当信号从高电平到低电平变化时,我们称之为下降沿。上升沿触发和下降沿触发描述了在这些变化发生时触发电路动作或逻辑操作的方式。
- 上升沿触发就像是当时钟信号从低电平到高电平变化时,我们说"现在触发",进行某种操作或者执行一些任务。
- 下降沿触发则是当时钟信号从高电平到低电平变化时,我们执行相应的任务或操作。
这些触发方式在数字电路设计中用于指导设备或芯片在特定时刻进行操作。在某些情况下,我们可能需要在信号变为高电平时执行某些操作;而在其他情况下,可能需要在信号变为低电平时执行相应的操作。这取决于特定设计的要求和需要。
中断结构图
STC89系列51单片机提供了8个中断请求源,分别是一个外部中断0(INT0),外部中断1(INT1),外部中断2(INT2),外部中断3(INT3)以及定时器0(TF0)、定时器1(TF1)和定时器2(TF2),外加串口中断,用于发送接收(UART)
注意:外部中断0(INT0),外部中断1(INT1),定时器0(TF0)、定时器1(TF1),串口中断,用于发送接收(UART)这五个中断是51单片机共有的中断源。
中断相关寄存器
上表中列出了与STC89C51RC/RD+系列单片机中断相关的所有寄存器。
IE中断允许寄存器(可位寻址)
中断允许控制是指通过设置中断允许位(Interrupt Enable Bits)来决定是否开启对特定中断源的响应。在单片机中,通常会有一个或多个寄存器用于控制不同中断源的允许状态。例如,在8051单片机中,有一个名为IE(Interrupt Enable)的寄存器,用于控制各种中断的允许状态。
- IE寄存器中的位:IE寄存器中的每一位对应一种中断源。如果某一位被设置为1,则表示允许该中断源的中断;如果被设置为0,则表示禁止该中断源的中断。
- 中断优先级:在某些单片机中,IE寄存器还可以设置中断优先级,确保高优先级的中断能够得到及时响应。
- EA:CPU的总中断允许控制位,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。EA的作用是使中断允许形成两级控制。即各中断源首先收EA控制,其次还受各中断源自己的中断允许控制位控制。
- ET2: 定时/计数器T2的溢出中断允许位。ET2=1,允许T2中断;ET2=0,禁止T2中断。
- ES:串行口1中断允许位。ES=1,允许串行口1中断;ES=0,禁止串行口1中断。
- ET1:定时/计数器T1的溢出中断允许位、ET1=1,允许T1中断;ET1=0,禁止T1中断。
- EX1:外部中断1中断允许位。EX1=1,允许外部中断1中断;EX1=0,禁止外部中断1中断。
- ET0:T0的溢出中断允许位。ET0=1。允许T0中断;ET0=0禁止T0中断。
- EX0:外部中断0中断允许位。EX0=1,允许中断;EX0=0禁止中断
XICON辅助中断控制寄存器(可位寻址)
TCON标志控制寄存器
TCON寄存器是专门用于控制定时器和计数器的寄存器。在8051单片机中,TCON寄存器包含多个位,每个位控制不同的定时器或计数器功能,以及相关的中断请求标志。
- 定时器/计数器运行控制位:TCON寄存器中的某些位用于启动或停止定时器/计数器的运行。例如,TR0和TR1位用于控制定时器0和定时器1的运行。
- 中断请求标志:TCON寄存器中的TF0和TF1位分别用于指示定时器0和定时器1是否已经溢出,即是否需要产生中断请求。当中断请求发生时,这些位会被硬件自动设置为1。
- 重置中断请求标志:当中断服务例程处理完中断请求后,软件需要手动清除TF0和TF1位,以便定时器准备下一次的中断请求。
SCON串行口控制寄存器
中断号
在单片机(Microcontroller)中,中断号是用于标识不同中断源的唯一数字,它使得单片机能够区分并响应多个同时发生的中断请求。
中断响应条件
- 中断源有中断请求。
- 中断源的中断允许位为1,通过设置对应寄存器。
- CPU开启总中断(即EA=1)。
中断函数代码模板
中断函数通常使用关键字interrupt和中断号来声明,例如:
c
void External0_ISR(void) interrupt 0
{
// 中断处理代码
}
这表示当外部中断0发生时,将调用External0_ISR函数进行处理 。其他中断类似。
电路图
由图可以看出外部中断0和1分别是P3_2和P3_3引脚
开发板IO连接图
由图可知KEY3按键连接在P3_2上,P3_2是外部中断0
代码演示------外部中断0控制LED1
将外部中断0和1设置为下降沿的触发方式,当按键按下的时候,电平状态由高到低,就会触发中断,将对应按键连接到P3_2引脚,当对应按键按下的时候,对应的指示灯通过中断函数点亮。
c
#include <REGX52.H>
sbit LED1 = P2^0;
void DelayXms(unsigned int xms) //@12.000MHz
{
unsigned char data i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void External0_ISR(void) interrupt 0
{
// 中断处理代码
DelayXms(10);//消抖处理
if(P3_2 == 0)
{
LED1 = ~LED1;
IE0 = 0;
}
}
void Init_Port()
{
LED1 = 0;//默认熄灭
EA = 1;//打开总中断
EX0 = 1;//打开外部中断1
IT0 = 1;//设置为下降沿触发方式
}
void main()
{
Init_Port();
while(1)
{
}
}