TI中文支持网
TI专业的中文技术问题搜集分享网站

关于MSP430G2553的定时器计算

void timer_init()

{

TACCR0 = 520;

TACTL |= TASSEL_2+ID_3+MC_1;

TACCTL0 |= CCIE;

}

void main()

{

WDTCTL = WDTPW+WDTHOLD;

BCSCTL1 = CALBC1_1MHZ;

DCOCTL = CALDCO_1MHZ;

TCA6416A_Init();

HT1621_init();

timer_init();

while(1)

{

display();

}

}

#pragma vector = TIMER0_A0_VECTOR __interrupt void Timer_A(void)

{

static int i=0;

i++;

switch(i)

{

case 20:sec++,i=0;break;

default: break;

}

switch(sec)

{

case 60:min++,sec=0;break;

default: break;

}

switch(min)

{

case 60:min=0,hou++;break;

default: break;

}

switch(hou)

{

case 24:hou=0;break;

default: break;

}

}

以上是我自己写的程序,第一段是定时器的初始化,第二段是主程序。在第一段中设置了CCR0的初值,设置了时钟源,设置了分频,设置了技术模式。在第二段主程序中设置了系统时钟。 因为我是打算用430的配件那块显示屏来设置一个时钟,类似于23-59-58这种,但是现在碰到的问题是:定时器的静态变量计时和实际计时相差很大,就是程序中我觉得是已经算好了,但是实际中这个秒位是不正常加数的。 下面是我的计算时间的方法,各位大神帮我看下有没有错误,请帮小弟多多指正。

BCSCTL1 = CALBC1_1MHZ;DCOCTL = CALDCO_1MHZ;这两句就是数控振荡器选择了1MHZ的频率,那么主时钟就是1MHZ,TACTL |= TASSEL_2+ID_3+MC_1;这句话中ID_3为8分频,那么频率就是1/8=0.125MHZ,那么12*(1/(0.125 * 1000 000))=96us,那么50ms/96us=520,那么CCR0的初值就为520,但是实际显示秒位计数过快。

灰小子:

楼主,你好。

你的秒位大约比正常时间能快多少?

如果快的不是太多,一般是正常的。如果要求精度高的话,建议使用外部晶振。

bin zhou4:

回复 灰小子:

重要的不是快不快,重要的是我这样的计算方法对不对。

灰小子:

回复 bin zhou4:

不懂为什么要乘以12,请原谅我的无知。。

msp430和51单片机是不同的

赞(0)
未经允许不得转载:TI中文支持网 » 关于MSP430G2553的定时器计算
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1