注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
GkJdman的个人空间 https://home.eeworld.com.cn/space-uid-598652.html [收藏] [复制] [分享] [RSS]
日志

关于MSP430定时器一段官方例程的理解

已有 694 次阅读2015-9-5 20:04 |个人分类:TI 经验分享

#include <msp430.h>

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // P1.0 output
  TA1CCTL0 = CCIE;                          // CCR0 interrupt enabled
  TA1CCR0 = 50000;
  TA1CTL = TASSEL_2 + MC_2 + TACLR;         // SMCLK, contmode, clear TAR

  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, enable interrupts
  __no_operation();                         // For debugger
}

// Timer1 interrupt service routine
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
{
  P1OUT ^= 0x01;                            // Toggle P1.0
  TA1CCR0 += 50000;                         // Add Offset to CCR0
}


//不少初学者看到这段程序总会疑问为什么采用的是连续计数模式,却还设定TACCR0 ,而且在中断服务函数中对TACCR0+50000。  其实解答疑问的关键在触发中断的方式。连续计数模式下,计数器TAR从0计数到65535 ,然后清零再循环计数。首次触发中断是在计数值为50000时,但要想保证下次触发中断仍是经过50000的话,就必须使得TACCR0增加50000,虽然增加50000会使得TACCR0的值因为对65535取模,但正因为计数模式是循环连续计数,使得下一次计数恰在50000个周期后。因此也就实现了方波的周期为100000个计数周期。同理,改变每次增加的数值,也就可以改变方波的周期频率。


本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章