当前位置:首页 > 单片机 > 单片机
[导读] /**********(一)定时器A比较模式*************/intmain(void){WDTCTL=WDTPW+WDTHOLD;//关看门狗BCSCTL1=CALBC1_1MHz;//设定DCO为1MHZDCOCTL=CALBC1_1MHZ;P1DIR|=BIT0;//LED使能TACTL=TASSEL1+TACLR;/

/**********(一)定时器A比较模式*************/
intmain(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);
return0;
}
#pragmavector=TIMERA0_VECTOR//ccr0中断服务
__interruptvoidta0_isr(void)
{
P1OUT^=BIT0;//LED翻转
CCR0+=50000;//定时补偿
}


/**********(二)定时器A捕获模式************/
volatileunsignedintcap_value;//存两次捕值之差
intmain(void)
{
volatileunsignedintfirst_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);
return0;
}



/************(三)定时器PWM输出程序*****************/
intmain(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);
return0;
}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭