恳请大神帮u我看看这个msp430g2553的程序,我想做寻迹小车。

2019-07-15 16:36发布

#include <msp430g2553.h>
unsigned  int num=1000,pwm=5000,num1=2500,num2=3000,pwm1=5000;
void main (void)
{
  WDTCTL = WDTPW + WDTHOLD;
  TACTL|=TASSEL_2+TACLR+MC_1+ID_3;  // SMCLK ;clear timer_A;Put in /8
  CCTL0=CCIE;                       //捕获中断允许
  CCR0=pwm;
  CCR1=num;                                                        //TACCR0 装载值
  CCTL1=OUTMOD_7;   //输出模式复位

  P1DIR |= BIT0+BIT1;
  P1OUT=BIT0;
  P2DIR |= BIT0+BIT1;
  P2OUT=BIT0;

  P1DIR=BIT6;
  P1SEL=BIT6;

  TA1CTL|=TASSEL_2+TACLR+MC_1+ID_3;  // SMCLK ;clear Timer_A;Put in /8
  TA1CCTL0=CCIE;
  TA1CCR0=pwm;
  TA1CCR1=num;
  TA1CCTL1=OUTMOD_7;
  P2DIR=BIT2;
  P2SEL=BIT2;

  CCTL0=CCIE;
  P2REN |= BIT3+BIT4;
  P2OUT &= ~BIT3+BIT4;
  P2DIR &= ~BIT3+BIT4;
  P2IES &= ~BIT3+BIT4;
  P2IE|=BIT3+BIT4;
  P2IFG &= ~BIT3+BIT4;

  CCTL0=CCIE;
  P1REN |= BIT3+BIT4;
  P1OUT &= ~ BIT3+BIT4;
  P1DIR &= ~BIT3+BIT4;
  P1IES &= ~BIT3+BIT4;
  P1IE|=BIT3+BIT4;
  P1IFG &= ~BIT3+BIT4;

  _EINT();                          //使能所有中断
  while(1);
}

#pragma vector=PORT2_VECTOR
__interrupt void Port2()
{
        TACTL|=TASSEL_2+TACLR+MC_1+ID_3;  // SMCLK ;clear Timer_A;Put in /8
//以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。
if((P2IFG&BIT3) == BIT3)
{
         TA1CCTL0=CCIE;
         TA1CCR0=pwm1;
         TA1CCR1=num2;
         TA1CCTL1=OUTMOD_7;

         P2DIR=BIT2;
         P2SEL=BIT2;//2.3检测到下降沿信号,增加左轮转速

         P2IFG &= ~BIT3; //清除中断标志
        //以下填充用户代码

}


else if((P2IFG&BIT4) ==BIT4)
{
         CCTL0=CCIE;                       //捕获中断允许
         CCR0=pwm1;
         CCR1=num2;                                                        //TACCR0 装载值
         CCTL1=OUTMOD_7;                   //输出模式复位

         P1DIR=BIT6;
         P1SEL=BIT6;//2.4检测下降沿信号,增加右边轮转速

         P2IFG &= ~BIT4; //清除中断标志
        //以下填充用户代码
}

LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}
#pragma vector=PORT1_VECTOR
__interrupt void Port1()
{
        TACTL|=TASSEL_2+TACLR+MC_1+ID_3;  // SMCLK ;clear Timer_A;Put in /8
//以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。
if((P1IFG&BIT3) == BIT3)
{
         TA1CCTL0=CCIE;
                 TA1CCR0=pwm1;
                 TA1CCR1=num1;
                 TA1CCTL1=OUTMOD_7;

                 P2DIR=BIT2;
                 P2SEL=BIT2;//1.3检测下降沿信号,增加左轮转速

                 P1IFG &= ~BIT3; //清除中断标志
                //以下填充用户代码
}


else if((P1IFG&BIT4) ==BIT4)
{
         CCTL0=CCIE;                       //捕获中断允许
                 CCR0=pwm1;
                 CCR1=num1;                                                        //TACCR0 装载值
                 CCTL1=OUTMOD_7;                   //输出模式复位

                 P1DIR=BIT6;
                 P1SEL=BIT6;///1.4检测下降沿信号,增加右边轮转速

                 P1IFG &= ~BIT4; //清除中断标志
                //以下填充用户代码
}

LPM3_EXIT; //退出中断后退出低功耗模式。若退出中断后要保留低功耗模式,将本句屏蔽
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。