1、中断过程
对于单片机来讲,中断是指CPU在处理某一时间A时,发生了另一事件B请求CPU立刻去处理(中断发生);CPU暂时停止当前的工作(中断响应),转而去处理事件B(中断服务),待CPU处理事件B完成后,再回到原来事件A被中断的地方继续处理事件A(中断返回)。
① 中断源 // 5个中断源都有一个中断入口地址,当某个中断源产生中断时,CPU响应中断便到相应的中断入口地址执行中断服务程序
外部中断请求源 | 内部中断请求源 |
INT0、INT1 | T0、T1、TI\RI |
② 中断的嵌套与优先级处理与起始地址
自然优先级关系:INT0>T0>INT1>T1>串口通信
③ 中断的响应过程
2、中断引脚与相关寄存器
(1)引脚P3.2和P3.3
对应关系: P32——按键S5 ; P33——按键S4
(2)控制寄存器
扫描二维码关注公众号,回复:
9165173 查看本文章
IE:中断允许寄存器
- EA:中断总控制位。EA=1,CPU开放所有中断;EA=0,CPU禁止所有中断。
- ES:串行口中断控制位。ES=1,允许串行口中断;ES=0,屏蔽串行口中断。
- ET1:定时/计数器TI中断控制位。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,允许外部中断0中断;EX0=0,禁止外部中断0断。
IP:中断优先级寄存器
在该寄存器中,优先级分为1 0两级,对应的位置为1则为高优先级,位置为0则为低优先级。执行时先将高优先级的中断执行完后才会执行低优先级(同样高优先级情况下,按默认优先级排)。
- PS:串行口中断优先级控制位
- PT1:定时器1优先级控制位
- PX1:外部中断1优先级控制位
- PT0:定时器0优先级控制位
- PX0:外部中断0优先级控制位
(3)中断请求标志寄存器
TCON寄存器
低4位给外部中断请求源使用,高4位给内部中断请求源定时器T0 T1使用
外部请求源:
- IT0:INT0触发方式控制位,可由软件进行置位和复位。IT0=0时,INT0为低电平触发方式。IT0=1时,INT0为负跳变触发方式。
- IE0:INT0中断请求标志位。当有外部的中断请求时,该位置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。
- IT1、IE1的用途和IT0、IE0相似。
内部请求源:
- TF0:定时/计数器T0溢出中断标记,当T0产生溢出时,TF0置位。当CPU响应中断后,硬件将TF0复位
- TR0:T0的开闭控制位,TR0=1时定时计数器打开,TR0=0时定时计数器关闭
- TF1、TR1与TF0、TR0相似。
SCON寄存器
内部请求源:
- TI、RI:串行口发送、接收中断
3、相关例子
例1:使用中断INT0控制一个LED灯;
#include<reg52.h>
sbit LED=P0^0;
void Init_interrupt();
void main(){
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF; //初始化
Init_interrupt();
while(1);
}
//中断初始化
void Init_interrupt(){
EX0=1; //定时/计数器T0中断控制位。ET0=1,允许T0中断;
IT0=1; //INT0触发方式控制位,可由软件进行置位和复位。IT0=1时,INT0为负跳变触发方式。
EA=1; //中断总控制位。EA=1,CPU开放所有中断;
}
//中断服务函数
void isr_interrupt0() interrupt 0 //外部中断优先级最高
{
P2=((P2&0X1F)|0X80);
LED=~LED;
P2=P2&0X1F;
}