单片机(AT89C51)中断系统详解和中断系统应用实验
单片机中断系统什么叫做单片机的中断?CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序, 叫做中断。为什么要设置中断?⑴ 提高CPU工作效率⑵ 具有实时处理功能⑶ 具有故障处理功能⑷ 实现分时操作中断源中断源是指能发出中断请求,引起中断的装置或事件。 80C51单片机的...
单片机(AT89C51)中断系统详解和中断系统应用实验
什么叫做单片机的中断?
CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序, 叫做中断。
为什么要设置中断?
⑴ 提高CPU工作效率
⑵ 具有实时处理功能
⑶ 具有故障处理功能
⑷ 实现分时操作
中断源
中断源是指能发出中断请求,引起中断的装置或事件。 80C51单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源:
⑴ INT0:外部中断0,中断请求信号由P3.2输入。
⑵ INT1:外部中断1,中断请求信号由P3.3输入。
⑶ T0:定时/计数器0溢出中断,对外部脉冲计数由P3.4输入。
⑷ T1:定时/计数器1溢出中断,对外部脉冲计数由P3.5输入。
⑸ 串行中断:包括串行接收中断RI和串行发送中断TI(P3.0/P3.1)
MCS-51单片机的中断系统结构示意图
中断控制寄存器(三个方面四个功能寄存器)
- 中断请求:定时和外中断控制寄存器(TCON)& 串行控制寄存器(SCON)
- 中断允许控制寄存器(IE)
- 中断优先级控制寄存器(IP)
TCON
TCON中存放了 INT0、INT1、T0、T1 的中断请求标志,TCON是一个可位寻址的寄存器,高4位用于定时器控制,低4位用于外中断控制。各位功能如下:
位名称 | TF1 | — | TF0 | — | IE1 | IT1 | IE0 | IT0 |
---|---|---|---|---|---|---|---|---|
功能 | T1 中断 标志 | — | T0 中断 标志 | — | INT1 中断 标志 | INT1 触发 方式 | INT0 中断 标志 | INT0 触发 方式 |
各位上的主要功能:
① TF1 —— T1溢出中断请求标志
T1计数溢出后,TF1=1
② TF0 —— T0溢出中断请求标志
T0计数溢出后,TF0=1
③ IE1 —— 外中断中断请求标志
当P3.3引脚信号有效时,IE1=1
④ IE0 —— 外中断中断请求标志
当P3.2引脚信号有效时,IE0=1
⑤ IT1 —— 外中断触发方式控制位
IT1=1,边沿触发方式;
IT1=0,电平触发方式。
⑥ IT0 —— 外中断触发方式控制位
IT1=1,边沿触发方式;
IT1=0,电平触发方式。
SCON
SCON为可位寻址寄存器,直接地址为98H
位名称 | — | — | — | — | — | — | TI | RI |
---|---|---|---|---|---|---|---|---|
功能 | — | — | — | — | — | — | 串行发送 中断标志 | 串行接收 中断标志 |
各位上的主要功能:
① TI —— 串行口发送中断请求标志
1—发完,0—未发完
② RI —— 串行口接收中断请求标志
当接收数据完毕时,RI=1,表示接收完一帧数据,请求中断,也可供查询, TI和 RI只能由程序清零。
IE
80C51对中断源的开放或关闭由中断允许控制寄存器IE控制。
位名称 | EA | — | — | ES | ET1 | EX1 | ET0 | EX0 |
---|---|---|---|---|---|---|---|---|
中断源 | CPU | — | — | 串行口 | T1 | INT1 | T0
| INT0
|
各位上的主要功能:
① EA —— CPU中断允许控制位
EA=1,CPU开中;
EA=0,CPU关中,且屏蔽所有5个中断源。
② EX0 —— 外中断INT0中断允许控制位
EX0=1,INT0开中;EX0=0,INT0关中。
③ EX1 —— 外中断INT1中断允许控制位
EX1=1,INT1开中;EX1=0,INT1关中。
④ ET0 —— 定时/计数器T0中断允许控制位
ET0=1,T0开中;ET0=0,T0关中。
⑤ ET1 —— 定时/计数器T1中断允许控制位
ET1=1,T1开中;ET1=0,T1关中。
⑥ ES —— 串行口中断(包括串发、串收)允许控制位
ES=1,串行口开中;ES=0,串行口关中。
注:80C51对中断实行两级控制,总控制位是EA,每一中断源还有各自的控制位。首先要EA=1,其次还要自身的控制位置“1”
IP
80C51有5个中断源,划分为2个中断优先级:高优先级和低优先级。
位名称 | — | — | — | PS | PT1 | PX1 | PT0 | PX0 |
---|---|---|---|---|---|---|---|---|
中断源 | — | — | — | 串行口 | T1 | INT1 | T0
| INT0
|
① PX0 :INT0中断优先级控制位。PX0=1,为高优先级;
PX0=0,为低优先级;
② PX1 :INT1中断优先级控制位。控制方法同上。
③ PT0 :T0中断优先级控制位。控制方法同上。
④ PT1 :T1中断优先级控制位。控制方法同上。
⑤ PS :串行口中断优先级控制位。控制方法同上。
注:同级中的优先顺序为(从高到低) INT0、INT1、T0、T1、串行口
中断处理过程
主要分为四步:中断请求、中断响应、中断服务、中断返回
80C51五个中断入口地址:
- INT0:0003H; interrupt 0
- T0:000BH; interrupt 1
- INT1:0013H; interrupt 2
- T1:001BH; interrupt 3
- 串行口:0023H; interrupt 4
例子:
用外中断1的中断方式控制P1口8盏发光管的亮暗,要求每按一次开关K,灯由亮变暗或由暗变亮,请编程实现。
原理图:
代码:
#include <reg51.h>
sbit K=P3^3; //将K位定义为P3.3,该定义可省略
void main(void)
{
EA=1; //开放总中断
EX1=1; //允许使用INT1外中断
IT1=1; //选择负跳变来触发外中断
P1=0xff; //设定P1口为输入状态
while(1) ; //无限循环
}
void int1(void) interrupt 2 //外中断1的中断编号为2
{
P1=~P1; //每产生一次中断请求,P1取反一次
}
思考题:若上图的开关改成与P3.2连接,如何修改程序?
原理图:
代码:
#include<reg51.h>
sbit K=P3^2; //将K位定义为P3.2,该定义可省略
void main(void)
{
EA=1; //开放总中断
EX0=1; //允许使用INT0外中断
IT0=1; //选择负跳变来触发外中断
P1=0x00; //设定P1口为输入状态
while(1); //无限循环
}
void int1(void) interrupt 0 //外中断0的中断编号为0
{
P1=~P1; //每产生一次中断请求,P1取反一次
}
注意:当改变自己的中断方式的时候记得需要把和他配套的TCON和IE里面的值也改,否则会出错。
No pains No result
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)