MSP430G2553 定时器中断实例

代码

#include "MSP430G2553.h"

void led_init();
void timer0_init();

void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;

  //--配置时钟-----
  BCSCTL1=CALBC1_1MHZ;
  DCOCTL=CALDCO_1MHZ;

  //--LED初始化----
  led_init();     

  //--定时器0初始化----
  timer0_init();

  //---开中断------
  _EINT();      //开中断

  LPM3;


}

/*
 *    定时器0中断函数
 */
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer0_A0(void)    //TACCR0中断
{ 
  P1OUT^=(1<<6);    //LED反转
}

#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer0_A1(void)    //TACCR1中断,TACCR2中断和TA0溢出中断共用一个中断向量
{ 
  switch(TAIV)
  {
  case 2:                           //TACCR1中断
    P1OUT^=(1<<6);    //LED反转
    break;
  case 4:                           //TACCR2中断
    P1OUT^=(1<<6);    //LED反转
    break;
  case 10:                          //TAIFG 溢出中断
    P1OUT^=(1<<6);    //LED反转
    break;
  default:
    break;
  }

}

// LED 初始化
void led_init()
{
  P1DIR|=(1<<6);  
}

// 定时器初始化
void timer0_init()   
{
  /*
   *设置TIMER_A的时钟
   *TASSEL_0: TACLK,使用外部引脚信号作为输入
   *TASSEL_1: ACLK,辅助时钟
   *TASSEL_2: SMCLK,子系统主时钟
   *TASSEL_3: INCLK,外部输入时钟 
  */
  TACTL |= TASSEL_1;    

  /*
   *时钟源分频
   *ID_0: 不分频
   *ID_1: 2分频
   *ID_2: 4分频
   *ID_3: 8分频
   */
  TACTL |= ID_0;    

  /*
   *模式选择
   *MC_0: 停止模式,用于定时器暂停
   *MC_1: 增计数模式,计数器计数到CCR0,再清零计数器
   *MC_2: 连续计数模式,计数器增计数到0XFFFF(65535),再清零计数器
   *MC_3: 增减计数模式,增计数到CCR0,再减计数到0
   */
  TACTL |= MC_1;  //增计数模式

  //----计数器清零-----
  TACTL |= TACLR; 

  //----设置TACCRx的值-----
  //TACCR0=32768-1;     //时钟是32.768K,那么值设为32678-1 
  TACCR0=30000;
  TACCR1=10000;         //TACCR1和TACCR2要小于TACCR0,否则不会产生中断 
  TACCR2=20000;

  //----中断允许----
  TACCTL0 |= CCIE;      //TACCR0中断
  TACCTL1 |= CCIE;      //TACCR1中断
  TACCTL2 |= CCIE;      //TACCR2中断
  TACTL |= TAIE;        //TA0溢出中断

}

注意事项

  需要注意的是在增计数模式时CCR1和CCR2的值应该小于CCR0,否则CCR1和CCR2不会产生中断。 并且每次CCR1和CCR2中断后要把它们重新赋值这样才能保证CCR1和CCR2的中断间隔时间不变。
  类似语句如下:
  CCR1 += 100;
  if ( CCR1 >= 32768 )
    CCR1 -= 32768;

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值