5.外部中断测脉冲个数

发布日期:2020-12-26 09:10:09 来源:网络转载

1.外部中断的常用功能

外部中断经常用来记录外部脉冲的个数,也就是当我们使用外部中断1时,如果想记录自身单片机的某个引脚的下降沿个数,只需用杜邦线把这个引脚和P3.3连接即可。

比如P2.3引脚产生这样的电平无规律跳转,则下降沿的个数为5

6.13.png

所以我们就用外部中断1来实现记录K4按键从按下到松手的抖动过程中经历了多少个下降沿,把下降沿的个数显示在数码管上。

 

2.程序思路

我们定义一个16位的全局变量pulse用来记录P2.3下降沿的个数,在中断函数中的任务就是简单的pulse自加,因为引脚遇到下降沿就会进入中断函数。

在主函数里就是负责数码管显示即可。

 

3.代码

#include <reg52.h> 
#include <function.h>//详见第六章第8讲

u16 pulse=0;
void main()
{  
    u16 x,PULSE_buf;
    IT1 = 1;   //下降沿触发模式
    EX1 = 1;
    EA  = 1;
  
    LED_Init();//初始化LED硬件模块 
    KEY_Init();//初始化按键功能模块
    ShowNumber(pulse);
    while(1)
    {
        SEG_Scan();  
        if(PULSE_buf!=pulse)ShowNumber(pulse);//pulse不再是前一次的值,也就是pulse数值更新了,所以数码管缓存区也要更新pulse的数值以便显示出来
    
        x++;
        if(x>=50)//隔一段时间过来记录此时的pulse数值
        {
            x=0;
            PULSE_buf=pulse;
        }
    }
}
 
//请把P3.3和P2.3用杜邦线连接起来
void EXTI1_IRQHandler() interrupt 2
{
    pulse++;
}

大家多按几次K4,发现按下后松手的一个动作里有时pulse就自加了几次,显示在数码管上的数加了好几下。

 

4.稳定测试

我们再用P2.3提前设定好会产生多少个脉冲,然后观察数码管显示的是不是我们设定好的脉冲数。这里我们让P2.3跳变电平15次,看看数码管显示的数值是多少。

#include <reg52.h> 
#include <function.h>//详见第六章第8讲

u16 pulse=0;
void main()
{  
    u8 i=0;
    IT1 = 1;   //下降沿触发模式
    EX1 = 1;
    EA  = 1;
  
    LED_Init();//初始化LED硬件模块 
    KEY_Init();//初始化按键功能模块
  
    while(i<15)//让P2.3产生脉冲数,然后结束循环
    {
        KEY4=!KEY4;
        i++;
        delay_ms(1);  //让电平保持的时间多一点
    }
  
    ShowNumber(pulse);//更新数码管缓存区内容
  
    while(1)
    {
        SEG_Scan();   //显示脉冲数  
    }
}
 
//请把P3.3和P2.3用杜邦线连接起来
void EXTI1_IRQHandler() interrupt 2
{
    pulse++;
}

数码管显示的是8,画出状态图一目了然!

6.14.png

拔了杜邦线再复位开发板就是显示0了。

关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。