繁体   English   中英

在MSP430上重置计时器

[英]Reset timer on msp430

使用CCS,嵌入式编程,MSP430F63736A

在我的应用程序中,我使用计时器A来切换LED(开/关)不同的时间。

例如:Led为ON-0.5秒Led为OFF- 3秒

当达到寄存器TA1CCR0中的值时,我需要复位计时器。 这些时间(0.5 s和3 s)在寄存器TA1CCR0中。 问题是,如果我将寄存器TA1CCR0的值从0.5秒更改为3秒,它将从0.5秒更改为3秒。 我需要整整3秒钟,所以我需要一个重置计时器。

多数民众赞成在中断例程,我在切换LED

    if (P4OUT == 0x00)
    {

        P4OUT ^= BIT6; // LED ON
        TA1CCR0 = (sekunda*t1);  //t1- 3 s.... pc 2s
    }

    else
    {

        P4OUT = 0x00;
        TA1CCR0 = (sekunda*t2);
    }
}

您正在使用哪种计数器模式? 您需要通过写入TA1CTL寄存器来设置模式。 这些模式是:

#define MC_0                (0x0000)  /* Timer A mode control: 0 - Stop */
#define MC_1                (0x0010)  /* Timer A mode control: 1 - Up to CCR0 */
#define MC_2                (0x0020)  /* Timer A mode control: 2 - Continuous up */
#define MC_3                (0x0030)  /* Timer A mode control: 3 - Up/Down */

“连续”模式通常是最常用的一种。 它一直计数到定时器寄存器溢出为止,然后从零重新开始。 如果启用了此功能,请连续添加到CCR中,而不要将其设置为时间间隔值:

TA1CCR0 += (sekunda*t1);

您也可以使用“向上”模式。 在这种情况下,计时器计数器应在达到CCR后自动重置为零。 如果要在ISR中修改CCR,然后显然不会发生此复位,则可以通过减去最短周期的值来修改定时器计数器寄存器( TARTA1R )。 不要只是将定时器寄存器设置为零,因为通常这不是一个好的编码习惯:万一ISR调用偶尔被延迟(例如,因为某些其他中断正在执行多个滴答),它会打开计时不准确累积的门。

在您的ISR中,向TA1CCR0添加一个偏移量,而不重置它:

假设您希望在第一个中断后有1秒钟的延迟,并且假设要产生1秒钟的延迟,则计时器必须计数到50000。因此,在ISR中需要执行的操作是TA1CCR0 + = 50000。

在您的情况下:

if (P4OUT == 0x00)
{

    P4OUT ^= BIT6; // LED ON
    TA1CCR0    +=    (sekunda*t1);  //t1- 3 s.... pc 2s
}

else
{

    P4OUT = 0x00;
    TA1CCR0    +=    (sekunda*t2);
}

}

有关完整示例,请参见

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM