定时器和中断怎么关不掉啊

2019-03-24 14:46发布

请问各位前辈       我想产生两相相位差90度的PWM,在中断中关掉定时器    我用了CCIE=0 ,TACCTL0 &= ~CCIE;
也不起作用 输出的波形 是同相位的 不知道为什么 请各位前辈指教                                                                     谢谢各位前辈了 #include  <msp430x14x.h> void Init_Clock(void)      
{
   int i=0;
   BCSCTL1 &= ~XT2OFF;                       // XT2on
  do
  {
  IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  for (i = 0xFF; i > 0; i--);               // Time for flag to set
  }
  while ((IFG1 & OFIFG));                   // OSCFault flag still set?
  BCSCTL2 |= SELM_2 + SELS;                 // MCLK = SMCLK = XT2 (safe)
   // _EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句
}
void Init_TimerA(void)
{
  P2DIR=0xFF;
  P2OUT=0xFF;
  P2SEL|=BIT3+BIT4;
  TACTL|=TASSEL_2+ID_3+MC_1+TAIE;  //SMCL 1/8 UPMODE
  TACCR0=5000-1;//5ms
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
 
} void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P6DIR |= BIT2;P6OUT |= BIT2;              //关电平转换
  P3DIR |= BIT4;  // Set P3.4 to output direction
  P4DIR |= BIT1+BIT2; // P4.1 - P4.2output
  P4SEL |= BIT1+BIT2; // P4.1 - P4.2 TBx options
//_EINT();
  Init_Clock();
  Init_TimerA();
  TBCTL = TBSSEL_2 +ID_3+MC_1; // SMCLK, up mode
  TBCCTL0 = CCIE;                           // TBCCR0 interrupt enabled
  TBCCR0 = 19999; // PWM Period 20ms
  TBCCTL1 = OUTMOD_7; // CCR1 reset/set
  TBCCR1 = 9999; // CCR1 PWM duty cycle
//_DINT();
 _EINT();
 
  // while(1);
  //_BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
} // Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  TBCCTL2 = OUTMOD_7;
  TBCCR2 = 9999;
  P3OUT ^= BIT4;                            // Toggle P3.4 using exclusive-OR
  CCTL0 |= 0;
  TACCTL0 &= ~CCIE;
 //TACTL=MC_0;
   _DINT();
}
[ 本帖最后由 t_shaojun126 于 2012-3-19 15:12 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
peter_zheng
2019-03-24 22:19
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章