对于单片机来讲,中断是指 CPU 在处理某一事件 A 时,发生了另一事件 B, 请求CPU迅速去处理(中断发生);CPU暂时停止当前的工作(中断响应), 转去处理事件 B(中断服务);待CPU将事件B处理完毕后,再回到原来事件 A 被中断的地方继续处理事件 A(中断返回),这一过程称为中断

引起 CPU 中断的根源称为中断源。中断源向 CPU 提出中断请求,CPU 暂时中断原来的事务 A,转去处理事件 B,对事件 B 处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。

STC89C5X 系列单片机提供了 8 个中断请求源,它们分别是:

外部中断 0(INT0)、外部中断 1(INT1)、外部中断 2(INT2)、外部中断 3(INT3)、定时器 0 中断、定时器 1 中断、定时器 2 中断、串口(UART)中断。

但注意:51 系列单片机一定有基本的5个中断,但不全有8个中断,需要查看芯片手册,通常使用的都是基本的5个中断:INT0、INT1、定时器 0/1,串口中断。

高优先级的中断请求可以打断低优先级的中断,反之,低优先级的中断请求不可以打断高优 先级及同优先级的中断。当两个相同优先级的中断同时产生时,将由查询次序来决定系统先响应哪个中断。

STC89C5X 系列单片机的各个中断查询次序表

通过设置新增加的特殊功能寄存器 IPH 中的相应位,可将中断优先级设为四级,如果只设置 IP 或 XICON,那么中断优先级就只有两级,与传统 8051 单 片机两级中断优先级完全兼容。上图中的中断查询次序即为中断号,这个中断号在编程时非常重要,当中断来临时,只有中断号正确才能进入中断。

51 单片机一定有的 5 个中断

①INT0 对应的是 P3.2 口的附加功能,可由 IT0(TCON.0)选择其为低电平有效还是下降沿有效。当 CPU 检测到 P3.2 引脚上出现有效的中断信号时,中断标志 IE0(TCON.1)置 1,向 CPU 申请中断。

②INT1 对应的是 P3.3 口的附加功能,可由 IT1(TCON.2)选择其为低电平有效还是下降沿有效。当 CPU 检测到 P3.3 引脚上出现有效的中断信号时,中断标志 IE1(TCON.3)置 1,向 CPU 申请中断。

③T0 对应的是 P3.4 口的附加功能,TF0(TCON.5),片内定时/计数器 T0 溢出中断请求标志。当定时/计数器 T0 发生溢出时,置位 TF0,并向 CPU 申请中断。

④T1 对应的是 P3.5 口的附加功能,TF1(TCON.7),片内定时/计数器 T1 溢出中断请求标志。当定时/计数器 T1 发生溢出时,置位 TF1,并向 CPU 申请中断。

⑤RXD 和 TXD 对应对应的是 P3.0 和 P3.1 口的附加功能,RI(SCON.0)或 TI (SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位 RI 或 当串行口发送完一帧串行数据时置位 TI,向 CPU 申请中断

(1)中断允许控制

CPU 对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。

EX0(IE.0),外部中断 0 允许位;

ET0(IE.1),定时/计数器 T0 中断允许位;

EX1(IE.2),外部中断 0 允许位;

ET1(IE.3),定时/计数器 T1 中断允许位;

ES(IE.4),串行口中断允许位;

EA (IE.7), CPU 中断允许(总允许)位。

(2)中断请求标志 TCON

IT0(TCON.0),外部中断 0 触发方式控制位

当 IT0=0 时,为电平触发方式。 当 IT0=1 时,为边沿触发方式(下降沿有效)。

IE0(TCON.1),外部中断 0 中断请求标志位

IT1(TCON.2),外部中断 1 触发方式控制位。

IE1(TCON.3),外部中断 1 中断请求标志位。

TF0(TCON.5),定时/计数器 T0 溢出中断请求标志位。

TF1(TCON.7),定时/计数器 T1 溢出中断请求标志位。

(3)中断优先级

同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:

(4)中断号

(5)中断响应条件

①中断源有中断请求;

②此中断源的中断允许位为 1;

③CPU 开中断(即 EA=1)

例如:外部中断 0

EA=1;//打开总中断开关

EX0=1;//开外部中断 0

IT0=0/1;//设置外部中断的触发方式

中断服务函数:

void int0() interrupt 0 using 1

{

//编写用户所需的功能代码

}

在中断函数中 int0 是函数名,可自定义,但必须符合 C 语言标识符定义规则,interrupt 是一个关键字,表示 51 单片机中断。后面的“0”是中断号,外部中断 0 中断号为 0,这个可参考前面的内容。后面的 using 1 可省略不写。

下面用代码做例子:

代码实现内容为:main里面的主函数控制led流水灯,外部中断0控制第一个八段数码管从1变到F,外部中断1控制最后一个八段数码管从1变到F。

#include"reg52.h"
#include<intrins.h>typedef unsigned int u16;
typedef unsigned char u8;sbit k3=P3^2;//k3、k4是独立按键
sbit k4=P3^3;
sbit LSA=P2^2;//详细看静态数码管章节,本案例需要把J24模块的OE接VCC
sbit LSB=P2^3;
sbit LSC=P2^4;void delay(u16 s);
void int0init();
void int1init();u16 number=0xfe;
u8 num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};     //控制八段数码管显示1~Fvoid main()
{int0init();//开外部中断0int1init();//开外部中断1while(1)  //控制流水灯{     P2=number; number=_crol_(number,1);delay(10000000);   }
}void delay(u16 s)
{while(s--);
}void int0init()       //开外部中断0
{IT0=1;EX0=1;EA=1;
}void int1init()        //开外部中断1
{IT1=1;EX1=1;EA=1;
}
//下面代码可参考静态数码管部分
void Int0() interrupt 0      //外部中断0发生后需要CPU完成什么工作
{delay(1000);if(k3==0)                 //消抖{unsigned int i,j;LSA=1;LSB=1;LSC=1;     //  CBA  111  表示最高位的数码管输出for(i=0;i<=15;i++)      //在LED对应的8段数码管循环显示0~F{P0=num[i];                j=100000000;while(j--);           //延时一段时间}}}void Int1() interrupt 2
{delay(1000);if(k4==0){unsigned int i,j;LSA=0;LSB=0;LSC=0;  //  CBA  000  表示最低位的数码管输出for(i=0;i<=15;i++)      //在LED对应的8段数码管循环显示0~F{P0=num[i];                j=100000000;while(j--);           //延时一段时间}}
}

12.中断+外部中断相关推荐

  1. 51单片机学习笔记之中断(外部中断、定时器中断、中断嵌套)

    要学习51单片机中断的朋友,拥有这一篇博文就够了,深入浅出,里面包含了寄存器,外部中断.定时器中断.中断嵌套等的讲解,还有代码实战.快一万字,写得不容易,还请大家点赞支持一下,后续持续更新 (一)寄存 ...

  2. STM32基础之中断--外部中断

    EXTI简介 EXTI(External interrupt/event controller)-外部中断/事件控制器,管理了控制器的 19个中断/事件线.每个中断/事件线都对应有一个边沿检测器,可以 ...

  3. STM32中断(外部中断和定时器中断)

    一.外部中断 spi,iic的中断和51单片机不一样,这些在stm32属于外设,是外部中断. 因为STM32的中断非常多,因此必须设置中断优先级 STM32有两个优先级的概念:抢占式优先级和响应式优先 ...

  4. ATmega8 定时器 中断 外部中断 程序

    4MHZ时钟 #include <iom8v.h> #include <macros.h> #include <stdio.h> #include <stdl ...

  5. 51单片机复习:外部中断,定时器/计数器中断

    中断: 什么是中断,就是打断,你一开始在做一件事,突然意外发生(中断源),你不得不停止手中的事,(中断响应),去处理那 件意外(中断服务),处理完意外后你继续做刚才那件事(中断返回),这就是中断,而单 ...

  6. (五)DSP28335基础教程——外部中断控制(按键触发)

    0 前言 本期实验目标:采用外部中断方式响应按键触发,实现LED电平反转. 外部中断是DSP十分常用的功能,通常用来响应一些控制操作,比如判断按键是否按下,传感器是否接收到信号等等.那么通过该例程,大 ...

  7. 基于STM32外部中断系统的秒表的设计

    1.项目简介 硬件平台:基于某STM32F103开发板. 软件平台:KEIL5 MDK V5.38,基于LCD屏幕库函数例程库为模板,添加了外部中断,定时器中断相关代码,稍加修改而成. 功能简介:有三 ...

  8. 51单片机:中断系统(外部中断,定时器中断,串口通信)

    目录 中断系统简介: 中断的优先级和嵌套: 8个中断请求源及其优先级: 中断的分别介绍: 1.外部中断0:INT0 2.外部中断1 3.T0和 T1:定时计数器的功能 4.串口中断(串口为什么使用定时 ...

  9. Linux内核深入理解中断和异常(5):外部中断

    Linux内核深入理解中断和异常(5):外部中断 rtoax 2021年3月 1. 外部中断简介 外部中断包括:键盘,鼠标,打印机等. 外部中断包括: I/O interrupts; IO中断 Tim ...

最新文章

  1. (C++)高精度整数的存储、读入、比较和四则运算
  2. springboot 跨域解决方案
  3. python核心编程学习(第四章)
  4. 安装kafka过程及出现的问题解决
  5. RSA的密钥把JAVA格式转换成C#的格式
  6. CV之SR:超分辨率(Super resolution)的简介、使用方法、案例应用之详细攻略
  7. 香港四大天王影帝情况(截止2016)
  8. 卸料装置弹性零件的计算方法_冲裁模卸料板的设计
  9. 如何在Windows系统上使用Object Detection API训练自己的数据?
  10. Django框架 from django.core.files.uploadedfile import InMemoryUploadedFile
  11. React Router最新指南与异步加载实践
  12. 算法篇---java算法应用
  13. linux系统重装win系统教程,Win10如何重装linux系统 Win10重装linux系统教程
  14. ECCV2020:论文解读《Synthesize then Compare: Detecting Failures and Anomalies for Semantic Segmentation》
  15. 程序模板(20210603笔记)
  16. 企业口碑营销,如何塑造全网优质口碑
  17. RANSAC如何动态更新最大迭代次数
  18. matlab里findobj,Matlab之findobj()
  19. 【转】编写游戏人物、剧情、对话的8大经验总结
  20. enumerate在python中是什么意思_python中enumerate的用法实例解析

热门文章

  1. Unity3D入门 俄罗斯方块总结(一)
  2. Moglue:无需编程的交互式电子书制作软件(视频演示)
  3. 如何安全的保存密码?
  4. sybase 与mysql_sybase 和 mysql 转换问题
  5. hive-staging文件问题——DataX同步数据重复
  6. TT100K/BDD100K数据集格式转换
  7. 计算机编辑功能在哪,文本编辑栏到哪去了
  8. 学校单位公司局域网如何封锁QQ,禁止QQ,禁止在线音乐等
  9. 《OpenCV支持的图片格式》
  10. java 字符界面 curses_Linux终端图形库 Curses简介和实例分析