什么是中断?

中断的作用只有一个,那就是打断单片机中别的程序,先执行自身的程序,执行完之后再让单片机继续执行原来的程序。

一般分为几个步骤:中断请求-》记录现在的状态-》中断响应-》中断返回,恢复之前的状态。

用最简单的话来说,就是你在干一件事,在这期间突然电话响了,这时你放下你手中的活去接电话,接完之后你又回去干你之前干的活。上述的这个事例中,电话响了可以看作是中断请求,放下手中的活是记录现在的状态,去接电话是中断响应,接完电话之后你又回去干你之前的活可视为中断返回,具有这些特性的事件称之为中断(其过程如图)。

STC89C52RC单片机内部有个中央处理器,即CPU,它每次只能处理一个事件,想像一下,如果单片机的主函数(main函数)中有一段接收数据的函数时,这时就必须用while语句来判断是否接收到数据,我们都知道,只要while语句的判断条件不成立,程序将会在while语句中不断循环,这样程序就不会执行下去了,CPU也会处于一个等待的过程,这样CPU就得不到有效的利用,而中断却能解决这个问题,只要将接收数据的函数写在中断服务函数(下面会介绍),当单片机接收到数据的时候,就会立马跳到中断服务函数进行数据的接收,这样就不会出现CPU等待的过程,从而提高CPU的利用率。

单片机的中断系统就是单片机的核心,很多非常重要的功能都离不开中断系统的支持。说了这么久中断系统,那么51单片机中断系统的中断源(也就是触发中断的条件)都有什么呢?          

单片机的中断源种类繁多,有外部中断0,在单片机中的字母代号就是,外部中断1就是INT0,定时器0就是T0,定时器1即T1,还有串口中断,ADC中断等等数不胜数。中断的优先级如上图所示,从上到下为外部中断,定时器0,外部中断1,定时器1,串行口。

常见使用的就是外部中断源和定时器中断源。

观察下面的中断结构图,这张图涵盖了外部中断和定时器中断等中断源的核心部分

以INT0为例,若要使硬件查询能够查询到的中断触发源,那么就需要将IT0配置成0/1,1代表下降沿触发中断源。0代表低电平触发外部中断。然后将EX0和EA置一,最后再将PX0处设置成0/1。PX0为0时,代表这个外部中断的优先级为低优先级。如果PX0为1时,代表这个外部中断的优先级为高优先级。只有将这些全部都配置好之后,外部中断信号才能从INT0这里进入,在硬件通过查询得到。但凡有一个寄存器没有配置正确,使用时就会出现没有现象的情况出现。

在上一页的图中,IT0和IT1上电时默认就是低电平触发状态,IP寄存器默认就是所有的中断源都是低优先级。一般在写程序时,我们默认不修改IP寄存器。而IT0和IT1则是看情况来配置1或者0。注意,无论打开哪一个中断,都必须将IE寄存器中断和该中断相关的位全部置1。否则该中断无法正常工作。

下降沿触发和低电平触发的使用和区别:

下降沿:信号从高电平向低电平转变的过程,可以称为信号的下降沿。

上升沿:信号从低电平向高电平转变的过程,可以称为信号的上降沿。

高电平:信号为“1”时,称为高电平。

低电平:信号为“0”时,称为低电平。

现在市场上有很多数字型模块,比如红外模块,比如声敏模块等等,他们在识别到物品或者声音响度达到一定值时,就会被触发,进而输出低电平。这种情况下,我们一般选择使用单片机的外部中断,模式设置为低电平触发,高电平则是关闭中断不触发。

另外按键的使用,一般是写在主函数里面,通过不断的进行扫描判断,但是这样极大的占用了单片机的CPU资源,所以大部分时候都是将按键连接在外部中断触发引脚上,将模式配置为下降沿触发模式,检测到外部中断的引脚从高电平被拉低为低电平时,触发中断。

51单片机中断的使用及优先级设置
51单片机有两个外部中断,两个定时器/计数器,两个外部中断分别是int0,int1。定时器/计数器分别是t0,t1,还有一个串口中断TI/RI,加起来有五个中断。它们在硬件上的排列顺序是INT0,T0,INT1,T1,TI/RI,这5个中断源的中断顺序号依次就是interrupt 后面的0,1,2,3,4。其中定时器可以选择工作方式,因为我们使用定时器的方式不一而足,有的程序会用来计时,有的程序用来计数,根据程序要求设置工作方式各取所需。
下图显示了51单片机中的4个寄存器,分别是TCON,SCON,IE,IP,还有我们常用的定时器模式控制寄存器TMOD。

一、TMOD:定时器/计数器工作方式控制寄存器
TMOD中存放两个定时器/计数器,每个定时器都可以设置它们的工作方式,如定时器0的工作方式1设置就是TMOD=0x01,定时器1设置方法同定时器0,不过设置位数变到前4位TMOD=0x10。如果两个都用方式1的话就是TMOD=0x11了吧。

二、IP:优先级寄存器
IP寄存器是控制中断优先级的寄存器,在51单片机中可以设置中断为高优先级或低优先级,以达到嵌套的目的。想要嵌套中断,必须使用到我们前面说过一嘴的IP寄存器,否则int0的优先级只是查询优先级最高,而不是中断优先级最高。IP寄存器结构如下图,通过设置IP寄存器可以设定由哪个中断最先运行,51单片机可以设置二级中断服务嵌套。通过IP寄存器结构我们可以明显看到下面5个中断所处的位置,因此可以轻易的设置想要的中断优先级,例如设置PX0,即外部中断int0优先级最高,就是IP=0x01;或者PX0=1;效果相同。举一反三,其他中断也是如此设置。

一般情况下我们什么时候要用到中断?

举个简单的例子:

假如我写了一个8个灯的流水灯程序,从头开始依次亮灭。但现在我想要让通过按键来让它停下来,即中断它的流水效果,当我按下键的时候,它停止流动,当我松开按键时,它继续流动,这里的按键按下对流水灯来说就是一个中断。

实现中断的步骤:

先配置外部中断0,即中断初始化:

void init_inter0()  // 配置和启动外部中断0,即INT0
{IT0 = 0;        // 选择低电平触发EX0 = 1;       // 启用外部中断0EA = 1;        // 启用中断,EA相当于所有中断的总开关
}

设置外部中断0预设的程序:

 void  ex0_inter() interrupt  0       // interrupt 0表示中断优先级为0,即第一(C语言中0的排序最大)
{while(P32 == 0 && P34==0);             // 当KEY9和S1键同时按下时,中断流水灯。
}

中断服务函数的固定格式:

void  XXXX(中断源名称随便取)  interrupt X(X表示中断优先等级:0,1,2,3......)

{

写入你想要让主程序中断后做的事情

}

流水灯按键中断程序:

#include <STC89C5xRC.H>void delay(unsigned char xms)      //延迟函数   ms{char j;for ( ; xms > 0 ; xms-- )for( j = 110 ; j > 0 ; j-- );}void init_inter0  ()          //中断初始化: 配置和启动外部中断0,即INT0{IT0 = 0;   // 低电平触发EX0 = 1;  // 启用外部中断0EA = 1;   // 启用总中断,EA相当于所有中断的总开关}void ex0_inter()  interrupt 0       //设置外部中断0预设的程序, interrup表示//中断优先级为0,即第一优先级{while(P32 == 0 && P34==0);             // 当KEY9和S1键同时按下时,中断流水灯,直到按键抬起}void main(){P1 = 0x01;                  // 初始化为00000001init_inter0();                 // 初始化外部中断零INT0while(1)                 // 让程序死循环,不断重复执行{ }里的程序{P1 = (P1<<1)|(P1>>7);  //实现从头开始依次亮灭的流水灯功能delay(500);}

51单片机 (八)中断系统相关推荐

  1. 51单片机的中断系统

    文章目录 1 51单片机的中断系统 1.1 中断的固有优先级和抢占优先级 1 51单片机的中断系统 1.1 中断的固有优先级和抢占优先级 中断使能寄存器: 中断查询序列: interrupt 后面中断 ...

  2. 51单片机之中断系统

    51单片机之中断系统 中断系统 四种中断类型: 外部中断: 定时器/计数器T0.T1中断: 串行口中断: 定时器/计数器T2中断: 中断入口: 与中断相关的特殊功能寄存器: 中断优先级: 中断响应时间 ...

  3. 51单片机笔记:中断系统

    单片机笔记 中断系统 工作原理 功能描述 终止当前进行的事件,去处理突发需及时处理的事件,处理完还要返回原事件. 中断符函数 void ISR() interupt n 中断符函数与普通函数区别 普通 ...

  4. 51单片机的中断系统详解

    单片机的中断系统 概念 中断发生:CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理. 中断响应和中断服务:CPU暂时中断当前的工作,转去处理事件B. 中断返回:将事件B处理完毕后,回到事 ...

  5. 51单片机的中断系统及编程(附案例)

    本文简单粗暴地阐述了中断的一些概念.中断源.中断寄存器各位的作用,并写出了编写一个中断函数的流程/要点.不在意细节时,可直接查看照搬"三.中断程序的编程". 一.中断概念 中断定义 ...

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

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

  7. 51单片机仿真——中断系统(2)

    Proteus原理图如下: 要是没有设置中断优先级,则外部中断0比外部中断1的同级次序高.同级之间不会打断已被响应的中断请求.所以应该用IP寄存器设置两个中断源的中断优先级,就能使其中一个中断请求能被 ...

  8. 51单片机 | 外部中断实验

    文章目录 一.外部中断介绍 二.外部中断配置 三.硬件设计 四.软件设计 五.实验现象    51 单片机外部中断有 2 个,外部中断 0 和外部中断 1,它们的使用方法是一样的,所以只要学会一个即可 ...

  9. 单片机的中断系统(一)

    想总结中断由来已久,但是总感觉一章的东西,太多,无从下手. 前几天看到一句话"能把自己学会的东西说出来,才是真的学会".今天,就要会一会这中断系统. 图片和文字内容来自:普中科技的 ...

  10. 基于51单片机的时钟系统

     这一次带来的项目是课程设计级别的基于51单片机的时钟系统,本次的项目共有两种,一种是基础功能时钟,上电后自动从00-00-00开始计时,另一种加上了调时功能,上电后自动从00-00-00开始,当需要 ...

最新文章

  1. 方法 注释_注释模板导入操作方法
  2. PAT(甲级)2020年春季考试 7-4 Replacement Selection
  3. 电芯容量在前期循环中容量增加_如何设计提高电池电芯的容量密度?
  4. lable、ul、ol、dl和table、fieldset标签
  5. 盘外招无法击垮比特币现金(BCH)的意志
  6. 每日一皮:我靠,这个分枝真的merge回主干了!
  7. 【深度学习】基于Colab Pro的TPU训练模型教程(Tensorflow)
  8. 修改仓库如何修改本地仓库的存储位置
  9. eslint 保存自动格式化_ESLint一款可组装的JavaScript和JSX检查工具
  10. Silverlight中如何自己写方法将DataTable转换为PagedCollectionView数据(动态创建类)
  11. android studio不能更新代码,解决Android Studio 和 Android SDK Manager 无法在线更新的问题....
  12. seaborn绘图入门1(lineplot+barplot+heatmap+scatterplot)
  13. 蓝色企业CMS网站后台管理模板
  14. ubuntu 安装 guetzli
  15. c#如何根据字符串长度获得宽度
  16. Spring 4.x vs Spring 5.x
  17. Excel批量复制选中单元格的整行
  18. 数字ic设计|ASIC芯片开发过程
  19. 报错: error in ./node_modules/@vueuse/core/index.mjs
  20. 华为手机比较好用的三款推荐

热门文章

  1. straight and narrow
  2. 腾讯定位服务使用教程Android版
  3. android usb调试软件,有没有什么android软件可以直接进行usb调试啊
  4. Persistence Full persistence vs. partial persistence.
  5. 串口屏如何调用RTC时钟
  6. 面试-github开源-帅张上传
  7. 寻找误删电脑微信照片的办法,这里有三个好方法
  8. Vant Weapp使用方法
  9. Logotype Maker-功能强大的免费在线logo设计工具
  10. 中国成语测试软件,精准测试及其工具(连载1)