[原创] MSP430G2开发板学习(十一):定时器A中断(向上增长,32768K晶振)

lilong8470   2010-11-21 20:17 楼主
/******************************************************************************
* 定时器A翻转P1.0,CCR0向上增长模式,32KHZ的辅助时钟
* 定时器A配置为向上增长模式,CCR0=1000-1,翻转频率为32768/(2*1000)=16.384HZ
//  ACLK = TACLK = 32768Hz, MCLK = SMCLK = DCO
******************************************************************************/

#include  

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // 禁止看门狗
  P1DIR |= 0x01;                            // P1.0 输出
  CCTL0 = CCIE;                             // CCR0 中断使能
  CCR0 = 1000-1;
  TACTL = TASSEL_1 + MC_1;                  // ACLK,向上增长计数模式

  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/ interrupt
}

// Timer A0 中断服务程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= 0x01;                            // 翻转P1.0
}

完整工程如下:
msp430x20x3_ta_05.rar (14.42 KB)
(下载次数: 330, 2010-11-21 20:17 上传)

回复评论 (5)

我顶!!!
点赞  2011-7-2 00:51
顶起
点赞  2011-7-5 21:32
求教一个问题,我用内部DCO来做时钟源,会有什么问题,
下面是我参考上例做的。只是稍作改动,进入低功耗后就没反应了。请指点一下。谢谢

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
    DCOCTL=DCO2+MOD3;
    TACTL=TASSEL_2;
    CCTL0=CCIE;
    CCR0=800;
    P1DIR|=BIT0;
    TACTL=MC0;
    GIE;
   LPM0;
   
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMERA0_A0(void)
{
    P1OUT^=0X41;
}
点赞  2013-1-18 21:58

回复 4楼 publicpeople 的帖子

我是初学者,只是你这里DCO的频率设好了么?
点赞  2013-2-2 21:58

回复 4楼 publicpeople 的帖子

开启总中断是不是改用EINT();而不是单打个gie啊,不然的话就是_bis_sr(gie);
点赞  2013-2-2 22:02
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复