1.另一个外部中断
前面两讲都是围绕外部中断0(P3.2的功能)来讲解,这里我们也还有一个外部中断1(P3.3的功能)。P3.3要想实现上一讲的功能只需杜邦线接下面的IO端口即可
代码就是把“EX0”改为“EX1”,“IT0”改为“IT1”。
interrupt后面的0要改为2,函数名我们改为“EXTI1_IRQHandler()”
#include #include void main() { IT1 = 1; //下降沿触发模式 EX1 = 1; EA = 1; LED_Init();//初始化LED硬件模块 while(1); } void EXTI1_IRQHandler() interrupt 2 { LED2=!LED2; } 再次提醒,杜邦线的一头接的是P3.3。 至于interrupt后面的数字为什么要为2,大家先熟悉这张图了解一下先 更多中断知识的概念参考《手把手教你学51单片机》文档6.5节。 2.按键触发中断 我们每次要把P3.2和P3.3外部拉低或释放,都需要拔插杜邦线,这样太麻烦,我们可以用按键来取代这些拔插动作,按键按下不放就相当于一直拉低,跟杜邦线一直插着GND一个效果,松开按键就跟杜邦线没插GND一样。 可是P3.2和P3.3没有直接相连的按键,不过没关系,我们把杜邦线这样接,让P3.3和P2.3一起相连,K4的按键动作可以使P2.3和P3.3同步电平 我们要用到按键,所以别忘了初始化按键模块。 #include #include 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 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 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; } }
上一篇:51单片机-中断函数
下一篇:51单片机-中断的实验现象
推荐阅读最新更新时间:2024-11-16 21:54
推荐帖子
- 【基于ESP32-S2-Kaluga-1的物联网室内环境监测仪】开发环境体验-Arduino
- 乐鑫官网提供了对arduino的支持 https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html 步骤是: 下载支持包:https://github.com/espressif/arduino-esp32.git 安装到路径:/hardware/espressif/esp32 然后使用git命令执行:gitsubmoduleupdate--in
- dql2016 DigiKey得捷技术专区
- MSP430F149小系统开发板实现USART数据接收中断
- //******************************************************************************//MSP-FET430P140Demo-USART0,Ultra-LowPwrUART2400EchoISR,32kHzACLK////Description:Echoareceivedcharacter,RXISRused.IntheMainloopUART0//ismad
- fish001 微控制器 MCU
- STM32使用DMA时当前的内存地址应该怎么获得?(已解决)
- SxM0AR是设置的内存地址,如果DMA使用循环读取内存地址应该是在SxM0AR到SxM0AR+数组长度之间变化我读取了SxM0AR,这个地址是固定的,在程序运行时不会动态变化那么如果想知道当前DMA正在向哪个内存地址写入数据应该如何获取这个地址?STM32使用DMA时当前的内存地址应该怎么获得?(已解决)NDTR
- littleshrimp stm32/stm8
- 高速放大器设计三大常见问题,德州仪器帮您攻克!
- 在使用高速放大器进行设计时,一定要熟悉其通用的规格并了解其特定概念。在本文中,高速放大器是指增益带宽积(GBW)大于或等于50MHz的运算放大器(opamps)。(这些概念也适用于低速器件。)以下设计师在使用高速放大器时遇到的一些常见问题。问:为什么某些高速运算放大器具有最小增益规格?答:失补偿的运算放大器具有闭环最小增益稳定规格,但与单位增益稳定的同类产品相比,在相同电流消耗下,其可提供更大的GBW和更低的噪声。失补偿仅表示Aol(开环增益)
- alan000345 模拟与混合信号
- 我的F28035是怎么回事?
- 编译器:CCSV5目标IC:F28035现象:正在debug的,把文件修改一下又重新装入时,出现了无法装入的现象,后又重新启动电脑,再次DEBUG,还是如此,后来无意中看了下面的红字,真想~~呜呜!0x3f7ff6处没写什么啊,CMD文件中不用这部分的。 我的F28035是怎么回事?看到了,要用这个的,我在程序中没有用FLASHA,也没对它擦除,是不是这个原因?是不是也把BEGIN的位置也改一下呢? 原来,为了避开经常使用的FLASH
- dontium 微控制器 MCU
- 正从51向msp430过渡,请各位给点意见或指导
- 正从51向msp430过渡,请各位给点意见或指导,请大家积极分享心得,谢谢正从51向msp430过渡,请各位给点意见或指导买块开发板学习,不要舍不得花钱~~要说开发板,launchpad才4.3美刀,很便宜。然后把外设都使用一遍就基本会了,有51基础,430很容易上手留意EEWorld的相关团购,呵呵……
- iceiceice1 微控制器 MCU
设计资源 培训 开发板 精华推荐
- LTM4632IY 2 模块并联、3.6V 至 15V 输入、1.2V/6A VDDQ、0.6V/±6A VTT 和 10mA VTTR 设计的典型应用电路
- LD2981CM33TR 3.3 Vout超低压降稳压器典型应用
- REF193 精密微功耗、低压差电压基准的典型应用
- LT1021DIN8-5 具有全调整范围的精密电压基准的典型应用
- CP2102制作的ESP32烧录器
- MC33072ADR2G 低压快速数模转换器的典型应用
- stm32_lcd1602_adxl345
- 智能酒精度测量系统
- 用于标准DIL24插座的LSM6DSO32X适配器板
- SI82XX-KIT,Si8235 评估板,2 输入,4A,5 kV 双 ISO 驱动器