学习冲哥STC32G教学视频 https://www.stcaimcu.com/thread-323-1-1.html
第15集 IO中断学习笔记
io--P35 的初始化,低电平触发测试程序,这是STC32G独有的功能,上升沿、下降沿暂不推荐使用!
- void P3Exit_Init(void)
- {
- P3IM0 = 0X00;
- P3IM1 = 0XFF;
- P3INTE = 0X20;
- }
-
复制代码
P54 引脚的高电平触发外部中断,类比如下
- // 定义一个全局变量用于中断触发计数
- unsigned int interrupt_count = 0;
-
- /**
- * @brief P54引脚外部中断初始化函数(高电平触发)
- * @note 配置P54为高电平触发的外部中断
- */
- void P5Exit_Init(void)
- {
- // 关闭总中断(防止初始化过程中触发中断)
- EA = 0;
-
- // P5口中断模式配置
- P5IM0 = 0XFF; // P5口中断模式0寄存器,全1
- P5IM1 = 0XFF; // P5口中断模式1寄存器,全1 → 配置为高电平触发中断
- P5INTE = 0X10; // 0001 0000 → 使能P54引脚的外部中断(bit4)
-
- // P54引脚配置为输入模式(必须配置,否则中断可能异常)
- P5M1 |= 0X10; // P54配置为高阻输入
- P5M0 &= ~0X10; // 配合P5M1=1,P5M0=0,设置为输入模式
-
- // 清除P5口中断标志
- P5IF = 0X00; // 清除所有P5口中断标志位,避免初始化后立即触发
-
- // 开启总中断和外部中断总开关
- EX5 = 1; // 开启P5口外部中断总开关
- EA = 1; // 开启总中断
- }
-
- /**
- * @brief P5口外部中断服务函数
- * @note P54高电平触发时进入此函数
- */
- void P5_INT(void) interrupt 21 // STC32G的P5口中断号为21
- {
- // 等待中断稳定(消抖)
- delay_ms(10);
-
- // 确认P54为高电平
- if(P54 == 1)
- {
- interrupt_count++; // 中断计数加1
- // 可以在这里添加中断触发后的操作,比如翻转LED
- P10 = !P10; // 示例:翻转P10引脚电平(可接LED)
- }
-
- // 清除P5口中断标志(必须)
- P5IF = 0X00;
- }
-
- /**
- * @brief 毫秒级延时函数(STC32G 24MHz主频)
- * @param ms 延时毫秒数
- */
- void delay_ms(unsigned int ms)
- {
- unsigned int i, j;
- for(i = ms; i > 0; i--)
- for(j = 12000; j > 0; j--);
- }
-
- /**
- * @brief 主函数
- */
- void main(void)
- {
- // 初始化P10为输出(接LED测试)
- P1M1 &= ~0X01;
- P1M0 |= 0X01;
- P10 = 0; // 初始低电平
-
- // 初始化P54外部中断
- P5Exit_Init();
-
- // 主循环
- while(1)
- {
- // 主循环可执行其他任务,中断不影响
- // 例如:每秒打印一次中断计数(需串口初始化)
- delay_ms(1000);
- }
- }
复制代码
|