打印

请教一个程序的问题

[复制链接]
1657|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szn1423|  楼主 | 2012-12-8 14:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;       // Stop watchdog timer to prevent time out reset
  FLL_CTL0|=XCAP18PF;             //设置晶振匹配电容为18pf左右
  LCDCTL=LCDON+LCD4MUX+LCDSG0_1;
  P5SEL=0xFC;
  P2DIR&=~BIT1;                  //P2.1设为输入
  P2IES|=BIT1;                   //P2.1设为下降沿中断
  P2IE|=BIT1;                    //允许P2.1中断
  P2IFG=0;                       //清除P2中断标志位
  BTCTL=BT_ADLY_1000+BT_fLCD_256;    //BasicTimer  clock选为ACLK,1/64s(约16ms)中断一次,LCD刷新频率256Hz
  IE2=BTIE;                        //允许BasicTimer中断
  _EINT();                         //允许总中断
  
  while(1)
  {
   P6DIR|=BIT6;                  //红LED
   P6OUT|=BIT6;
   LPM3;                         //进入低功耗模式3,等待被唤醒。以下程序每1/64s执行一次
   P6DIR|=BIT5;                  //绿LED
   P6OUT^=BIT5;
   LCDM1=0X00;
   LCDM2=0X00;
   LCDM3=0X00;
   LCDM4=0X00;
   LCDM5=0X00;
   Battery_mAH=1200;
   LCD_DisplayAll();
  }
}

//.............BT中断.........................//
#pragma vector=BASICTIMER_VECTOR
__interrupt void BT_ISR(void)      //1/64s一次中断(由BasicTimer所产生)
{
  __low_power_mode_off_on_exit();  //退出时唤醒cpu
}

//............按键中断........................//      
#pragma vector=PORT2_VECTOR         //P2口中断源
__interrupt void P2_ISR(void)
{
  if((P2IFG&BIT1)==0)               //判断P2.1
  {
    key_value=1;
    P6OUT&=~BIT6;
  }
}

目前的情况是上电,基础定时器工作正常,绿灯闪,红灯亮;但是,一按按键,绿灯和红灯都常亮了,求高手查查问题出在哪里,谢谢啦

相关帖子

沙发
szn1423|  楼主 | 2012-12-8 14:36 | 只看该作者
刚改了改,如下:
//............按键中断........................//      
#pragma vector=PORT2_VECTOR         //P2口中断源
__interrupt void P2_ISR(void)
{
     key_value=1;
    P6OUT&=~BIT6;
}

现在一按按键,红灯灭,绿灯常亮或长灭,应该是基础定时器挂掉了,还是没找到问题出在哪里。继续求答案

使用特权

评论回复
板凳
forgot| | 2012-12-8 18:17 | 只看该作者
是MSP430的程序啊   没给硬件图

使用特权

评论回复
地板
szn1423|  楼主 | 2012-12-8 21:42 | 只看该作者
forgot 发表于 2012-12-8 18:17
是MSP430的程序啊   没给硬件图

蛮简单的一个电路,手里没电路图,口述下:mcu是msp430f413,p2.1口接一个按键,p6.5接绿色LED的正极,p6.6接红色LED的正极,LED负极接地。

使用特权

评论回复
5
szn1423|  楼主 | 2012-12-9 18:24 | 只看该作者
呃,貌似我犯了个很简单的错误,我应该在p2.1口退出中断前清除中断标志的。
明天试试。

使用特权

评论回复
6
chenyu988| | 2012-12-9 19:35 | 只看该作者
是的。中断服务函数最后要清除中断标志,在开启总中断前,最好也清除一下中断标志

使用特权

评论回复
7
szn1423|  楼主 | 2012-12-10 14:44 | 只看该作者
这个问题OK啦,结贴给分啦

使用特权

评论回复
8
hjs1618| | 2012-12-10 15:30 | 只看该作者
MP430须软件清中断标志位。

使用特权

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

本版积分规则

251

主题

462

帖子

4

粉丝