小弟 我卡住了
好几天了
希望前辈们指教啊
我这个程序是产生相位互差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 编辑 ]
此帖出自
小平头技术问答
问问吧
好像看到过类似的,忘了有没有
笨办法不要用输出模式,直接用中断操作I/O,可能要3个CCR,而且要注意中断中执行时间
用输出模式,还是不熟悉那么多模式,没那个脑筋去琢磨到底能不能做到
一周热门 更多>