在下面的代码中、我希望使用其中一个板载开关来切换 P2.0的方向和输出。 注释掉的部分是我尝试过的内容
问题是、当我按下板载开关时、我使用 P2.0驱动的 LED 将关闭、但只有在我按下开关时才会关闭。 这与切换开关的愿望不一致。 在调试模式下、ISR 看起来根本就没有调用。
我只能假设我配置了错误的内容、但我不确定我没有完成什么。 在另一个程序中、使用初始化代码按开关1可正确复位矩阵。 我在下面也包括了该代码。
#include // main int main (void) { WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 PM5CTL0 &=~LOCKLPM5;//解锁电源管理 P1DIR &=~BIT1; P1REN |= BIT1; P1OUT |= BIT1; P1IES |= BIT1 ;= BIT1;= BIT1;= BIT1;= BIT1;=~1;PITG;= BIT1 P1IE |= BIT1; P2DIR |= BIT0;
P2OUT |= BIT0; __ENABLE_INTERRUPT (); while (1) { __LOW_POWER_MODE_3 (); } 返回0; } /*Button Interrupt*/ #pragma vector=Port1_vector _interrupt void Port_1 (void) { if (P1IFG & BIT1){ P2DIR ^= BIT0;
P2OUT ^= BIT0; } P1IFG &&~BIT1; __LOW_POWER_MODE_OFF_ON_EXIT (); /*switch (__evo_in_range (P1IV、P1IV_P1IFG7)) { 案例 P1IV_NONE:break;//向量0:无中断 案例 P1IV_P1IFG0:中断;//矢量2:P2.0 案例 P1IV_P1IFG1://bit P1IE &=~BIT1;//禁用中断 P1IFG &=~BIT1;//CLEAR 标志 P2DIR ^= BIT0;//切换
P2OUT ^= BIT0; 中断; 案例 P1IV_P1IFG2:中断; 案例 P1IV_P1IFG3:break; 案例 P1IV_P1IFG4:中断; 案例 P1IV_P1IFG5:中断;//矢量12:P2.5 案例 P1IV_P1IFG6:中断;//矢量14:P2.6 案例 P1IV_P1IFG7:中断;//向量16:P2.7 默认值:break; }// /* if (P1IFG & BIT1)//如果按键1导致中断 {P2DIR ^= BIT0;
P2OUT ^= BIT0; P1IFG &&~BIT1; //_LOW_POWER_MODE_OFF_ON_EXIT ();//在选择低功耗模式后重新启用此功能? }*/ //结束中断支架 }
第二位代码:
#include #define BUTTON1 BIT1//Globals unsigned int matrix [5]={0、0、0、0、0}; //=================== =================== int main (void){ //volatile unsigned int I; WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 P1DIR &=~BUTTON1; //输入 P1OUT |= BUTTON1; //为上拉/下拉电阻器提供'1'以便它上拉 P1REN |=按钮1; //启用上拉/下拉 PM5CTL0 &=~LOCKLPM5; //从电源管理器解锁端口,导致中断! P1IES |=按钮1; //下降沿上的中断 P1IFG &=~BUTTON1; //清除中断标志 P1IE |=按钮1; //启用中断 _enable_interrupt (); while (1) //连续循环 { _low_power_mode_3 (); //将进入睡眠状态,但保持 ACLK 运行 } 返回0; } //================================= 中断========================================= //端口1 #pragma vector=Port1_vector 的中断服务例程 //关联函数。 具有中断矢量 _interrupt void Port_1 (void) // ISR 的名称 { if (P1IFG & Button1){ //按钮1引起中断 //计数= 0; 矩阵[0]= 0; 矩阵[1]= 0; 矩阵[2]= 0; 矩阵[3]= 0; 矩阵[4]= 0; P1IFG &=~BUTTON1; //清除 P1 Button1的中断标志 __LOW_POWER_MODE_OFF_ON_EXIT(); }