打印

问定时器增计数模式和连续计数模式的区别

[复制链接]
6030|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
512365098|  楼主 | 2011-7-26 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问:定时器中增计数模式和连续计数模式有什么区别吗?难道就是增计数模式能计数到CCR0,而连续计数模式只能计数到65536?如果是这样,那在连续计数模式下就不用设置CCR0的值了,但我看到例程中,仍然设置了CCR0,不解,请指教。

#include  <msp430x14x.h>
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P3DIR |= BIT4;                            // P3.4 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 50000;
  TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode
  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P3OUT ^= BIT4;                            // Toggle P3.4
  CCR0 += 50000;                            // Add Offset to CCR0
}

相关帖子

沙发
永远的不知| | 2011-7-28 17:33 | 只看该作者
1# 512365098

在连续模式,他就象闹表一样,而ccr0就象您定时的闹钟,每次到达ccr0,就会产生一个事件。

使用特权

评论回复
板凳
bit6019| | 2011-7-28 22:03 | 只看该作者
又长见识了

使用特权

评论回复
地板
512365098|  楼主 | 2011-7-29 10:34 | 只看该作者
2# 永远的不知

连续模式,计时器是要计满的,但是在计到CCRx时,产生中断;
而增计数模式,不需要计满,只要到CCRx,就会产生中断;
两者计数形式不一样,但最终效果是一样的,对吧?
令问:我看到有的程序里会这样设置CCR0=1000-1,这样写是什么意思?1000-1跟1000区别不大啊

使用特权

评论回复
5
永远的不知| | 2011-7-29 11:33 | 只看该作者
4# 512365098

你可以把它看做闹钟和定时炸*的区别,闹钟响了,它还会继续走;但定时炸*到时直接炸了,时钟不会在继续走。
一个是循环事件,一个是单次事件。
您说的那个1000-1,这个要看写程序的人的思路了。

使用特权

评论回复
6
512365098|  楼主 | 2011-7-30 08:59 | 只看该作者
5# 永远的不知
增计数是单次事件吗?在430一本教材上有这样一句话——计数器TAR可以增计数到CCR0的值,当计数到与CCR0的值相等时,定时器复位并从0开始重新计数。
从其他例程中也看到应用增计数模式的,应该不是单次事件。

使用特权

评论回复
7
永远的不知| | 2011-7-31 00:28 | 只看该作者
6# 512365098

抱歉,这个是我理解错误,看成单次增计数模式了:(

在连续计数模式中,很多时候会用到CCR0、CCR1等信号,闹钟的例子最形象了,在周期循环定时中,CCR0、CCR1对应不同时刻的事件。这就是430定时器最大的特点,在一个循环中可以产生多个不同的定时事件。

使用特权

评论回复
8
jxlxq| | 2011-8-3 15:13 | 只看该作者
递增模式时,CCRx不能设为最大值.这一点是乎规格书上有明确说明,不过我没试过.

使用特权

评论回复
9
杜_U_ME| | 2011-8-3 17:10 | 只看该作者
永远的不知讲的很详细

使用特权

评论回复
10
wuhao1061| | 2013-11-21 23:16 | 只看该作者
永远的不知 发表于 2011-7-28 17:33
1# 512365098

在连续模式,他就象闹表一样,而ccr0就象您定时的闹钟,每次到达ccr0,就会产生一个事件。 ...

CCR0 += 50000;  这句程序是什么意思?CCRO的最大值不是65536么,怎么能不断地增加?还是每次进入定时中断,CCRO会清零?

使用特权

评论回复
11
(⊙o⊙)你| | 2014-3-18 16:23 | 只看该作者
wuhao1061 发表于 2013-11-21 23:16
CCR0 += 50000;  这句程序是什么意思?CCRO的最大值不是65536么,怎么能不断地增加?还是每次进入定时中 ...

lz这个问题明白了吗,我也不明白这个问题,+50000后就超出65535了呢

使用特权

评论回复
12
shenmu2012| | 2014-3-18 17:25 | 只看该作者
个人认为增计数模式跟连续计数模式没多大区别的

使用特权

评论回复
13
(⊙o⊙)你| | 2014-3-18 18:10 | 只看该作者
本帖最后由 (⊙o⊙)你 于 2014-3-18 18:16 编辑
wuhao1061 发表于 2013-11-21 23:16
CCR0 += 50000;  这句程序是什么意思?CCRO的最大值不是65536么,怎么能不断地增加?还是每次进入定时中 ...


我已经明白了。

增计数模式只能设置一个CCR0(小于65535)来产生一个中断/事件。
连续模式可以设置CCR0,CCR1(小于65535)等来产生多个中断,这样就可以产生时间间隔(占空比)不同的方波了。

至于+=50000的问题的解释:当进入中断后,CCR0 +=50000,这时CCR0=10 0000,超过了16位最大值65535了,这时硬件会把多出的高16位截掉,剩下低16位,即10 0000&0x0000FFFF=0x86A0=34464,即下一次定时器计数值TAR要和34464比较。计数器TAR也是16位的,当记到65535再加1后他就会自动变为0,直到记到34464,和CCR0值一样后又发生一次中断,这样的话定时器的中断时间间隔永远保持在了50000。

如果在中断中不 +=50000的话,那么以后的中断间隔就是65535了。

如果直接是 =50000的话,那么以后的中断间隔就是50000+(65535-50000)=65535,和上面效果一样了。

使用特权

评论回复
14
(⊙o⊙)你| | 2014-3-18 20:54 | 只看该作者

刚才我在msp430f5438A上写程序跑了一下,验证了我上面说的是对的。效果非常的好。

使用特权

评论回复
15
loushaofeng| | 2014-4-5 20:21 | 只看该作者
学习!

使用特权

评论回复
16
wuhao1061| | 2014-5-28 17:31 | 只看该作者
(⊙o⊙)你 发表于 2014-3-18 18:10
我已经明白了。

增计数模式只能设置一个CCR0(小于65535)来产生一个中断/事件。

连续模式,除了计数到设置的CCRO,CCR1时产生中断,在计数到65535时也会产生中断?

使用特权

评论回复
17
(⊙o⊙)你| | 2014-5-31 14:12 | 只看该作者
wuhao1061 发表于 2014-5-28 17:31
连续模式,除了计数到设置的CCRO,CCR1时产生中断,在计数到65535时也会产生中断? ...

不会产生这个中断的

使用特权

评论回复
18
firstblood| | 2014-5-31 18:34 | 只看该作者
跟楼上各位的学习的了,定时器的这集中工作模式其实不难的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:在路上……

0

主题

532

帖子

1

粉丝