在MSP430F6736A上具有毫秒精度的RTC

时间:2015-11-26 17:45:56

标签: c microcontroller msp430

我是这种编程的新手。 我需要在MSP430F6736A上创建实时计数(精度为毫秒)。我正在创建一个需要在短时间内做某事的应用程序 (例如:每2秒打开LED 50毫秒)。

使用Code composer 6.1.1

我在考虑使用Timer和中断,但我不知道是否有可能像这样计算毫秒数。我刚读过,可以在几秒钟,几小时内应用....如果可以选择哪个时钟?

我想到的另一种方式是延迟或睡眠。我可以睡50度(实时)精确度吗?

EDIT 这是代码。 / [代码] [1] /使用Timer_A,ACLK和他的中断闪烁LED(现在只是闪烁 - 同样长时间关闭 - 同时打开)。

此代码闪烁导致2秒延迟。 存在寄存器TA1CCR0最大为0xFFFF = 65535(ACLK为2秒)的问题 对于我的应用程序,我需要从1秒到999秒的比例。 (代码中的第6-7行)。我怎样才能做到这一点?可能吗?

#include <msp430.h> 
#include <msp430f6736.h>

void CfgTA(unsigned long delayCycles)
{
    int t2=2;  // must be variable from 1 to 999
    t2=delayCycles*t2;
    TA1CCTL0 |= CCIE;   //Enable Interrupts on Timer
    TA1CCR0 = t2-1;     //Number of cycles in the timer
    TA1CTL |= TASSEL_1 | MC_1;  //ACLK , UP mode

}

void ledblink()
{
    //LED config
     P4DIR |= BIT6;
     P4OUT &= ~BIT6;

     CfgTA(32768);  //Timer configuration to blink every 1 sec
    while (1)
    {
        _bis_SR_register(LPM3_bits + GIE); //Enter Low Power Mode 3 with interrupts
    }

}


#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer_A0(void)
{

   P4OUT ^= BIT6;   // Swapping on/off LED
}


int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer

    ledblink();

    return 0;
}

0 个答案:

没有答案