请问各位前辈
我想产生两相相位差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 编辑 ]
此帖出自
小平头技术问答
一周热门 更多>