历史上的今天
返回首页

历史上的今天

今天是:2024年08月23日(星期五)

正在发生

2021年08月23日 | 51单片机-进一步理解中断函数

2021-08-23 来源:eefocus

1.另一个外部中断

前面两讲都是围绕外部中断0(P3.2的功能)来讲解,这里我们也还有一个外部中断1(P3.3的功能)。P3.3要想实现上一讲的功能只需杜邦线接下面的IO端口即可

6.10.png?imageView2/2/w/550

代码就是把“EX0”改为“EX1”,“IT0”改为“IT1”。

interrupt后面的0要改为2,函数名我们改为“EXTI1_IRQHandler()”


#include  

#include //详见第六章第8讲

 

void main()

{  

    IT1 = 1;   //下降沿触发模式

    EX1 = 1;

    EA  = 1;

   

    LED_Init();//初始化LED硬件模块 

    while(1);

}

  

void EXTI1_IRQHandler() interrupt 2

{

    LED2=!LED2; 

}


再次提醒,杜邦线的一头接的是P3.3。

至于interrupt后面的数字为什么要为2,大家先熟悉这张图了解一下先

6.11.png?imageView2/2/w/550

更多中断知识的概念参考《手把手教你学51单片机》文档6.5节。


2.按键触发中断

我们每次要把P3.2和P3.3外部拉低或释放,都需要拔插杜邦线,这样太麻烦,我们可以用按键来取代这些拔插动作,按键按下不放就相当于一直拉低,跟杜邦线一直插着GND一个效果,松开按键就跟杜邦线没插GND一样。


可是P3.2和P3.3没有直接相连的按键,不过没关系,我们把杜邦线这样接,让P3.3和P2.3一起相连,K4的按键动作可以使P2.3和P3.3同步电平

6.12.png?imageView2/2/w/550

我们要用到按键,所以别忘了初始化按键模块。

#include  

#include //详见第六章第8讲

 

void main()

{  

    IT1 = 1;   //下降沿触发模式

    EX1 = 1;

    EA  = 1;

   

    LED_Init();//初始化LED硬件模块 

    KEY_Init();//初始化按键功能模块

    while(1);

}

  

void EXTI1_IRQHandler() interrupt 2

{

    LED2=!LED2; 

}


3.去抖动


按键似乎没能很灵敏的按一下松手LED2就跳变一次亮或灭的效果,那是因为我们没有延时消抖,一个按键动作就存在好几个下降沿了,导致中断函数被执行了几遍。


在中断函数中加延时就可以消除这种失灵现象了,不过在以后编程里不能在中断函数里使用延时,这样会使程序的执行效率大打折扣,我们本次只是作为测试代码才在中断函数里用延时。


#include  

#include //详见第六章第8讲

 

void main()

{  

    IT1 = 1;   //下降沿触发模式

    EX1 = 1;

    EA  = 1;

   

    LED_Init();//初始化LED硬件模块 

    KEY_Init();//初始化按键功能模块

    while(1);

}

  

//请把P3.3和P2.3用杜邦线连接起来

void EXTI1_IRQHandler() interrupt 2

{

    delay_ms(50);//去抖动

    if(INT1==0)  //P3.3是否还处于低电平的稳定接触状态,INT1已在“#include ”中定义好了

    {

        LED2=!LED2; 

    } 

}


这样就可以达到按下松手一次,LED2的状态只能取反一次的灵敏效果。如果我们一直按着不放,LED2也只是跳变一次而已,有点像不支持连按功能,这是因为“IT1=1;”的原因。


要是改为“IT1=0;”,这样K4按键就有种支持连按的感觉从而LED2就会不停闪烁了。按键按下一直不放就会不停地进入中断函数。


#include  

#include //详见第六章第8讲

 

void main()

{  

    IT1 = 0;   //低电平状态下触发

    EX1 = 1;

    EA  = 1;

   

    LED_Init();//初始化LED硬件模块 

    KEY_Init();//初始化按键功能模块

    while(1);

}

  

//请把P3.3和P2.3用杜邦线连接起来

void EXTI1_IRQHandler() interrupt 2

{

    delay_ms(50);//去抖动

    if(INT1==0)  //P3.3是否还处于低电平的稳定接触状态

    {

        LED2=!LED2; 

    } 

}

推荐阅读

史海拾趣

Global Specialties公司的发展小趣事

为了进一步扩大市场份额,Global Specialties积极实施全球化战略。公司通过与国际分销商和代理商的合作,将产品销往全球各地。同时,公司还参加了多个国际性的电子展会和论坛,与来自世界各地的客户和合作伙伴进行交流和合作。这些举措不仅提升了Global Specialties的品牌知名度,还为公司带来了更多的国际合作机会和客户资源。通过这些努力,Global Specialties逐渐发展成为一家具有全球影响力的电子测试与测量公司。

Bias Power公司的发展小趣事

Bias Power公司深知研发实力是企业发展的核心。因此,公司投入大量资源用于研发工作,建立了完善的研发团队和实验设施。通过不断的技术创新和研发投入,Bias Power公司成功推出了一系列具有竞争力的新产品,巩固了其在电子行业的领先地位。

同时,公司还注重知识产权的保护,积极申请专利,保护其核心技术不被侵犯。这些专利的申请和授权不仅提升了公司的技术实力,还为公司的发展提供了有力保障。

ADPOW公司的发展小趣事

在市场竞争日益激烈的背景下,ADPOW公司深知品质是生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司注重品牌建设,通过广告宣传、参加展会等方式提升品牌知名度和美誉度。这些举措有效提升了公司的市场竞争力。

Dae Ryung Electronic Co Ltd公司的发展小趣事

在快速发展的过程中,Dae Ryung Electronic Co Ltd公司始终注重产品质量和品牌建设。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测等各个环节都进行严格把关。同时,公司还注重品牌形象的塑造和宣传,通过广告宣传、公关活动等方式提升品牌知名度和美誉度。这些努力使得公司的产品在市场上获得了良好的口碑和认可。

Fairchild公司的发展小趣事

近年来,Fairchild公司在全球范围内与众多知名企业建立了合作关系。其中,与华为的合作尤为引人注目。华为作为全球领先的通信设备制造商,对供应商的要求极为严格。然而,Fairchild公司凭借其出色的产品质量、客户支持和公司间的成功合作,从众多供应商中脱颖而出,成为华为的核心合作伙伴之一。华为对Fairchild公司的认可不仅体现在订单量的增加上,还体现在对其产品和服务的高度评价上。

Altera (Intel)公司的发展小趣事

1957年,Fairchild半导体公司在硅谷成立,其背后有一群被称为“八叛逆”的年轻科学家。这八位科学家曾在肖克利半导体实验室共事,但因不满肖克利的管理方式和缺乏研究成果,他们决定离开并自行创业。这群年轻的科学家包括罗伯特·诺伊斯(N. Noyce)和戈登·摩尔(Gordon Moore)等,他们共同创立了Fairchild半导体公司,为硅谷的半导体产业奠定了坚实的基础。

问答坊 | AI 解惑

新人问下简单的问题请高手别笑

我有个疑问 下的资料有的打不开  打开的全是乱码怎么办?…

查看全部问答>

T2T3为何工作在饱和状态?

如图 饱和状态需要两个条件,一个是发射结正偏,另一个是集电结正偏,T2的集电结如何分析是在正偏状态?…

查看全部问答>

wince6.0 camera 应用程序

有谁做过Wince平台上使用的Camera应用程序吗? 功能不需要很强,只要拍个图片,录一段DV就可以了. 我们的驱动已经调试通了,用Wince6.0默认的Windows目录下的CameraDshowApp.exe测试也可以看到一个小图框显示Camera捕获到的动态影像. 现在摄像头(ov7 ...…

查看全部问答>

单片机初学者,请问几个基本的问题,感谢~

我现在用的是MPLAB IDE C18编译器,芯片采用的是PIC18F4620,请问: 1、我要在程序中判断RB0引脚是高电平还是低电平,应该怎么引用? 2、如果要给RC0-RC7赋值,一次性赋值,又该怎么引用? …

查看全部问答>

高分求教:vs2003与wince4.2的连接问题,郁闷的不行了

PDA:处理器:Intel   XSCALE-Intel(R)   PXA255(据说是ARM720,ARMV4I),系统:CE.NET     4.2 通过ActiveSync,EVC可以正常连接和传输,VS2003一直联不上,提示说没有物理连接。 compactFramework1传 ...…

查看全部问答>

请教,vs2005无法显示安装的SDK

我的VS2005是TEAM EDITION,我用PLATFORM生成了一个SDK(***.MSI),无论是默认安装还是安装到VS2005的SMARTDEVICE/SDK目录下面,我都无法在VC++的智能应用程序设备里面看到WINCE5.0 请教这个应该如何解决?…

查看全部问答>

请问ST7MCURESET脚是设置成push-pull还是opendrain?

                                 手册上面写的是不可以设置为Input,那设置为output的那种模式呢?…

查看全部问答>

各位前辈 我用的是NIOS II11.0 现在有点问题想麻烦大家看看 我很是纠结啊

我用的是nios ii11.0版本,现在需要自己创建目标板FLASH编程设计,但是我找不到 nios ii sdk shell这项啊 又没法进行啦 求各位的指导了。…

查看全部问答>

开关电源常规测试项目

开关电源常规测试项目,做电源的需要了解下,其中有详细的测试方法与步骤。…

查看全部问答>

恩智浦GreenChip电源IC系列确立低负载下效率和空载待机功耗的新标准

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 GreenChip SPR TEA1716是业内首款达到EuP Lot 6要求的组合PFC和LLC的转换器 …

查看全部问答>