MSP430F2xxx的T_A是一个16位的定时器/计数器,有3个"捕获/比较寄存器",定时器(T_A)与"捕获/比较寄存器"(CCRx)工作是相对独立的.
计数器TAR三种模式(增计数,连续计数,增减计数)。分设置MC1、MC0位,设置后,T_A就开始计数了。上电默认为MC1=0,MC0=0为停止。 那么欲定时一段时间周期的话,可以有两种方法:
一是T_A计数,计到一定值产生T_A中断;
二是用CCRx和计数值比较,一致的话产生CCRx中断.(比较模式,也是上电默认模式)中断。每当一定的时间间隔都会产生中断请求,那么,需将下一事件发生的时间在当前的中断程序中加到CCRx中。
见程序:
- #include "msp430x22x4.h"
int main( void ) { WDTCTL=WDTPW+WDTHOLD; BCSCTL1=CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; TACTL=TASSEL1+TACLR; //SMCLK=VLOCLK=12KHZ,清楚TAR CCTL0=CCIE; //中断允许 CCR0=50000; //方波频率:1m/50000 P1DIR|=BIT0; TACTL|=MC1; //连续计数 _EINT(); _BIS_SR(LPM0_bits); return 0; } #pragma vector=TIMERA0_VECTOR __interrupt void TIMER_A(void) { P1OUT^=BIT0; CCR0+=50000; }
复制代码
|