4203|5

524

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【R7F0C809】实现定时器中断 [复制链接]

本帖最后由 770781327 于 2015-9-16 19:13 编辑

R7F0C809有个定时器阵列单元
配置有4个16位定时器
比较有特色不同于其他的是不是不同的定时器哦,而是个定时器阵列,这就意味着各 16 位定时器,既能分别用作独立的定时器,也能组合多个通道用作高级的定时器功能。


这样定时器使用自由,功能更为强大

16位定时器也可拆分2个8位定时器来使用

考虑到项目需要,设置一个1ms的定时中断,计数到1000即1s时把LED2取反一次,
程序也很简单啦,
首先定时器初始化
  1.   void Timer_Init(void)
  2. {
  3.     TAU0EN = 1;
  4.     TPS0 & = 0x00;

  5.     TT0 |= 0x0FU;

  6.     TMMK00 =1U;
  7.     TMIF00 =0U;

  8.     TMPR100 = 1U;
  9.     TMPR000 = 1U;

  10.     TMR00H = 0x00U;
  11.     TMR00L = 0x00U;

  12.     TDR00H = 0x4EU;
  13.     TDR00L = 0x20U;
  14.    
  15.     TO0 &= 0x0EU;
  16.     TOE0 |= 0x01U;
  17. }
复制代码
此处初始化时有点错误有点问题,后来参考强仔的修改了下
所用系统时钟为20MHz,设定定时时钟的分频系数为0,计数器时钟的周期为:1/20000000Hz = 0.05us,需要设置产生的中断为0.1ms,所以可以算出TDR00 = (0.1 / 0.00005)-1=19999,转成16进制就是0x4E1F,因为TDR00分为高八位的TDR00H和第八位的TDR00L,所以装的初值为:
    TDR00H = 0x4EU;
   TDR00L =0x1FU;

然后设定定时器中断
  1. void Timer_Channel1_Interrupt(void)
  2. {
  3.     if (++inttm00counter ==1000U)
  4.     {
  5.         TDR00H =0x4EU;
  6.         TDR00L = 0x1FU;
  7.       
  8.         P0 ^=0b00000010U;
  9.         inttm00counter =0U;
  10.        count++;
  11.     }
  12. }
复制代码
主函数初始化时钟、led、引脚、定时器就行
  1. void main(void)
  2. {
  3.    System_Init();
  4.    LED_Init();            /* Sets used ports */
  5.    Timer_Init();

  6.     while (1)
  7.    {
  8.    }
  9. }
复制代码
实际效果


有了定时中断,下面就可以修改数码管处的代码了


另外谁能告诉我/*¸ø¶¨ê±Æ÷×°3õÖμ */这种注释乱码如何解决?每次重新打开工程,程序注释就变这样









最新回复

我当时也写错了,经常手误  详情 回复 发表于 2015-9-16 23:32
点赞 关注

回复
举报

1297

帖子

2

TA的资源

纯净的硅(中级)

沙发
 
20M的周期不应该是0.05us吗?至于中文注释,你这个没出编译错误算你幸运,hoho。

点评

恩,确实应该计数19999才对  详情 回复 发表于 2015-9-16 18:59
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

板凳
 
我也会出现乱码,其实那个TDR00的数是19999,那时候我写错了,现在我更正过来了

点评

我在家测的,没用示波器,没注意,确实应该是19999  详情 回复 发表于 2015-9-16 18:58
 
 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

4
 
强仔00001 发表于 2015-9-16 00:40
我也会出现乱码,其实那个TDR00的数是19999,那时候我写错了,现在我更正过来了

我在家测的,没用示波器,没注意,确实应该是19999
 
 
 

回复

524

帖子

0

TA的资源

一粒金砂(高级)

5
 
johnrey 发表于 2015-9-15 22:53
20M的周期不应该是0.05us吗?至于中文注释,你这个没出编译错误算你幸运,hoho。

恩,确实应该计数19999才对

点评

我当时也写错了,经常手误  详情 回复 发表于 2015-9-16 23:32
 
 
 

回复

1291

帖子

0

TA的资源

纯净的硅(中级)

6
 
770781327 发表于 2015-9-16 18:59
恩,确实应该计数19999才对

我当时也写错了,经常手误
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表