好久没有用MSP430,上学期接触到开源硬件,觉得非常有趣。最近想拿到从老师拿了一块(发现老师有好多),试着玩一下。我通过中断方式来按键,控制P1口的其他引脚输出连接到7个LED灯。按一次键盘就取一次反。应该是挺简单的。没想到被上拉电阻坑到了,因为之前用的是F169不能配置上拉下电阻。
原来的程序是这样的
#pragma vector = PORT1_VECTOR
__interrupt void KEY(void)
{
unsigned int i;
for(i=0;i<65535;i++);
if(P1IFG&BIT3)
{
P1OUT ^= 0xff;
P1IFG &= ~0x08;
P1REN |= BIT3;
}
if(!(P1IFG&BIT3))
P1IFG &= ~0x08;
}
复制代码发现每次只进一次中断,然后就不再进中断,一直以为是标志位没有清零。弄了好久。突然想到上拉电阻,因此不能对P1OUT中的BIT3随意设置。需要保持为高电平。上面的程序就是犯了这样的错误。
改正后就能够再次进中断
#pragma vector = PORT1_VECTOR
__interrupt void KEY(void)
{
unsigned int i;
for(i=0;i<65535;i++);
if(P1IFG&BIT3)
{
P1OUT ^= BIT0 + BIT1 + BIT2 + BIT4 + BIT5 +BIT6 + BIT7;
//P1OUT ^= 0xff;
P1IFG &= ~0x08;
P1REN |= BIT3;
}
if(!(P1IFG&BIT3))
P1IFG &= ~0x08;
}
复制代码
大家用到这个时候需要小心,此外因为内部可以配置上拉电阻,不要再外接电阻。如果接电阻可能会有影响。