I51开发板 第六讲:定时器之配置篇

  • 定时器
  • 开发
  • SingleYork
  • LV5工程师
  • |      2016-08-21 10:40:29
  • 浏览量 1517
  • 回复:9
本帖最后由 SingleYork 于 2017-5-31 21:18 编辑 bg7.pngI51开发板 第五讲:定时器之简介篇 https://bbs.icxbk.com/community/forum.php?mod=viewthread&tid=65495 (出处: ICKEY BBS)

前一讲跟大家简单了介绍了一下定时器/计数器的基本结构以及跟定时器/计数器相关的一些寄存器,这一讲里面,本菜将会跟大家一起学习定时器/计数器的基本配置等相关知识。

定时器/计数器在进行定时或者计数操作之前要进行初始化配置,通常会包括以下几个步骤:

1、确定工作方式,给方式控制寄存器TMOD写入控制字;

2、确定是采用1T还是采用12T方式,计算定时器/计数器的初值,并将初值写入寄存器TH和TL

3、根据需要设置中断控制寄存器IE和IE2的初值,决定是否开放定时器中断;

4、根据需要设置寄存器INT_CLKO中的T2_CLKO、T1_CLKO和T0_CLKO位,确定是否采用可编程时钟输出;

5、置1运行控制寄存器TCON和AUXR中的TR0、TR1和TR2位,启动定时器/计数器;

在初始化过程中,设置定时器或计数器的初始值,需要进行一点运算。设计数器最大计数值为M(根据不同工作方式,M可以是2的16次方或2的8次方),则初值X的计算公式如下:

计数方式: X=M-要求的计数值;

12T定时方式:X=M-要求的定时值/(12/系统时钟频率);

1T定时方式: X=M-要求的定时值/(1/系统时钟频率);

定时器方式下,当初值X=0时,可以确定最大定时时间,例如当系统时钟频率为6MHz时,定时器工作于方式0,采用12T定时方式的最大定时时间位131.072ms,采用1T定时方式的最大定时时间为10.922ms。如果需要的定时时间大于上述最大定时值,则需要采用中断方式来扩展定时时间。

假设IAP15F2K61S2单片机系统时钟频率位12MHz,采用定时器T0中断扩展方式实现实时时钟。T0工作于1T定时方式,在16位自动重装初值方式下,计算出1ms的定时器初值为:X = 65536UL - (MAIN_Fosc / 1000UL),即:TH=0xD1,TL=0x20;每当1ms定时时间到产生中断,中断1000次即为1秒。设定hour、min、sec三个变量分别存储小时、分钟、秒,P30、P31、P16分别作为小时、分钟、秒的指示灯,每当定时1秒到,sec加1,同时秒指示灯闪烁;满60秒则min加1,同时分指示灯闪烁;满60分则hour加1,同时时指示灯闪烁;满24小时后将hour清零,同时熄灭所有指示灯。

主要程序代码如下,详细代码请看附件源程序:

首先,配置定时器的工作方式及初值等:

然后,配置我们需要用来指示灯IO口:

最后,在定时器T0中断函数里实现我们所需要的功能:

然后,我们把源代码下载到开发板里,就可以看到实现现象了!

在上面的程序中,我们用到了定时器的库函数,在下一讲里,本菜将对定时器的库函数进行详细的介绍,敬请期待!

源代码:

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:4
kk118a 2016-09-07
讲的不错,继续加油
0   回复
举报
发布
wambob 2016-09-06
51都使用库了啊:lol
0   回复
举报
发布
huihui163 2016-09-03
定时器学习了非常不错,很值得
0   回复
举报
发布
daniaoday 2016-08-25
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子