中断是让单片机具有处理外部和内部随机发生事件实时处理的能力;
中断提高了单片机处理外部或内部的能力;
芯片在处理某一个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、先要在外部中断设置是下降沿触发、还是低电压触发 在TCON寄存器中、触发之后中断标志IE0 自动置1
2、外部中断允许位要打开
3、EA总中断要开发
4、设置中断优先级
5、中断才会流入MCU
- // 外部中断0配置初始化
- void exit0_init(void)
- {
- IT0 = 1; // 下降沿触发
- EX0 =1; // 中断允许位打开
- EA=1; // 总中断打开
-
- }
- // 外部中断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;
- }
- }