工具/软件:Code Composer Studio
我正在尝试让 MSP430使用1引脚的输出作为另一引脚的输入。 但是、我似乎无法使代码正常工作。 我的程序非常简单、如下所示。 未显示的是用于去抖的简单延迟环路和外部电路、后者只是一个将 P8.4连接到 P2.1的按钮。 当我按下它时、由于8.4为高电平、2.1变为高电平。 然后、我有一个 ISR、当2.1变为高电平(或者、严格地说、由于我选择了下降沿中断、从高电平变为低电平)时、该 ISR 应该触发。 此 ISR 应切换板载 LED。 但是、LED 不会亮起。 我不确定是对引脚正确使用输入功能、还是在其他地方出错。
void main (void)
{
WDTCTL = WDTPW | withold;
P1DIR |= BIT0;
P1OUT = 0x00;//调用前不输出
P2DIR |= BIT6 | BIT7; // P2.6和 P2.7设置为输出
P2OUT = 0x00;//在需要之前确保它们没有输出。
P3OUT = 0x00;
P8OUT = 0x00;
P8DIR |= BIT4 | BIT5 | BIT6 | BIT4;
P8REN |= BIT4 | BIT5 | BIT6 | BIT7;
P8OUT |= BIT4 | BIT4 | BIT6 | BIT4;
P2DIR &=~(BIT1 | BIT2 | BIT3 | BIT4);
P2REN |= BIT1 | BIT2 | BIT3 | BIT4;
P2IN &=~(BIT1 | BIT2 | BIT3 | BIT4);//
P2IE |= BIT1 | BIT2 | BIT3 | BIT4;//中断开启1-4
P2IES |= BIT1 | BIT2 | BIT3 | BIT4;//下降沿
P2IFG &= 0x00f;//清除中断标志
PM5CTL0 &=~LOCKLPM5;
while (1){//go forever
}
#pragma vector = port2_vector //关联函数。 具有中断矢量
_interrupt void Port_2 (void) // ISR 的名称
{
开关(__evo_in_range (P2IV、P2IV_P2IFG7))
{
//我使用 P2.1-2.4作为输入。
案例 P2IV_NONE: break; //向量 0:无中断
案例 P2IV_P2IFG0:中断; //向量 2:P2.0
案例 P2IV_P2IFG1:
P1OUT ^= BIT0;//切换 LED
P2IFG &=~BIT1;//CLEAR 标志
P2IE &=~(BIT1 | BIT2 | BIT3 | BIT4);//禁用中断
delay();
P2IE |= BIT1 | BIT2 | BIT3 | BIT4;//启用中断
中断;
案例 P2IV_P2IFG2:
中断;
案例 P2IV_P2IFG3:
中断;
案例 P2IV_P2IFG4:
中断;
案例 P2IV_P2IFG5:中断; //矢量12:P2.5
案例 P2IV_P2IFG6:中断; //向量14:P2.6
案例 P2IV_P2IFG7:中断; //向量16:P2.7
默认值:break;
}
}