2504|9

19

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

讨论例程中的问题 [复制链接]

#include

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // P1.0 output
  P1OUT|=BIT0;
  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=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= 0x01;                            // Toggle P1.0
  CCR0+= 50000;                            // Add Offset to CCR0
}
讨论一:这个是定时器如果要开中断不是应该用这个TACTL|=TAIE而不应该是例程当中用的CCTL0=CCI才对的
讨论二:还有是既然已经选择了 MC_2即连续计数模式那么就是应该计数到65535才对。那么例程当中的CCR0 = 50000;还有什么意义;中断中的CCR0+= 50000;  也应该是无效的才对吧?
此帖出自单片机论坛

最新回复

你再想想   详情 回复 发表于 2014-7-31 21:48
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
430的定时器需要CCR0的配合才能实现任意数的定时,否则只能65536分频,任意数值定时只有两通道可以用.
ccr0=50000就是时钟50000分频,+50000也是对的,溢出的数据丢弃了,数据虽然溢了但中断时间是对的.
此时用的是定时器通道0的溢出中断,至于TAIE还是CCIE你再看看手册吧.
此帖出自单片机论坛

点评

那这个程序的中断是在计时器计时到50000中断还是在计时到65535中断呢?  详情 回复 发表于 2014-7-31 19:12
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
你的意思定时器可以计数到比65535大的值了哦?但不是说最大计数值不可以超过65535的吗?如果我想定时20秒你用定时器会怎么样写啊?谢谢。
此帖出自单片机论坛

点评

不可以大于,多余的等同于-65536,20秒只能修改定时器时钟.  详情 回复 发表于 2014-7-31 18:24
 
 
 

回复

4008

帖子

0

TA的资源

版主

4
 
sgy52401314 发表于 2014-7-31 16:25
你的意思定时器可以计数到比65535大的值了哦?但不是说最大计数值不可以超过65535的吗?如果我想定时20秒你 ...

不可以大于,多余的等同于-65536,20秒只能修改定时器时钟.
此帖出自单片机论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

5
 
怎么样修改啊?
此帖出自单片机论坛
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

6
 
huo_hu 发表于 2014-7-31 14:21
430的定时器需要CCR0的配合才能实现任意数的定时,否则只能65536分频,任意数值定时只有两通道可以用.
ccr0= ...

那这个程序的中断是在计时器计时到50000中断还是在计时到65535中断呢?
此帖出自单片机论坛

点评

第一次50000 第二次50000*2%65536 第三次50000*3%65536 ...  详情 回复 发表于 2014-7-31 20:05
 
 
 

回复

4008

帖子

0

TA的资源

版主

7
 
sgy52401314 发表于 2014-7-31 19:12
那这个程序的中断是在计时器计时到50000中断还是在计时到65535中断呢?

第一次50000
第二次50000*2%65536
第三次50000*3%65536
...
此帖出自单片机论坛

点评

那这样算出来的结果这种方法不是等周期了哦?  详情 回复 发表于 2014-7-31 20:47
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

8
 
huo_hu 发表于 2014-7-31 20:05
第一次50000
第二次50000*2%65536
第三次50000*3%65536

那这样算出来的结果这种方法不是等周期了哦?
此帖出自单片机论坛

点评

你再想想  详情 回复 发表于 2014-7-31 21:48
 
 
 

回复

4008

帖子

0

TA的资源

版主

9
 
sgy52401314 发表于 2014-7-31 20:47
那这样算出来的结果这种方法不是等周期了哦?

你再想想
此帖出自单片机论坛

点评

谢谢我懂了,这种技术的方法在技术到50000就中断,技术到65536时不中断只是清零,但前面的计数次数还是算的,只是中断前计数的次数不算而已,太感谢了。  详情 回复 发表于 2014-8-1 09:12
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

10
 

谢谢我懂了,这种技术的方法在技术到50000就中断,技术到65536时不中断只是清零,但前面的计数次数还是算的,只是中断前计数的次数不算而已,太感谢了。
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表