中断(全网最细!)
什么是中断?
中断是让单片机具有处理外部和内部随机发生事件实时处理的能力;
中断提高了单片机处理外部或内部的能力;
芯片在处理某一个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 初始化
// 外部中断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;
}
}
更多推荐
所有评论(0)