相关概念
中断源:引起中断的事件
中断请求:中断源向CPU提出处理的请求
断点:发生中断时被打断程序的暂停点
中断响应:CPU暂停现行程序而转为响应中断请求的过程
中断处理程序:处理中断源的程序
中断处理:CPU执行有关的中断处理程序
中断返回:返回断点的过程
中断与子程序的区别
调用有点相似、但两者是不同的概念。
源不同。中断是由外部中断源产生的、具有不可预测和随机性、比如抛异常。子程序是由主程序安排调用的。
响应不同。中断系统需要保护断点和现场、子程序只需保存断点。
功能不同。中断程序主要处理CPU外部异步事件、子程序调用是为主程序服务。
中断类型
外部中断源:外部硬件资源产生。上下沿触发和高低电平触发。
定时中断源:定时器/计数器溢出触发。
串口中断源:串行通信时发送或接收完毕信息触发。
TCON中断标志
IE1:外部中断1请求标志位。
IT1:外部中断1触发方式选择位。当IT1=0,为低电平触发方式;当IT1=1,为下降沿触发方式。
IE0:外部中断0请求标志位。
IT0:外部中断0触发方式选择位。 当IT0=0,为低电平触发方式;当IT0=1,为下降沿触发方式。
SCON中断标志
RI:串行接口时接收信息完毕后、硬件自动置RI=1、CPU响应中断。注意不会自动清零置RI=0、需软件置RI=0
TI:串行接口发送信息完毕后、硬件自动置TI=1、CPU响应中断。注意不会自动清零置TI=0、需软件置TI=0
中断初始化的一般步骤
1、确定工作方式(即对TMOD赋值);
2、预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);
3、根据需要开放定时器/计数器的中断(直接对IE位赋值);
4、启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚加启动电平。当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。
中断允许标志位
EX1:外部中断1允许位;
EX0:外部中断0允许位;
ET1:定时/计数器T1中断允许位;
ET0:定时/计数器T0中断允许位;
ES:串行口中断允许位;
EA: CPU中断允许(总允许)位。
中断优先级标志
0为低优先级、1为高优先级
PS:串行接口中断优先级设置位
PT1:定时器/计数器中断1中断优先级设置位
PT0:定时器/计数器中断0中断优先级设置位
PX1:外部中断1中断优先级设置位
PX0:外部中断0中断优先级设置位
51单片机中断号
外部中断0(INT0),对应中断号是0, 中断入口地址0003H
定时/计数器0(T1),对应中断号1 ,中断入口地址000BH
外部中断1(INT1),中断号2 入口地址0013H
定时/计数器1(T1)中断号3 入口地址001BH
串行口(RI/TI)中断号4 入口地址0023H
这五个是AT89S51的,52还多了下面这个
定时/计数器2(T2)中断号5,入口地址002BH
函数名()interrupt 0 {} //对应外部中断0;
函数名()interrupt 1 {} //对应定时器/计数器0中断;
函数名()interrupt 2 {} //对应外部中断1;
函数名()interrupt 3 {} //对应定时器/计数器1中断;
函数名()interrupt 4 {} //对应串口中断;
一共5种中断,优先级自上向下;