[讨论] 定时器中断程序

羽翼之杨勇0102   2014-3-12 16:45 楼主
#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置位;
     //
  
}

回复评论 (19)

在连续计数模式下,从0FFFFh计数到0时,TAIFG置位,设置CCR0,CCR1,CCR2还有作用吗?
点赞  2014-3-12 16:48
设置CCR0,CCR1,CCR2定时时间??
点赞  2014-3-12 16:49
这是用来输出PWM波的占空比。数据手册第471页有输出模式的框图。
点赞  2014-3-12 16:59
是通过比较模式产生PWM波的
点赞  2014-3-12 17:00
这样理解就好点,连续模式是指的TA的计数器的工作模式,CCR0~CCR2用来设置计数器触发中断的时间。
这样设计的好处是用一个TIMER配合多个CCR可以实现多个时间组合,从而达到设计较复杂的时间触发要求。
点赞  2014-3-12 17:19
是这个吗?
点赞  2014-3-12 17:52
引用: qinkaiabc 发表于 2014-3-12 16:59
这是用来输出PWM波的占空比。数据手册第471页有输出模式的框图。

我用的是F5438中文全集!!可能不一样!能把你的数据手册给我一个吗??谢谢!!
点赞  2014-3-12 17:56
引用: Triton.zhang 发表于 2014-3-12 17:19
这样理解就好点,连续模式是指的TA的计数器的工作模式,CCR0~CCR2用来设置计数器触发中断的时间。
这样设计 ...

当定时器计数到TACCRx 和TACCR0 时,OUTx 按选定的输出模式发生变化。如图12-13所示例子,该例
使用了TACCR0 和TACCR1。
要是按照这样输出的话,就与CCR0,1,2无关啦!!

  • 定时器捕获输出模式.PNG
点赞  2014-3-12 18:02
引用: 羽翼之杨勇0102 发表于 2014-3-12 18:02
当定时器计数到TACCRx 和TACCR0 时,OUTx 按选定的输出模式发生变化。如图12-13所示例子,该例
使用了TA ...

图不对!应该是这个图!!
  • PWM输出波形.png
点赞  2014-3-12 18:03
引用: qinkaiabc 发表于 2014-3-12 16:59
这是用来输出PWM波的占空比。数据手册第471页有输出模式的框图。

那个LED灯亮灭,是不是要计数到0FFFF才有闪,CCR1,CCR2,我好像有点明白啦!这是两个PWM波形的占空比!!CCR0是PWM的周期不明白?帮忙点点,或者送个手册我捉摸一下呗!!谢谢!!
点赞  2014-3-12 18:11
我看的是官方的英文数据手册。家里没网了
点赞  2014-3-12 18:29
哦!谢谢!!
点赞  2014-3-12 18:43
引用: qinkaiabc 发表于 2014-3-12 17:00
是通过比较模式产生PWM波的

比较模式?不是捕获模吗??
点赞  2014-3-12 19:06
捕获模式:用来判断外部输入信号的边沿,用于测量外部信号的频率。

比较模式:内部寄存器TAR的值与ccrx比较,产生各种波形
点赞  2014-3-12 20:19
恩!我又查了一下资料:是比较模式产生PWM波形;
共有四路输出:P1.0控制LED、P1.1输出CCR0产生的PWM波、P1.2输出CCR1产生的PWM波、P1.3输出CCR2产生的PWM;计数器计到0FFFFh时,LED的状态就变化一次!分析的对不???
点赞  2014-3-12 20:43
在连续计数的模式下,CCR0可以改变输出的PWM波形的周期吗???求指点啊!!谢谢!!
点赞  2014-3-13 14:34
引用: 羽翼之杨勇0102 发表于 2014-3-13 14:34
在连续计数的模式下,CCR0可以改变输出的PWM波形的周期吗???求指点啊!!谢谢!!

在连续计数模式下,CCR0、CCR1、CCR2的功能一样捕获/比较;在这里是比较模式输出PWM波形;三个独立的PWM波形;周期为65535.
点赞  2014-3-14 10:11
自己发帖,自己解答!!!很有成就感啊!哈哈!!!
点赞  2014-3-14 10:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复