什么是中断?

中断是让单片机具有处理外部和内部随机发生事件实时处理的能力;

中断提高了单片机处理外部或内部的能力;

芯片在处理某一个A事件,发生了一件B事件,请求芯片(中断发生)去处理B事件,暂停原来做的A事件,转去处理B事件(中断服务),芯片处理完B事件,在回到事件A中断的地方在继续处理A事件(中断返回),这个过程叫中断。


中断的结构

有多少个中断?

基于51单片机一般提供八个中断

外部中断0 、 外部中断1 、 外部中断2 、 外部中断3 、

定时器0、定时器1、定时器2、串口 八个中断请求源

一般STC增强型 有八个

但一般单片机都有5个中断  ,这是基础的

重点学习这5个中断,后面多的都大差不差


中断里有什么?

TCON寄存器,控制外部中断是下降沿触发,还是低电平触发,触发之后中断标志位IE0自动化置为1,;

IE外部中断寄存器设置,EX0中断的选择位

EA 全局中断控制使能位

IP设置中断的优先级

中断寄存器

(1) 中断允许控制 就是 IE 寄存器的某一位

(2)中断请求标志 就是 TCON寄存器 8位的寄存器


中断优先级?

外部中断0---->定时器0---->外部中断1---->定时器1---->串口

中断号

中断响应条件?

①中断源有中断请求;
②此中断源的中断允许位为 1;
③CPU 开中断(即 EA=1)。

若果设置的中断有问题,可以从这三个方面去查看


中断配置

中断的操作流程

1、先要在外部中断设置是下降沿触发、还是低电压触发 在TCON寄存器中、触发之后中断标志IE0 自动置1

2、外部中断允许位要打开

3、EA总中断要开发

4、设置中断优先级

5、中断才会流入MCU

中断0 初始化

// 外部中断0配置初始化
void exit0_init(void)
{
        IT0 = 1; // 下降沿触发
        EX0 =1;          // 中断允许位打开
        EA=1;          // 总中断打开

}

中断0服务函数

// 外部中断0服务函数           没有返回值
void exit0() interrupt 0          // 0 是中断号
{
        deplay_time(1000); // 消抖
        if(KEY3==0)
        {
                LED1=!LED1;
        }        
}

void exit0()  interrupt 0    中断服务函数  0 是哪个中断号

中断优点

分时操作、实时响应、可靠性高

分时操作: CPU 可以分时为多个 I/O 设备服务,提高了计算机的利用率

实时响应:CPU 能够及时处理应用系统的随机事件,系统的实时性大大增强

可靠性高:CPU 具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高


实验需求:

用K3、K4按键使用中断,LED1灯按灭

硬件图:

编程设计:

#include "reg52.h"  // 头文件
// char/int 重命名
typedef unsigned char u8;
typedef unsigned int u16;
// 按键管脚
sbit KEY3 = P3^2;
sbit KEY4 = P3^3;
sbit LED1 = P2^0;

// 外部中断0配置初始化
void exit0_init(void)
{
        IT0 = 1; // 下降沿触发
        EX0 =1;          // 中断允许位打开
        EA=1;          // 总中断打开

}
// 外部中断1配置初始化
void exit1_init(void)
{
        IT1 = 1; // 下降沿触发
        EX1 =1;          // 中断允许位打开
        EA=1;          // 总中断打开

}


// 外部中断0服务函数           没有返回值
void exit0() interrupt 0          // 0 是中断号
{
        deplay_time(1000); // 消抖
        if(KEY3==0)
        {
                LED1=!LED1;
        }        
}

// 外部中断1服务函数1           没有返回值
void exit1() interrupt 2          // 0 是中断号
{
        deplay_time(1000); // 消抖
        if(KEY4==0)
        {
                LED1=!LED1;
        }        
}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐