请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR5994 工具/软件:Code Composer Studio
您好!
我目前有一个程序、使用板载按钮作为中断来切换 LED、但出于某种原因、在按下按钮之前会调用中断功能。
我使用命令 P5IFG &=~(BIT4 + BIT6)在 IO 引脚解锁之前清除中断标志、因此我不确定发生这种情况的原因。 有人能解释一下为什么会发生这种情况吗?
我的程序如下所示:
#include volatile int flag1 = 0; volatile int flag2 = 0; /** * main.c */ int main (void) { WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 //将未使用的引脚配置为最低功耗状态(输出方向、连接低电平) P1OUT = 0; P1DIR = 0xFF; P2OUT = 0; P2DIR = 0xFF; P3OUT = 0; P3DIR = 0xFF; P4OUT = 0; P4DIR = 0xFF; P5OUT = 0; P5DIR = 0xFF; P6OUT = 0; P6DIR = 0xFF; P7OUT = 0; P7DIR = 0xFF; P8OUT = 0; P8DIR = 0xFF; PJOUT = 0; PJDIR = 0xFF; //启用内部上拉/下拉电阻器 P5REN |= BIT5 + BIT6; //需要设置上拉高电阻器 P5OUT |= BIT5 + BIT6; //将 P5.5和 P5.6设置为输入引脚 P5DIR &=(~BIT5); P5DIR &=(~BIT6); //下降沿 P5IES = BIT5 + BIT6; //清除中断标志 P5IFG &=~(BIT5 + BIT6); //启用中断 P5IE = BIT5 + BIT6; PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式 //激活先前配置的端口设置 _enable_interrupt (); while (1){ if (Flag1 = 1){ P1OUT ^= BIT0; Flag1 = 0; } if (flag2 ==1){ P1OUT ^= BIT1; 标志2 = 0; } } } //端口5中断服务例程 #pragma vector=PORT5_vector __interrupt void Port_1 (void){ Flag1 = 1; 标志2 = 1; P5IFG &=~(BIT5 + BIT6); }
谢谢、
John