文章目录

  • 一、外部中断介绍
  • 二、外部中断配置
  • 三、硬件设计
  • 四、软件设计
  • 五、实验现象

   51 单片机外部中断有 2 个,外部中断 0 和外部中断 1,它们的使用方法是一样的,所以只要学会一个即可掌握所有外部中断使用。本节所要实现的功能是:使用独立按键 K3 控制 LED 亮灭, K3 连接外部中断 0P3.2)管脚。

一、外部中断介绍

  上一节我们介绍了51 单片机的中断系统,我们再回顾一下 51 单片机的中断。
  当中央处理机 CPU 正在处理某件事的时候外界发生了紧急事件请求,要求CPU 暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件称为中断系统,请示 CPU 中断的请求源称为中断源。微型机的中断系统一般允许多个中断源,当几个中断源同时向 CPU 请求中断,要求为它服务的时候,这就存在CPU 优先响应哪一个中断源请求的问题。通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU 总是先响应优先级别最高的中断请求。中断示意图如下所示:

  STC89C5X 系列单片机提供了 4 个外部中断:外部中断 0(INT0)、外部中断1(INT1)、外部中断 2(INT2)、外部中断 3(INT3)。(注意:51 系列单片机一定有基本的 2 个外部中断,但不全有 4 个中断,需要查看芯片手册,通常我们都是使用基本的 2 个外部中断:INT0INT1)。
  下面我们来看下外部中断结构图,如下所示:

图中 INT0INT1 即为外部中断 0 和外部中断 1 输入口。

  • 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 申请中断。

中断允许控制
  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 中断允许(总允许)位。

中断请求标志 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 溢出中断请求标志位。

二、外部中断配置

  我们知道要让51 单片机发生中断必须要满足以下 3 个条件,这 3 个条件的顺序可以任意:

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

  比如我们配置外部中断 0,对应的配置程序如下:

EA=1;//打开总中断开关
EX0=1;//开外部中断 0
IT0=0/1;//设置外部中断的触发方式

如果要配置的是外部中断 1,只需将 EX0 改为 EX1IT0 改为 IT1
  因为独立按键一端是共地的,当按下后对应单片机 IO 口被拉低,而默认单片机 IO 口是高电平,这样就有一个下降沿过程,所以通常使用外部中断都是配置为下降沿触发,即 IT0=1
  在编写程序时通常我们会将外部中断的配置放到一个自定义函数内便于管理维护。如下所示:

void exti0_init(void)
{IT0=1;//外部中断的触发方式:下降沿EX0=1;//打开 INT0 的中断允许EA=1;//打开总中断
}

  当触发中断后即会进入中断服务函数,外部中断 0 中断服务函数如下:

void exti0() interrupt 0 //外部中断 0 中断函数
{//执行所需的功能
}

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

三、硬件设计

  本实验使用到硬件资源如下:

  • 独立按键模块(K3)
  • LED 模块(D1)

LED 模块和独立按键模块电路在前面章节已介绍过,这里就不多说。原理图中 K3 键是连接在单片机 P3.2 口(外部中断 0),K4 按键是连接在 P3.3 口(外部中断 1)。

四、软件设计

  本节所要实现的功能是:使用独立按键 K3 控制 LED 亮灭。
  我们直接复制前面创建好的工程模板,将复制过来的模板文件夹重新命名为“16-外部中断实验”。打开工程直接在 main.c 源文件内进行编程,main.c 内代码如下:

/*
实验名称:外部中断 0 实验
接线说明:
实验现象:下载程序后,当按下 K3 键可控制 D1 指示灯亮灭
注意事项:将红外接收传感器取下,防止对 P3.2 口干扰
*/#include "reg52.h"//对系统默认数据类型进行重定义
typedef unsigned char u8;
typedef unsigned int u16;//定义LED1管脚
sbit LED1 = P2^0;//定义独立按键K3控制脚
sbit KEY3 = P3^2;/*
函 数 名 : delay_10us
函数功能 : 延时函数,ten_us=1 时,大约延时 10us
输 入 : ten_us
输 出 : 无
*/
void delay_10us(u16 ten_us)
{while(ten_us--);
}/*
函 数 名 : exti0_init
函数功能 : 外部中断 0 配置函数
输 入 : 无
输 出 : 无
*/
void exit0_init(void)
{IT0 = 1;  //设置外部中断的触发方式:下降沿触发EX0 = 1;  //打开INT0的中断允许EA = 1;    //打开总中断开关
}/*
函 数 名 : exti0
函数功能 : 外部中断 0 中断服务函数
输 入 : 无
输 出 : 无
*/
void exit0() interrupt 0
{delay_10us(1000); //消抖//再次判断K3键是否按下if (KEY3 == 0){LED1 = !LED1;  //LED1状态翻转}
}
/*
函 数 名 : main
函数功能 : 主函数
输 入 : 无
输 出 : 无
详细说明 : K3按键按下(下降沿)就会触发中断,触发中断就会依据中断号自动进入中断服务函数,在中断服务函数中控制指示灯的亮灭
*/
void main()
{   exit0_init(); //外部中断0初始化配置//这里主程序并未配置while (1){     }
}

至此,整个程序就编写完成,我们编译一下,如下图所示:

可以看到没有错误,也没有警告。

五、实验现象

  使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口),把编译后产生的.hex 文件烧入到芯片内,实现现象如下:当按下 K3 键,D1 指示灯亮,再次按下 K3 键,D1 指示灯灭,如此循环。
  如果下载的是外部中断 1 实验程序,实验现象如下:当按下 K4 键,D1 指示灯亮,再次按下 K4 键,D1 指示灯灭,如此循环。
注意:由于红外接收传感器与 K3 共用 P3.2 口,因此在做外部中断 0 实验时,将红外接收传感器从开发板取下,防止干扰。

51单片机 | 外部中断实验相关推荐

  1. 51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管

    设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序). #inc ...

  2. 51单片机外部中断的C51编程

    51单片机外部中断的C51编程 相关知识: 1.51单片机的5大中断源:串行口中断.定时中断1.外部中断1.定时中断0.外部中断0: 2.中断源的编号: 串行口中断为4.定时中断1为3.外部中断1为2 ...

  3. 单片机外部中断实验C语言程序,STC89C52单片机外部中断0实验

    原标题:STC89C52单片机外部中断0实验 / 实现功能: 设置,然后通过点亮与P1口第一个引脚相连的D1来 显示系统进入了外部中断0 实验板型号:BS-XYD-C52 实验名称: 外部中断0测试 ...

  4. c语言51单片机外部中断,51单片机外部中断0实例详解

    今天就以51单片机的外部中断0为例,来简单讲解一下单片机中断的用法. 1 51单片机的中断源 51单片机共有5个中断源,分别为:外部中断0 定时器0中断 外部中断1 定时器1中断 串口中断 每一个中断 ...

  5. 单片机原理及其应用——单片机外部中断实验(八段数码管通过按键依次显示0~9数字)

    目录 一.实验要求 二.知识要点 (一)数码管 (二)八段数码管的字形编码 (三)C51变量定义的四要素 (四)中断源 (五)相关的特殊功能寄存器 1.定时器/计数器控制寄存器TCON 2.中断允许控 ...

  6. 51单片机外部中断的使用以及优先级设置

    51单片机中断的使用及优先级设置 51单片机有两个外部中断,两个定时器/计数器,两个外部中断分别是int0,int1.定时器/计数器分别是t0,t1,还有一个串口中断TI/RI,加起来有五个中断.它们 ...

  7. AVR16单片机--外部中断实验

    一.实验目的 1. 理解单片机中断的概念. 2. 掌握外部中断的编程方法. 二.实验内容 1. 验证课堂例题 编译下载运行课堂例题--"按键次数显示"(INT_EX1)和" ...

  8. 51单片机按键控制数码管0~9_51单片机外部中断

    前面为大家介绍的点亮LED灯.数码管.按键只用到了51单片机的IO资源,我们要是仅仅用单片机点灯.操作数码管,那可真是大才小用了.这些都只是51单片机资源的冰山一角,51单片机还有好多的功能,我后面将 ...

  9. 一起学mini2440裸机开发(十)--mini2440外部中断实验

    我今天一整天都在试着将TQ2440的那种处理中断的方法(即安装中断向量表)移植到MDK中的mini2440,但是一直没成功,这种方法一直没成功,后来又想,还是先从最简单的开始吧,就是不利用中断向量表, ...

最新文章

  1. 字节跳动实习生提出实例分割新方法:性能超过何恺明Mask R-CNN
  2. C#-Stmp发邮件
  3. 订阅基础:RSS、ATOM、FEED、聚合、供稿、合烧与订阅
  4. nginx loaction
  5. 网络协议文档阅读笔记-Introduction to DTLS(Datagram Transport Layer Security)
  6. odoo10参考系列--ORM API 三(字段、继承与扩展、域和更新到新API)
  7. iwlist/iwconfig/iw命令
  8. Struts2——知识点:Action Implements SessionAware
  9. 十几位资深架构师,整理了最新架构师学习体系,分享给大家......
  10. 计算机老年学校讲义,天津老年大学计算机类教学大纲
  11. 用 Python 写个消消乐小游戏
  12. Codeforces 474B. Worms
  13. 如何从头搭建一个搜索引擎_pylucene,分词,语言编码问题
  14. 每日下载次数限制php,织梦实现会员限制用户单日下载软件资源的上限方法
  15. 【unity】FPS快速实现全息瞄准镜
  16. 信息学奥赛一本通 1400:统计单词数 | 1954:【11NOIP普及组】统计单词数 | OpenJudge NOI 1.12 05 | 洛谷 P1308 [NOIP2011 普及组] 统计单词数
  17. MWORKS来了(一)| 体验焕然一新的智能建模
  18. 计算机高级系统设置无法设置,win10系统打开高级设置的详细方法
  19. SIM卡插入检测原理
  20. unity3d 摄像机抖动情况和解决方案汇总

热门文章

  1. 你真的认为自己熟练Python?带你一篇文章 查漏补缺,感受自己离深入掌握 Python 还有多远。
  2. HSV颜色分割,RGB与HSV颜色空间的关系
  3. 从流水线工人,到谷歌上班的程序媛,一位湖南娄底妹子的励志故事...
  4. AIX下创建jfs2文件系统并挂载到固定目录
  5. 汇编语言AX,BX,CX,DX寄存器
  6. 汇编语言mov al,0c5h,汇编语言读书笔记 Day 04
  7. STM32 USB基础知识
  8. 设为首页,收藏本站代码
  9. 计算机世界英语作文,计算机(Computers)
  10. python实现c语言编译器安卓版_c语言编译器ide下载app-c语言编译器ide软件下载v1.5.1 安卓版-2265安卓网...