#include
void Init_Ta0(void);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关看门狗
Init_Ta0(); //初始化TA0
_BIS_SR(LPM3_bits + GIE); // 进入低功耗3
}
/***************TIMER0_A1_VECTOR中断程序******************/
#pragma vector=TIMER0_A1_VECTOR
__interrupt void Timer_A1(void)
{
switch( TA0IV )
{
case 2: break;
case 4: break;
case 6: break;
case 8: break;
case 10: break;
case 12: break;
//case 14: P1OUT ^= BIT0;break; //LED1 翻转
}
}
void Init_Ta0(void)
{
P1SEL |= 0x0E; // P1.1 P1.2 P1.3 作为Timer0_A5 TA0-TA2 输出
P1DIR |= 0x0F; // P1.0 - P1.3 输出
P1OUT &= ~BIT0;
TA0CCTL0 = OUTMOD_4 ; // CCR0 翻转输出模式
TA0CCTL1 = OUTMOD_4 ; // CCR1 翻转输出模式
TA0CCTL2 = OUTMOD_4 ; // CCR2 翻转输出模式
TA0CCR0 = 20000; // CCR0 赋值
TA0CCR1 = 2000; // CCR1 赋值
TA0CCR2 = 200; // CCR2 赋值
TA0CTL = TASSEL_1 + TAIE; // ACLK,溢出使能
TA0CTL |= MC_2; //连续计数
//在连续计数模式中,定时器重复地计数到0FFFFh,然后从0 开始重新计数.
//当定时器从0FFFFh计数到0时,中断标志TAIFG置位;
//
}
在连续计数模式下,从0FFFFh计数到0时,TAIFG置位,设置CCR0,CCR1,CCR2还有作用吗?
这是用来输出PWM波的占空比。数据手册第471页有输出模式的框图。
这样理解就好点,连续模式是指的TA的计数器的工作模式,CCR0~CCR2用来设置计数器触发中断的时间。
这样设计的好处是用一个TIMER配合多个CCR可以实现多个时间组合,从而达到设计较复杂的时间触发要求。
我用的是F5438中文全集!!可能不一样!能把你的数据手册给我一个吗??谢谢!!
当定时器计数到TACCRx 和TACCR0 时,OUTx 按选定的输出模式发生变化。如图12-13所示例子,该例
使用了TACCR0 和TACCR1。
要是按照这样输出的话,就与CCR0,1,2无关啦!!
那个LED灯亮灭,是不是要计数到0FFFF才有闪,CCR1,CCR2,我好像有点明白啦!这是两个PWM波形的占空比!!CCR0是PWM的周期不明白?帮忙点点,或者送个手册我捉摸一下呗!!谢谢!!
捕获模式:用来判断外部输入信号的边沿,用于测量外部信号的频率。
比较模式:内部寄存器TAR的值与ccrx比较,产生各种波形
恩!我又查了一下资料:是比较模式产生PWM波形;
共有四路输出:P1.0控制LED、P1.1输出CCR0产生的PWM波、P1.2输出CCR1产生的PWM波、P1.3输出CCR2产生的PWM;计数器计到0FFFFh时,LED的状态就变化一次!分析的对不???
在连续计数的模式下,CCR0可以改变输出的PWM波形的周期吗???求指点啊!!谢谢!!
在连续计数模式下,CCR0、CCR1、CCR2的功能一样捕获/比较;在这里是比较模式输出PWM波形;三个独立的PWM波形;周期为65535.