外部中断应用:按键
1.前言与基础知识2.GPIO通用输入输出端口3.GPIO输出应用:流水灯4.GPIO输出应用:数码管5.GPIO输入应用:按键6.中断
7.外部中断应用:按键
8.时钟源9.基本计时器TIM4:STM8的定时器/计数器资源综述10.单片机线反转法实现矩阵键盘11.高级计时器TIM1:概述与外部时钟模式实现外部脉冲计数12.高级计时器TIM1:输入捕获功能功能实现信号周期与占空比测量13.高级计时器TIM1:STM8的PWM输出功能实现呼吸灯14.STM8的ADC模数转换器15.嵌入式串行通信导论16.UART异步串行通信协议17.SPI同步串行通信协议18.I2C同步串行通信协议19.STM8的看门狗20.单片机的系统功耗控制/电源模式管理/AWU自动唤醒21.STM8的储存器中断按键原理
- 在https://www.cnblogs.com/untit1ed/p/18560244用软件查询实现按键功能的程序设计中,程序不停地检测按键状态而不能进行其它操作,造成了工作效率的降低与资源的浪费
- 利用中断实现该功能,只在按键产生中断触发信号时执行中断服务程序中的按键程序,以此节约资源
代码实现
-
设置PA组为按键,当按下时以改变LED状态为现象
-
配置按键及其中断触发参数
void IO_interrupt_Init(void)//触发参数配置函数 { //配置PA3,PA4,PA5,PA6这些与按键相连的端口 //具体配置哪些端口请看你所用开发板的原理图中,哪些端口与“独立按键”相连 PA_DDR = 0x87; //配置为0输入模式 PA_CR1 = 0x78; //寄存器1配置为1启用上拉输入 PA_CR2 = 0x78; //寄存器2配置为1启用中断 //配置中断触发参数 //端口A对应控制位PAIS[1:0],按下按键为电平变化为高至低电平 EXTI_CR1 = 0x02;//0000 0010;配置为10下降沿触发 //控制端口A的中断源EXTI0的向量号为3,因此要配置VECT3SPR[1:0] ITC_SPR1 = 0xC0;//1100 0000; 11配置为最高级 }
-
中断服务函数
STM8单片机的GPIO中断通常是共用一个向量入口,这意味着当任何一个GPIO引脚产生中断时,程序都会跳转到同一个中断服务函数,如果需要检测连接到同一组GPIO端口的按键具体是哪一个被按下,可以在中断服务函数中进行轮询
#pragma vector = 0x05//EXTI0中断号为3,偏移2得5 __interrupt void PortA_LED_IRQHandler()//中断服务函数 { delay(50);//消抖 //将PA_IDR_IDR3这些寄存器通过宏定义命名为key0方便使用 if(key0==0){ led0 = ~led0; //LED0状态取反 } if(key1==0){ //轮询法检测按下的是哪个按键,其下省略 } }
-
主函数
int main( void )//主函数 { GPIO_LED_init(); IO_interrupt_Init(); asm("rim");//将main程序优先级降为0,开启总中断 while(1);//在没有发生中断时,程序将一直执行while内语句,让程序不结束 }
本文来自博客园,作者:无术师,转载请注明原文链接:https://www.cnblogs.com/untit1ed/p/18560252
本文使用知识共享4.0协议许可 CC BY-NC-SA 4.0
请注意: 特别说明版权归属的文章以及不归属于本人的转载内容(如引用的文章与图片)除外
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?