在线情况
楼主
  • 头像
  • 级别
    • 积分6
    • 经验178
    • 文章12
    • 注册2010-11-29
    对定时器连续计数模式的不理解,请老师们指教!
    刚入手430,对定时器诸多不解

    增计数模式好理解 计数到TCCR0,CCIFG置位,之后+1 回到0 TAIFG置位,进入
    #pragma vector=TIMERA0_VECTOR
       __interrupt void Timer_A0 (void)  

    但是在边续模式下,不理解,,,计数从0----FFFF,然后+1 回到0  TAIFG置位,,,也这就是这只要时钟固定了,这个定时时间是不变的,也就是每次进入中断的时间是不变的,

    看示例程序为什么还要设置TCCR0,又有什么意义呢..0 计数到 TCCRO,只是产生一个比较中断,又不能进入定时中断,,,,不明白这个TCCR0是什么意思在这
    //***********************************************************************
    设MCLK=SMCLK=TACLK=DCO=800K,将P1.0每隔50000个DCO周期取反,产生16HZ方波

    #include <msp430x20x3.h>
    void main(void)
    {
      WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
      P1DIR |= 0x01;                            // P1.0 output
      CCTL0 = CCIE;                             // CCR0 interrupt enabled
      CCR0 = 50000;
      TACTL = TASSEL_2 + MC_2;                  // 连续计数模式
      _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
    }

    #pragma vector=TIMERA0_VECTOR
    __interrupt void Timer_A (void)
    {
      P1OUT ^= 0x01;                            // Toggle P1.0
      CCR0 += 50000;                            // Add Offset to CCR0 ////////////
    }


    问题1:怎么产生16HZ方波呢,,,,,这是定时器中断呀,并不是比较中断呀,只有计数到了65536才进入中断,才取反的呀??

    问题2:CCR0 += 50000; 溢出了??? 是否是进入中断后CCR0=0了,。然后再付值

    问题3:计数器是否是从 当前值50000,然后继续计数--FFFF,回到0,,那它怎么产生的相同的时间间隔呢。明明多了个65536-50000的时间呀!!


    最近被它搞的很郁闷,难道它是从0---50000,进入中断,然后因为 CCR0 += 50000,再计数50000个,那这样的话就和增计数模式一样了吗?,,那计到FFFF清0,有什么意思呢???越搞越糊涂
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    哎,来个直观比意吧~
    比如计数器最大为10,比如初值为6,上面的程序中断处+6;也就是在中断间隔为6。那么将会在
    6,2,8,4,10,6,2,8,....就会这些数值中断;每次中断中+6;这个6是偏移量。
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    3
    • 头像
    • 级别
      • 积分6
      • 经验178
      • 文章12
      • 注册2010-11-29
      DC老师呀,,,,你的这个意思我理解,我上面也说了,难不成它还有记忆功能,

      但它进入中断的条件是由0到FFFF,要计数满了才进中断的呀,,,按你比方,,,,初值6  加到10 进入中断,然后再+6的呀..第一个即使加到6,它也进不了中断呀.


      那我要是实现 偏移量为4的的呢,不是不行吗,,4 8 都小于10,都进不了中断的呀 

      头大!!
      微控网感谢您的参与
      在线情况
      4
      • 头像
      • 级别
        • 积分9
        • 经验132
        • 文章11
        • 注册2011-02-24
        那个终端向量可能不是溢出中断的向量,是比较中断,你查下手册,溢出中断应该和CCR1,CCR2共一个终端向量,但终端标志不一样。比较中断就跟DC说的原理一样,比较参数是连续加的。
        微控网感谢您的参与
        在线情况
        5
        • 头像
        • 级别
          • 积分29
          • 经验413
          • 文章25
          • 注册2011-03-17
          头文件中注释 TIMERA0只能产生CCR0的中断
          #define TIMERA1_VECTOR      (5 * 2u)  /* 0xFFEA Timer A CC1-2, TA */
          #define TIMERA0_VECTOR      (6 * 2u)  /* 0xFFEC Timer A CC0 */

          连续模式不占用捕获比较寄存器 CCR0 但是可以通过CCR0进入中段 此时不使用 TAIFG 若使用TAIFG 需在中段函数中 使用中断向量表判断 并且 必须是TIMERA1_VECTOR中断
          微控网感谢您的参与
          Powered by LeadBBS 9.2 .
          Page created in 0.1680 seconds with 5 queries.