×
嵌入式 > 技术百科 > 详情

MSP430单片机16 位定时器Timer_A 操作

发布时间:2020-06-02 发布时间:
|

/**********(一)定时器A 比较模式*************/ 
int main( void ) 

WDTCTL=WDTPW+WDTHOLD; //关看门狗 
BCSCTL1 =CALBC1_1MHz; //设定DCO 为1MHZ 
DCOCTL =CALBC1_1MHZ; 

 

P1DIR |=BIT0; //LED 使能 
TACTL=TASSEL1+TACLR; //定时器A 时钟源为SMCLK,并清TAR 
CCTL0 |=CCIE; //CCR0 中断使能 
CCR0 =50000; //计数值为50000 个SMCLK 周期 
TACTL |=MC1; //启动定时器A 为连续计数模式 
_BIS_SR(GIE+CPUOFF); 
return 0; 

#pragma vector = TIMERA0_VECTOR //ccr0 中断服务 
__interrupt void ta0_isr(void) 

P1OUT ^=BIT0; //LED 翻转 
CCR0 +=50000; //定时补偿 



/**********(二)定时器A 捕获模式************/ 
volatile unsigned int cap_value; //存两次捕值之差 
int main( void ) 

volatile unsigned int first_value,second_value,n; 
WDTCTL=WDTPW+WDTHOLD; //关看门狗 
BCSCTL1 =CALBC1_8MHZ; //设定DCO 为1MHZ 
DCOCTL =CALBC1_8MHZ; 
BCSCTL1 |=DIVA_3; //ACLK 输入八分频 
do //等待晶振稳定 

IFG1 &=~OFIFG; 
for(n=5000;n>0;n--); 
} while(OFIFG&IFG1); 
TACCTL2=CM1+CCIS_1+CAP; //捕获模式,捕获上升沿,捕获内部ACLK 
TACTL=TASSEL_2+MC_2+TACLR; //定时器时钟源为SMCLK,启动连续计数,清TAR 
TACCTL2 &=~CCIFG; //清CCR2 的标志位 
while(!(CCIFG&TACCTL2)); //查CCR2 标志位 
first_value=TACCR2; //第一个捕获值存入first_value 
TACCTL2 &=~CCIFG; //清CCR2 的标志位 
while(!(CCIFG&TACCTL2)); //查CCR2 标志位 
second_value=TACCR2; //第二个捕获值存入second_value 
TACCTL2 &=~CCIFG; //清CCR2 的标志位 
TACCTL2 &=~MC1; //关定时器A 
cap_value=(second_value-first_value); 
return 0; 




/************(三)定时器PWM 输出程序*****************/ 
int main( void ) 

WDTCTL=WDTPW+WDTHOLD; //关看门狗 
BCSCTL1 =CALBC1_1MHZ; //设定DCO 为1MHZ 
DCOCTL =CALBC1_1MHZ; 

TACTL=TASSEL1+TAR; //SMCLK 为时钟源,清TAR 
CCR0=512; //设定PWM 周期 
CCTL1 |=OUTMOD_7; //CCR1 输出为reset/set 模式 
CCR1=384; //CCR1 的PWM 占空比设定 
CCTL2 |=OUTMOD_7; //CCR2 输出为reset/set 模式 
CCR2=128; //CCR2 的PWM 占空比设定 
P1SEL |=BIT2+BIT3; //TA1,TA2 输出功能 
P1DIR |=BIT2+BIT3; 
TACTL |=MC0; //启动定时器A 增计数模式 
_BIS_SR(CPUOFF); 
return 0; 
}


 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题