本文是在学习51单片机的中断系统的简单性总结,着重于51单片机的中断系统的工作原理及如何使用。
文章目录
一、中断原理简单介绍
首先需要知道51单片机的引脚(如下示意图),其中P3口除了作为输入/输出I/O口,还有第二功能,与中断有关的引脚:
P3.0/RXD
:作为串口接收数据;P3.1/TXD
:作为串口发送数据;P3.2/INT0
:具有外部中断0功能;P3.3/INT1
:具有外部中断1功能;P3.4/T0
:具有定时/计数器0功能;P3.5/T1
:具有定时/计数器1功能;
然后要看懂80C51系列单片机的中断系统结构,如下图。
以外部中断0为例,从左侧开始看,IT0控制中断触发方式是下降沿还是低电平,IE0作为中断请求标志由硬件置位发送中断申请。当EX0=1且EA=1时,不考虑中断优先级(中断优先级置1或置0都可),IE0被置位即会进入中断入口。
以定时/计数器0为例,TF0作为定时/计数器溢出中断请求标志由硬件置位发送中断申请或清0。当ET0=1且EA=1时,不考虑中断优先级,TF0置位时会进入中断。
以串口中断为例,RI作为串口接收中断标志位,TI作为串口发送中断标志位,当接收或发送一帧串口数据时会置位,发送中断申请。当ES=1且EA=1时,不考虑中断优先级,RI或TI被置位后即进入中断。
然后要知道中断响应的条件:① 中断源有中断请求;② 此中断源的中断允许位为1;③ CPU开中断。
以外部中断0为例,P3.2口作为外部中断0的中断源。
- 第一个条件:中断源有中断请求,P3.2口什么情况下会有中断请求?
首先需要IT0设置中断触发方式是下降沿触发中断还是低电平触发中断。
如果是下降沿触发中断即IT0=1,那么P3.2口由高电平变为低电平时就会触发中断,并会置IE0=1,产生中断申请。
- 第二个条件:此中断源的中断允许位为1,外部中断0的允许位即EX0置1,则允许INT0中断被处理;
- 第三个条件:CPU开中断,置CPU总中断位为1即EA置1。
最后,在编码时,要编写中断响应条件的代码,还要编写中断响应后的中断处理函数的代码。
中断处理函数的格式如下, 其中返回值类型为空void,函数名自定义,interrupt表示该函数是中断处理函数,0表示中断号。
void user_def_func_name() interrupt 0
{
// 中断处理
}
根据中断类型不同,中断号也不同,中断号如下:
中断源符号 | 名称 | 中断引起原因 | 中断号 |
---|---|---|---|
/INT0 | 外部中断0 | P3.2引脚低电平或下降沿信号 | 0 |
T0 | 定时器0中断 | 定时/计数器0计数回0溢出 | 1 |
/INT1 | 外部中断1 | P3.3引脚低电平或下降沿信号 | 2 |
T1 | 定时器1中断 | 定时/计数器1计数回0溢出 | 3 |
TI/RI | 串行口中断 | 串口通信完成一帧数据发送或接收引起中断 | 4 |
二、 外部中断相关介绍
STC89C5X系列单片机提供了4个外部中断:外部中断0、外部中断1、外部中断2、外部中断3。51系列单片机一定有基本的2个外部中断,不全有4个中断,可通过查看芯片手册确认。通常使用基本的2个外部中断:外部中断0和外部中断1。这两个外部中断使用方法一致。
2.1 与外部中断相关的寄存器
与外部中断0/1相关的寄存器有TCON,IE,IP,
IE-中断允许控制寄存器
CPU对中断系统所有中断以及对某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。IE各位说明如下:
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
字节地址:A8H | EA | ES | ET1 | EX1 | ET0 | EX0 | ||
IE | CPU总中断允许位 | 串行口中断允许位 | 定时/计数器1中断允许位 | 外部中断1允许位 | 定时/计数器中断允许位 | 外部中断0允许位 |
- TCON-控制寄存器
TCON中的各位控制中断请求及中断触发方式。TCON各位说明如下:
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|
字节地址:A8H | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
TCON | 定时/计数器T1 溢出中断请求标志位 |
定时/计数器T1运行控制位 | 定时/计数器T0 溢出中断请求标志位 |
定时/计数器T0运行控制位 | 外部中断1 中断请求标志位 |
外部中断1 触发方式控制位 |
外部中断0 中断请求标志位 |
外部中断0 触发方式控制位 |
其中外部中断触发控制位(IT0/IT1),为高电平时,为边沿触发方式;为低电平时,为电平触发方式。
IP-中断优先级控制寄存器
。
2.2、外部中断0使用示例
以独立按键通过外部中断0控制LED亮灭为例。
要触发外部中断0中断,需要INT0引脚产生有效信号,外部中断0允许标志位EX0=1且CPU总中断允许位EA=1。
要使INT0引脚产生有效信号,需要外部中断0触发方式控制位IT0选择中断触发方式,IT0置1选择下降沿触发。通过按键连接到INT0引脚,当按键按下时,INT0引脚由高电平变为低电平,产生了一个下降沿,就会触发外部中断0请求中断。CPU响应外部中断0的中断申请,进入外部中断0中断处理函数中,在该函数中控制LED的亮灭。
proteus设计原理图如下: