[求助] msp430g2553中断的问题

Enjoy972430161   2013-3-5 15:23 楼主
我想编程长生一个终端来控制pwm的占空比变化,p1.3按键作为中断,可是我按了键发现波形没变化,这是怎么回事,这个中断函数用来控制灯的暗灭变化时可以的,这么到了这个程序里就不行了???紧急求助。。。。。。。。。
程序如下。。。。求大神给力。。。
#include  
void key_init();
void main(void)
{
static int i;
//XTS(1);
//XT1OFF(0);
//XT1BYPASS(0);
//XCAP(0);
  _EINT();         //打开全局中断
  WDTCTL = WDTPW + WDTHOLD;
// Stop WDT禁止看门狗
  P1DIR |= BIT2;                          // P1.2 and P1.3 TA1/2 options 1为选引脚第二功能,0为引脚第一功能1
  P1SEL |= BIT2;
  CCR0 = 512-1;                             // PWM Period
  CCTL1 = OUTMOD_7;// CCR1 reset/set
i=168;
  CCR1 =i;              // CCR1 PWM duty cycle
TACTL = TASSEL_1 + MC_1;                  // ACLK时钟, 上升沿捕获
_BIS_SR(CPUOFF);                          // Enter LPM0

}
void key_init()
{
P1DIR&=~BIT3;     //P1.3为输入
   P1REN|=BIT3; //设置上拉
   P1OUT|=BIT3;
  P1IES|=BIT3; //高电平到低电平有效,即下降沿
  P1IFG&=~BIT3; //清除中断标志,带上这句最好
  P1IE|=BIT3;
}
#pragma vector=PORT1_VECTOR //中断
__interrupt void port1(void)
{
if(P1IFG&BIT3)
{
  static int i;
  if(i<=511)
    i += 168;
  else i = 0;      // 调整占空比
    P1IFG&=~BIT3; //这句清除中断标志
}
else
    P1IFG=0X00;
}

回复评论 (4)

回复 楼主 Enjoy972430161 的帖子

点赞  2013-3-5 15:26
程序好像有点问题
点赞  2013-3-5 16:28

回复 板凳 qinkaiabc 的帖子

#include  

void main(void)

{
        WDTCTL = WDTPW + WDTHOLD;     // Stop WDT禁止看门狗
        static int i;
                P1DIR&=~BIT3;  //P1.3为输入
                         P1REN|=BIT3; //设置上拉
                         P1OUT|=BIT3;
                         P1IES|=BIT3; //高电平到低电平有效,即下降沿
                        P1IFG&=~BIT3; //清除中断标志,带上这句最好
                          P1IE|=BIT3;
           P1DIR |= BIT2;  // P1.2输出信号
           P1SEL |= BIT2+BIT3;
  CCR0 = 512-1;                             // PWM Period

  CCTL1 = OUTMOD_7;// CCR1 reset/set
  i=168;
  CCR1 =i;              // CCR1 PWM duty cycle

TACTL = TASSEL_1 + MC_1;                  // ACLK时钟, 上升沿捕获

_EINT();         //打开全局中断
_BIS_SR(CPUOFF);                          // Enter LPM0


}


#pragma vector=PORT1_VECTOR   //中断
__interrupt void port1(void)
{
        if(P1IFG&BIT3)
{
                static int i;
                if(i<=384)
                  {
                        i += 168;
                  }
                else i = 0;      // 调整占空比

    P1IFG&=~BIT3; //这句清除中断标志
}
else
    P1IFG=0X00;
}
您再帮我看看这个程序
点赞  2013-3-5 16:52
没看,扫了一眼,发现一条好像有点问题,也许不一定是你故障的直接原因
就是声明静态变量 i
在中断程序中声明static,表示只在本中断程序中使用,而且一般要声明的时候赋给初始值。
没工作,没女人老婆,没宽带 ,  没钱
点赞  2013-3-5 19:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复