定时器延时问题,求助!!!!!

2019-03-24 09:16发布

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赋多大的值,延时效果都是一样的。

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
数码小叶
1楼-- · 2019-03-24 14:47
< 感觉你这个刚好重叠了,把定时器0的时钟改一下看看现象
artj
2楼-- · 2019-03-24 18:16
 精彩回答 2  元偷偷看……
artj
3楼-- · 2019-03-24 20:37
Lock_in_Amplifier.zip (595.22 KB, 下载次数: 7) 2016-6-21 10:33 上传 点击文件名下载附件

这是我的工程。用的LAUNCHPAD 430F5529 。
artj
4楼-- · 2019-03-24 23:10
问题已经解决,是在重新打开CCR0中断前(TA0CCTL0 |= CCIE;) 没有清除中断标志位。原因是定时器0在程序运行时一直在计数,只要达到CCRO,中断标志就会置位。

一周热门 更多>

相关问题

    相关文章