打印

定时器中断为何不工作?

[复制链接]
1869|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhaoqiu258|  楼主 | 2008-6-17 11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
计划用定时器Timer_A做一个秒表,程序如下,可是没有反映。将TACTL=TASSEL0+TACLR中的TASSEL0改为TASSEL1(选MCLK)就有反映了,但不是秒表,太快,搞不明白为什么,我的电路中只用了32768的一个晶振。请高手指点。

#include  <msp430x11x1.h>

void Init_Timer_A(void)  //1s定时
{
  TACTL=TASSEL0+TACLR;  //选择ACLK,清除TAR
  TACCTL0=CCIE; //TBCCR0中断允许,有CCR0~CCR4共5个捕捉/比较寄存器
  TACCR0=32768; //间隔1秒(ACLK=32768Hz)

  TACTL|=MC0;  //增记数
  
}


void main(void)

         WDTCTL = WDTPW + WDTHOLD;                      
    
    Init_Timer_A();
    _EINT();                              // Enable interrupts
while(1)
    {
        ;     
    }    
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)

               
        dispbuf[1]++; //显示值加一

}

相关帖子

沙发
TI_CPIC| | 2008-6-18 09:46 | 只看该作者

请问具体型号是什么呢?



MSP430F11x1,内部定时器模块是Timer_A3,带有3个捕捉/比较控制寄存器,你的注释与实际模块有出入。

MSP430F11x1默认的MCLK为DCO,默认的振荡频率约为800KHz,以至于你选用MCLK作为Timer_A3的时钟源定时过快。可以选择32768Hz作为MCLK。适当降低MCLK也可降低功耗。需要设置BCSCTL2寄存器的SELMx=2/3。 

定时器不工作有可能32768是晶振造成的,用示波器检查32768Hz振荡是否正常,若BCSCTL1寄存器XTS=0,内部的12pF的电容已经使用晶振负载电容使用。如果不起振有可能是由于晶振负载电容不匹配造成的。

使用特权

评论回复
板凳
zhaoqiu258|  楼主 | 2008-6-23 14:01 | 只看该作者

谢谢

2楼说的对,我的注释有问题,Timer_A3,带有3个捕捉/比较控制寄存器。已经选MCLK解决了问题,TACCR0设为65535,实测定时0.5秒,两次中断就是秒表啊。可能是32768坏了,还没有来得及测,先不用它也就是了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

42

帖子

0

粉丝