我是这种编程的新手。 我需要在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;
}