void TA1_Init()
{
P2DIR &=~ BIT0; //CAPTURE
P2SEL |= BIT0;
TA1CCTL1 = CAP + CCIS_0 + CM_1 + SCS+CCIE; // Capture CCIxA, pos edge, interrupt enable.
TA1CTL = TASSEL_2 + MC_1 + ID__1; // SMCLK, up mode.
}
void TA0_Init(void)
{
TA0CCTL0 &=~ CCIE; //比较功能0(定时计数)开启CCIFG位中断
TA0CTL = TACLR | TASSEL_2 | MC_1 | ID__1;
//计数器清零,选择SMCLK作为时钟(16MHz),选用増计数模式
}
#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer1_A1 (void)
{
//_disable_interrupts();
TA1CCTL1 &= ~CCIFG;
folg=~folg;
if(folg)
{
if(yx==0)
fb_L;
//TA1CCTL1 &= ~CM_2;
TA1CCTL1 |= CM_1; //捕获方式切换
}
else
{
if(yx==0)
fb_H;
//TA1CCTL1 &= ~CM_1;
TA1CCTL1 |= CM_2; //捕获方式切换
}
if(yx!=0)
{
if(yx<179)
{
TA0CCR0=time[yx]; //
//TA0R=0;
//TA0CTL|=TAIE;
TA0CCTL0 |= CCIE; //TR0=1;
}
else
{
TA0CCR0=time[180];
//TA0R=0;
//TA0CTL|=TAIE;
TA0CCTL0 |= CCIE; //TR0=1;
}
}
//_enable_interrupts();
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TimerA0(void)
{
//_disable_interrupts();
//TA0CTL &= ~TAIFG;
TA0CCTL0 &=~ CCIFG;
TA0CCTL0 &=~ CCIE;
if(folg)
fb_L;
else
fb_H;
//_enable_interrupts();
}
/********************************************************/
我想用定时器1捕获方波,当捕获到上升沿或下降延时开定时器0延时输出。起到输出方波与被采集的方波存在相位差。但是现在经过测试,发现并不能达到效果。捕获中断进去后,定时器的CCR0能被赋值,然后定时器0中断也能进去,但是延时输出的效果没有。就像没有定时一样。TA0CCR0的赋值由time[]这个数组提供,不论给TA0CCR0赋多大的值,延时效果都是一样的。
此帖出自
小平头技术问答
一周热门 更多>