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-11 10:31
推荐帖子
- 如何为便携式系统选择电容和电感元件(下)
- 设计人员在考虑无源器件时,他们想到的是电感电容的生产容限,一般为±20%或±10%。这在理论上是对的,但在实际应用中却不然。本文介绍电容电感易受影响的一些参数以及系统设计人员必须了解的知识,并讨论如何为最小但最高效的便携式电源系统解决方案选择外部元件。选择电感为便携式电源应用选择电感,需要考虑的最重要的三点是:尺寸大小、尺寸大小,第三还是尺寸大小。移动电话的电路板面积十分紧俏珍贵,随着MP3播放器、电视和视频等各种功能被增加到电话中时,尤其如此。功能增加也将增加电池的电流消耗量。因
- 咖啡不加糖 分立器件
- 刚学单片机开发,请给个绿色破解版的开发工具吧,谢谢
- 刚学单片机开发,请给个绿色破解版的开发工具吧,谢谢wensoft80@sina.com刚学单片机开发,请给个绿色破解版的开发工具吧,谢谢一般只要在国内服务器上下到的KEIL里面都带完全版的注册码多找找看里面的文件KEIL,eclipse单片机开发?51,avr,pic?好多的,不知你学那种?y原来这么多。。。只要用好破解补丁就可以了,这种资源太不稀缺了
- yhy_042 嵌入式系统
- TMS320F28335通用输入/输出口GPIO相关寄存器介绍
- 1、GPxMUX寄存器(功能选择寄存器)每个I/O口都有一个功能选择寄存器,功能选择寄存器主要用于选择I/O工作在特殊功能还是通用数组I/O模式。在复位时,所有GPIO配置成通用数字模式。1)如果GPxMUX.bit=0,配置成通用数字I/O功能;2)如果GPxMUX.bit=1,配置成特殊外设功能口(如SCI、CAN);I/O的输入功能和外设的输入通道总是被使能的,输出通道是通用数组I/O和特殊外设复用的。如果引脚配置成通用数组I/O功能,相应的外设功能将被禁
- fish001 DSP 与 ARM 处理器
- 谁有tornado2.2 for mips ?
- 小弟刚刚学习vxworks,要作MIPS的BSP开发,请问谁有tornado2.2formips呀?谁有tornado2.2formips?我能够用forarm的版本,修改下交叉编译器来作开发MIPS的BSP用吗?如果能够,我怎么作呀?兄弟,真的不可以的啊。编译器的指令不同啊。同意楼上的!楼主你为啥一定要用mips呢?现在市面上arm的开发板很多啊我手头有一块板子呀。呵呵!不行,我也就死心了。有TornadoforMIPS,不过要自己慢慢找,我也要to
- zwjiang 嵌入式系统
- 新建的DSP工程总会碰到一个警告
- 使用的是28335的板子,新建工程添加头文件和源文件后不编写任何程序都会出现一个纯文本查看复制代码Linkingwarning#10247-D:creatingoutputsectionramfuncswithoutaSECTIONSspecification这个警告会有什么影响吗,怎么去除呢新建的DSP工程总会碰到一个警告头文件和源文件都是从controlsuite中导入的C:\ti\controlSUITE\device_support\
- fraisty DSP 与 ARM 处理器
- 【2024 DigiKey 创意大赛】AI全功能环境监测站
- 一、作品简介1.1作品功能介绍本次创意大赛中,我设计并实现了一个AI全能环境监测站。该设备通过集成多款高精度气体传感器,能够全面监测环境中的多种气体成分,如温湿度、空气质量、二氧化碳和各类有害气体等。所有环境数据不仅可以实时显示在MatrixRGB点阵屏上,还能够通过AdafruitIO云平台上传,实现多设备多应用间的环境监测数据共享。用户可以通过网页端查看不同环境指标的实时数据及其变化趋势,获取清晰的历史数据图表和变化曲线。为了增强用户体验,该系统还加入了智
- MioChan DigiKey得捷技术专区
设计资源 培训 开发板 精华推荐
- LT8570EDD-1 1.2MHz 电荷泵的典型应用从单个锂离子电池产生 ±12V
- LTC3426ES6 演示板,1.2MHz 大电流升压转换器,Vin=1.8V-4.2V,Vout=5V@400mA
- 使用 ON Semiconductor 的 LM2575-12 的参考设计
- AM6TW-4815DH35Z ±15V 6 瓦双输出 DC/DC 转换器的典型应用
- LT3692AEUH、具有启动电流限制的 12V 至 3.3V 和 2.5V 降压转换器的典型应用电路
- LF60ABDT-TR 6V 顺序极低压降稳压器多输出电源的典型应用
- ADR434B 4.096 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- LT1117CM 调节固定稳压器输出电压的典型应用
- LTC1727ES8-2.5 三路电源监视器的典型应用
- STC8G2K32S4_系统板