单片机技术(关于端口中断)

端口组中断核心代码关键点(CC2530 适用)

一、基础定义

  1. 端口 / 引脚宏定义:明确目标 IO 口(灯 / 按键),格式#define 名称 端口引脚

    运行

    复制代码
    #define 灯1 P1_0   // 例:D7对应P1_0
    #define 按键1 P0_1 // 例:K4对应P0_1
    #define 按键2 P0_4 // 例:K5对应P0_4
  2. 中断向量:对应端口组,直接使用头文件宏定义(避免记地址)

    • P0 端口:P0INT_VECTOR
    • P1 端口:P1INT_VECTOR
    • P2 端口:P2INT_VECTOR

二、初始化核心步骤(通用模板,x 替换 0/1/2)

1. 端口模式配置(PxSEL+PxDIR)

运行

复制代码
// 灯:通用IO+输出模式
PxSEL &= ~(引脚掩码); // PxSEL清对应位→通用IO(非外设功能)
PxDIR |= (引脚掩码);  // PxDIR置对应位→输出(灯初始电平可设,如1=灭)

// 按键:通用IO+输入模式+上拉/下拉(防悬空)
PxSEL &= ~(引脚掩码); // 通用IO
PxDIR &= ~(引脚掩码); // 输入模式
PxINP &= ~(引脚掩码); // 上拉/下拉模式(置1为高阻,根据需求选)
  • 引脚掩码:如 P0_1(bit1)+P0_4(bit4)→掩码0x12(二进制 10010)

2. 中断使能配置(5 步必做)

运行

复制代码
// 1. 引脚级中断使能(PxIEN:对应引脚允许触发中断)
PxIEN |= (引脚掩码); 

// 2. 端口级中断使能(IENx:对应端口组允许中断,查寄存器表:P0=IEN1bit5,P1=IEN2bit0,P2=IEN2bit1)
IEN1 |= 0x20; // 例:P0端口使能(IEN1的bit5)

// 3. 中断触发沿设置(PICTL:bit0=P0触发沿,bit1=P1触发沿,0=上升沿,1=下降沿)
PICTL &= ~0x01; // 例:P0下降沿触发(按键按下触发)

// 4. 清中断标志(防初始化后误触发)
PxIFG &= ~(引脚掩码); // 清引脚标志
PxIF = 0;             // 清端口组标志(IRCON寄存器中)

// 5. 开系统总中断(EA=1,中断总开关)
EA = 1;

三、中断服务函数模板

运行

复制代码
#pragma vector = 端口中断向量 // 如P0INT_VECTOR
__interrupt void 函数名(void) { // __interrupt关键字不可少,函数无参无返回值
    EA = 0; // 关总中断,防止嵌套(关键)
    
    // 1. 按引脚判断中断源(用PxIFG掩码匹配)
    if((PxIFG & 按键1掩码) > 0) {
        // 按键1触发的业务逻辑(如灯翻转)
        灯1 = !灯1; 
        PxIFG &= ~按键1掩码; // 清当前引脚标志(关键,防重复触发)
    }
    if((PxIFG & 按键2掩码) > 0) {
        // 按键2触发的业务逻辑
        灯2 = !灯2;
        PxIFG &= ~按键2掩码; // 清当前引脚标志
    }
    
    // 2. 清端口组标志(关键,允许下次中断)
    PxIF = 0; 
    EA = 1; // 开总中断,恢复响应
}

四、关键注意事项

  1. 标志位清零:引脚标志(PxIFG)和端口组标志(PxIF)必须手工清 0,否则 CPU 反复进入中断;
  2. 总中断控制:中断服务函数内先关(EA=0)后开(EA=1),避免中断嵌套;
  3. 寄存器对应:端口级使能寄存器(IENx)需对应端口,如 P0 对应 IEN1bit5,P1 对应 IEN2bit0;
  4. 头文件:必须包含#include "ioCC2530.h",否则宏定义(如中断向量、寄存器)无效。
相关推荐
深圳市宝华视联17 小时前
Python 读取 IP 视频流简单 Demo
python·嵌入式硬件·opencv·网络协议·tcp/ip·实时音视频·嵌入式实时数据库
恒锐丰科技韩生17 小时前
RB6005A|晶准 单节锂电池内置 MOS 保护芯片 DFN2×3‑8
嵌入式硬件·硬件工程
youshi666818 小时前
stm32-PWR、低功耗模式
stm32·单片机·嵌入式硬件
ACP广源盛1392462567318 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 Serdes 长距离视频传输芯片 GSV5800 在私有化 AI 服务中的价值与应用场景
大数据·数据库·人工智能·嵌入式硬件·矩阵·开源·音视频
Funing718 小时前
STM32 电机动态 PI 控制:从编码器反馈、增量式 PI 到 Matlab 参数拟合与 PWM 输出
stm32·嵌入式硬件·matlab·pi控制算法
云泽80819 小时前
深入浅出 STM32(十八):时钟树、总线与寄存器的底层联动机制
stm32·单片机·嵌入式硬件
米饭不加菜19 小时前
C51 语言参考手册
经验分享·笔记·单片机·嵌入式硬件
深圳市宝华视联20 小时前
院感约束下,手术室音视频布线与设备摆放实施注意事项
嵌入式硬件·音视频·实时音视频·视频编解码·嵌入式实时数据库
科芯创展20 小时前
2.7VIN,5VOUT,360KHz,电荷泵升压芯片,XZ3120
单片机
dozenyaoyida20 小时前
LittleFS 嵌入式文件系统机制拆解与某 RISC-V MCU 实测配置
单片机·嵌入式·文件系统·risc-v·littlefs·flash存储