51单片机 (4)中断系统
【转载请注明出处:http://blog.csdn.net/leytton/article/details/21577883】
相关概念
- 中断源:引起中断的事件
- 中断请求:中断源向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
一共5种中断,优先级自上向下;[摘自百度知道link]
- 函数名()interrupt 0 {} //对应外部中断0;
- 函数名()interrupt 1 {} //对应定时器/计数器0中断;
- 函数名()interrupt 2 {} //对应外部中断1;
- 函数名()interrupt 3 {} //对应定时器/计数器1中断;
- 函数名()interrupt 4 {} //对应串口中断;