前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单片机中断—外部中断

单片机中断—外部中断

作者头像
电子工程师成长日记
发布2022-07-21 15:47:47
2.6K0
发布2022-07-21 15:47:47
举报

51系列单片机的中断共有5个,其中外部中断共占两个。外部中断主要通过单片机的引脚P3.3、P3.4接收外部脉冲或高低电平触发CPU中断。与外部中断有关的多功能寄存器为IE、IP、TCON。

单片机的P0.0口接一只LED,按键接在P3.2端口,按键不按时,由于P3.2接有上拉电阻R3,所以P3.2此时为高电平+5V,如果按键按下,P3.2电源地短路,P3.2为低电平,利用外部中断INT0实现按键输入电路的电路具体如图。

为了消除键盘抖动现象,键盘两端并联滤波电容器C4。P3.2是单片机的外部中断的输入端,当按键按下时,让单片机执行外部中断服务程序,在中断服务中完成对LED的控制。

这里没有设置INT0是下降沿触发中断或是低电平触发中断,原因是按键按下,不管产生不产生键抖现象,总能使INT0引脚产生1个下降沿和低电平。如果设置只有下降沿才触发INT0中断,需要利用设置计时器控制寄存器TCON的IT0 = 1位,按键按下是否产生中断,可以利用程序检测TCON的IE0位。利用外部中断触发作为按键输入很好的解决了键盘抖动问题。

代码语言:javascript
复制
#include<reg51.h>
sbit LED0 = P0^0;
sbit key5 = P3^2;
bit i;
void int0_isr(void) interrupt 0   //INT0中断服务函数,INT0的中断号为0
{  
  i = !i;
  LED0 = i;            //INT0中断1次,LED工作状态变化1次
  while(key5 == 0)EX0 = 0;   //按键按下时刻,禁止中断
  EX0 = 1;                  //按键抬起,允许中断
}
void main(void)
{    
  P0 = 0;                  //P0口全为低电平
  EX0 = 1;                //开启INT0中断
  PX0 = 1;               //INT0中断优先,可以省去
  EA = 1;               //开启总中断开关
  IT0 = 0;              //设置外部中断0为低电平有效触发
  while(1);            //等待按键按下,中断发生
}

如果需要多个键盘,把INT0口与I/O口之间用键盘连接,I/O输出低电平扫面信号即可。在数码管动态显示电路中,为了节省硬件资源,可以在INT0口和P2口之间接入键盘,实现8只按键输入。

仿真电路如图:

具体仿真视频如下:

http://mpvideo.qpic.cn/0b78dmaawaaayiaa6emli5pvag6dbmnqacya.f10002.mp4?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子工程师成长日记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档