请问各位前辈
我想产生两相相位差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 编辑 ]
|