目录
介绍
中断是在连续工作中随机发生的事件。这就像你忙于工作时的电话,根据电话优先级,你决定是接听还是忽视。
微控制器也是如此。8051架构处理5个中断源,其中两个是内部的(定时器中断),两个是外部的,一个是串行中断。每个中断都有其中断向量地址。最高优先级中断是复位,向量地址为0x0000。
向量地址:这是控制器在中断后跳转以服务ISR(中断服务程序)的地址。
Reset
- 复位是优先级最高的中断,复位8051单片机开始执行0x0000地址的代码。
内部中断(定时器中断)
- 8051有两个内部中断,即timer0和timer1。只要定时器溢出,就会设置定时器溢出标志(TF0 / TF1)。然后微控制器跳转到它们的向量地址以服务中断。为此,应启用全局和定时器中断。
串行中断
- 8051具有串行通信端口并具有相关的串行中断标志(TI / RI)。当发送一个字节的最后一位(停止位)时,TI串行中断标志置位,当接收到接收数据字节的最后一位(停止位)时,RI标志置位。
IE寄存器:中断使能寄存器
- IE寄存器用于启用/禁用中断源。
8051 IE寄存器
Bit 7 – EA:启用所有位
- 1 =启用所有中断
- 0 =禁用所有中断
Bit 6,5 -保留位
Bit 4 – ES:使能串行中断位
- 1 =启用串行中断
- 0 =禁用串行中断
Bit 3 – ET1:使能Timer1中断位
- 1 =使能Timer1中断
- 0 =禁止Timer1中断
Bit 2 – EX1:使能External1中断位
- 1 =启用External1中断
- 0 =禁用External1中断
Bit 1 – ET0:使能Timer0中断位
- 1 =使能Timer0中断
- 0 =禁止Timer0中断
Bit 1 – ET0:使能External0中断位
- 1 =启用External0中断
- 0 =禁用External0中断
中断优先级
可以使用中断优先级寄存器(IP)分配中断优先级
复位后的中断优先级:
在该表中,显示了复位时的中断优先级。根据8051中断优先级,在微控制器完成优先级较高的中断之前,不会提供最低优先级的中断。在两个或多个中断到达的情况下,微控制器根据优先级对它们进行排队。
IP寄存器:中断优先级寄存器
8051具有中断优先级寄存器,用于为中断分配优先级。
中断优先级寄存器
Bit 7,6,5 -保留位。
Bit 4 – PS:串行中断优先级位
- 1 =为串行中断分配高优先级。
- 0 =为串行中断分配低优先级。
Bit 3 – PT1: Timer1中断优先级位
- 1 =为Timer1中断分配高优先级。
- 0 =为Timer1中断分配低优先级。
Bit 2 – PX1:外部中断1优先级位
- 1 =为External1中断分配高优先级。
- 0 =为External1中断分配低优先级。
Bit 1 – PT0: Timer0中断优先级位
- 1 =为Timer0中断分配高优先级。
- 0 =为Timer0中断分配低优先级。
Bit 0 – PX0: External0中断优先级位
- 1 =为External0中断分配高优先级。
- 0 =为External0中断分配低优先级。
8051中的外部中断
- 8051有两个外部中断INT0和INT1。
- 通过外部中断引脚PORT3.2,PORT3.3提供电平或边沿,可以通过外部中断中断8051控制器。
- 如果启用了全局和外部中断,外部外设可以通过这些外部中断中断微控制器。
- 然后,微控制器将执行当前指令并跳转到中断服务程序(ISR)以进行中断。
- 在轮询方法中,微控制器必须通过监视引脚来连续检查脉冲,而在中断方法中,微控制器不需要轮询。每当发生中断时,微控制器就会发出中断请求。
外部中断有两种类型的激活级别:
- 边沿触发(上升沿/下降沿检测发生中断)
- 电平触发(高/低电平检测中断)
在8051中,使用两种类型的激活级别。这些是:
- 低电平触发
只要在全局和外部中断使能时INT0 / INT1引脚上检测到低电平,控制器就跳转到中断服务程序(ISR)以服务中断。
- 下降沿触发
每当在INT0 / INT1引脚上检测到下降沿时全局和ext。中断使能,控制器跳转到中断服务程序(ISR)以服务中断。
TCON寄存器中有低4个标志位,用于选择和监视外部中断类型和ISR状态。
TCON:定时器/计数器寄存器
8051 TCON寄存器
Bit 3- IE1:
- 外部中断1边沿标志,当INT1引脚发生中断时由硬件置1,当中断处理完成时由硬件清零。
Bit 2- IT1:
该位选择INT1引脚上的外部中断事件类型,
- 1 =在下降沿设置中断
- 0 =设置低电平中断
Bit 1- IE0:
- 中断0边沿标志,当INT0引脚发生中断时由硬件置1,当处理中断时由硬件清零
Bit 0 – IT0:
该位选择INT0引脚上的外部中断事件类型。
- 1 =在下降沿设置中断
- 0 =设置低电平中断
例
让我们编写AT89C51的外部中断,以便在INT0引脚上检测到下降沿时,微控制器将切换P1.0引脚。
8051边沿触发外部中断
编程步骤
- 启用全局中断,即EA = 1
- 启用外部中断,即EX0 = 1
- 启用中断触发模式,即中断是下降沿触发还是电平触发,这里我们将使用下降沿触发中断,因此使IT0 = 1。
程序
/*
* 8051_External_Interrupt
* http://www.qutaojiao.com
*/
#include <reg51.h> /* Include x51 header file */
sbit LED = P1^0; /* set LED on port1 */
void Ext_int_Init()
{
EA = 1; /* Enable global interrupt */
EX0 = 1; /* Enable Ext. interrupt0 */
IT0 = 1; /* Select Ext. interrupt0 on falling edge */
}
void External0_ISR() interrupt 0
{
LED = ~LED; /* Toggle pin on falling edge on INT0 pin */
}
注意:对于电平触发中断,需要清零IT0,即IT0 = 0。
本节课程序下载:
感谢作者,学习了
配合代码真机测试一下,比看书强太多啦
我想学习一下