小弟 我卡住了 好几天了 希望前辈们指教啊 我这个程序是产生相位互差90度 出来的波形是 一样的 怎么回事啊
#include <msp430x14x.h> unsigned int flag1=0,flag2=0,num=0; 全局变量 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 main(void) { WDTCTL = WDTPW + WDTHOLD; Init_Clock(); //定时器B的初始化 P4DIR |= BIT1+BIT2; // P4.1 - P4.2output P4SEL |= BIT1+BIT2; // P4.1 - P4.2 TBx options P2DIR |= BIT6+BIT7; // TBCTL =TBSSEL_2+TBCLR; //SMCLK TBCCR0 = 19999-1; 20ms TBCTL |=MC_1+ID_3; 增加模式 1/8分频 //定时器A初始化 TACTL=TASSEL_2+TACLR;//SMCLK TACCTL0=CCIE;//CCR0中断允许 TACCR0=5000-1; 5ms TACTL |= MC_1+ID_3+TAIE; 增加模式 1/8分频 开中断 _EINT(); 开中断 while(1) { if(flag1==1) { TBCCR0 = 19999-1; TBCCTL1 = OUTMOD_7; // CCR1 reset/set TBCCR1 = 9999; // CCR1 PWM duty cycle 占空比为50% // TBCCTL1 = CCIE; flag1=0; } if(flag2==1) { TBCCR0 = 19999-1; TBCCTL2 = OUTMOD_7; TBCCR2 = 9999; 占空比为50% //TBCCTL2 = CCIE; flag2=0; } } }
#pragma vector=TIMERA0_VECTOR __interrupt void Timer_A(void) 定时器A 中断 { num++; switch(TAIV) { case 2:break; case 4:break; case 10: switch(num) { case 0:break; case 1:flag1=1; num=1,置位flag1 P2OUT&=~BIT6; p2.6灯亮 break; case 2:flag2=1; 置位flag2 P2OUT&=~BIT7; p2.7灯亮 TACTL&=~TAIE; 关定时器A中断 TACTL=MC_0; 定时器A 停止模式
num=0;
break; } }}
[ 本帖最后由 t_shaojun126 于 2012-3-21 10:20 编辑 ]
|