msp430g2553里的P1口中断问题

2019-03-24 13:29发布

我设置P1.3按键中断,在调试的时候,发觉P1IN默认是0x0020,这个不是我的问题。
我的问题是,当按下按键,松开后判断(P1IN & BIT3)这语句为什么是真。我的理解是松开后P1IN=0x0020,与BIT3按位与应该为0。
我是在LaunchPad板子上采用CCS_V5.1调试的。
程序是想实现按键时间长一点来置换P1.0口,按键时间短就不动作。
如果屏蔽蓝 {MOD}     P1IFG = 0;  这句之后,程序完全不按语法规则跑,我很无语。
但是我按下之后,程序虽然一直在红 {MOD}循环里面,但是P1.0照样能置换。

#include<msp430g2553.h>

typedef unsigned int  uint;
#define keyin    (P1IN & BIT3)
uint num=0,i;
void delay()                          //延时函数
{
    uint j;
    for(j=0;j<5000;j++);
}

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P1IES |= BIT3;                            // P1.3 high-to-low transition
  P1IE |= BIT3;
  P1DIR &= ~BIT3;
  P1OUT |= ~BIT3;
  P1IFG &= ~BIT3;
  
  P1DIR |= BIT0;
  P1OUT |= BIT0;

  P1REN |= BIT3;
      _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/ interrupt
}
#pragma vector=PORT1_VECTOR                        //p1按键中断
__interrupt void P1_ISR(void)
{
    if(P1IFG & BIT3)
    {
        if(keyin == BIT3)   //如果是第一个按键被按下
        {
            if(keyin == BIT3)
            {
               
                while(P1IN & BIT3)       //等待按键放开
                {
                    num++;
                    delay();
                }


                if(num>20000)
                {
                    num=0;
                    P1OUT ^= 0X01;
                    P1IFG = 0;
                }  
            }  
        }
    }
      P1IFG = 0;  
     num=0;
    return;
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
xfzl
2019-03-24 22:35
< :TI_MSP430_内容页_SA7 --> 【在屏蔽掉蓝 {MOD}那句后】如果P1.0被置换,那么中断标志位,也应该被清除的啊。
请问你有没有更好的算法?
谢谢你的回答!

一周热门 更多>

相关问题

    相关文章