打印

MSP430 按键程序搞不定了,仿真结果想不明白,求拯救

[复制链接]
2121|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szn1423|  楼主 | 2012-12-20 11:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
void main()
{
  WDTCTL=WDTPW+WDTHOLD;
  FLL_CTL0|=XCAP18PF;             //设置晶振匹配电容为18pf左右
  P1IES|=BIT5;
  P1IE|=BIT5;
  P1IFG=0;
  P3DIR|=0XFF;
  P4DIR|=0XFF;                 
  P3OUT|=0XFF;
  P4OUT|=0XFF;                      //P4.0设为输入,模式灯亮
  P4OUT&=~BIT0;                    //开模式指示灯
  
  BTCTL=BT_ADLY_250;
    IE2=BTIE;                        //允许BasicTimer中断
  _EINT();                         //允许总中断
  LPM3;
    while(1)
  {
  }

//............按键中断........................//      
#pragma vector=PORT2_VECTOR         //P1口中断源
__interrupt void P1_ISR(void)
{
  switch (P1IFG)
        {  
         case BIT5: key_status=1;  //按键进入防抖状态
              key_waitkey=1; //按键进入工作模式
              P4OUT^=BIT4;
                            break;
         default:       P1IFG &= ~0xe0; // P1.5-P1.7 IO口中断标志位清除
              break;           
        }      
    P1IFG=0;            //  IO口中断标志位清除
  LPM3_EXIT;
}

程序中断能进,但是switch(P1IFG)进不去case BIT5,从仿真器看P1IFG的值,无按键的情况下是0x01,有按键是0xe1;这是什么情况啊,求大神拯救。

相关帖子

沙发
nbsmaps| | 2012-12-20 11:39 | 只看该作者
纯软件仿仿真?没有用硬件?不用硬件的话值读进来的是随机的,若用了硬件的话,检查一下按键设置是否有干扰,用双向模式.

使用特权

评论回复
板凳
forgot| | 2012-12-20 11:49 | 只看该作者
P1IFG &= ~0xe0

使用特权

评论回复
地板
szn1423|  楼主 | 2012-12-20 13:29 | 只看该作者
nbsmaps 发表于 2012-12-20 11:39
纯软件仿仿真?没有用硬件?不用硬件的话值读进来的是随机的,若用了硬件的话,检查一下按键设置是否有干扰,用 ...

是硬件的,检查一下按键设置是否有干扰,用双向模式.请问怎么检查呢?

使用特权

评论回复
5
szn1423|  楼主 | 2012-12-20 13:30 | 只看该作者
forgot 发表于 2012-12-20 11:49
P1IFG &= ~0xe0

写成P1IFG=0,结果也一样

使用特权

评论回复
6
weizheng07| | 2012-12-20 13:34 | 只看该作者
P1DIR需要设置一下,另外不知道你用的430有没有P1REN

使用特权

评论回复
7
szn1423|  楼主 | 2012-12-20 16:18 | 只看该作者
weizheng07 发表于 2012-12-20 13:34
P1DIR需要设置一下,另外不知道你用的430有没有P1REN

加了 P1DIR&=~0XFF;,无效。
片子是f413,没有p1ren吧。

使用特权

评论回复
8
ayl439| | 2012-12-21 09:43 | 只看该作者
楼上大亮!

使用特权

评论回复
9
szn1423|  楼主 | 2012-12-21 16:59 | 只看该作者
dwh000 发表于 2012-12-21 09:05
#pragma vector=PORT2_VECTOR         //P1口中断源
中断向量对吗?

改了之后
P1IFG无按键是0x03,有按键是0xe3;

使用特权

评论回复
10
szn1423|  楼主 | 2012-12-22 14:51 | 只看该作者
本帖最后由 szn1423 于 2012-12-22 14:57 编辑
dwh000 发表于 2012-12-22 08:10
上个图看看!


程序改过了,不过寄存器的值还是很奇怪,我把程序和仿真值都发上来
//............按键中断........................//      
#pragma vector=PORT1_VECTOR         //P1口中断源
__interrupt void P1_ISR(void)
{
  if(P1IFG&BIT5)
   {
     key_open_status=1;  //按键进入防抖状态
     key_waitkey=1;      //按键进入工作模式
     P4OUT^=BIT4;
   }
  if(P1IFG&BIT6)
   {
     key_close_status=1;  //按键进入防抖状态
     key_waitkey=1;       //按键进入工作模式
     P4OUT^=BIT4;
   }
  if(P1IFG&BIT7)
   {
     key_stop_status=1;       //按键进入防抖状态
     key_waitkey=1;      //按键进入工作模式
     P4OUT^=BIT4;
   }
  P1IFG=0;            // P1.5-P1.7 IO口中断标志位清除
  LPM3_EXIT;
}

#pragma vector=PORT2_VECTOR         //P2口中断源
__interrupt void P2_ISR(void)
{

  if(P2IFG&BIT0)
   {
     key_mode_status=1;  //按键进入防抖状态
     key_waitkey=1; //按键进入工作模式
     P4OUT^=BIT4;
   }
  P2IFG=0;             // P2.0 IO口中断标志位清除
  LPM3_EXIT;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

251

主题

462

帖子

4

粉丝