找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 19148|回复: 28
打印 上一主题 下一主题
收起左侧

17课:单片机定时器/计数器的方式控制字

  [复制链接]
跳转到指定楼层
楼主
ID:1 发表于 2013-5-21 03:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   从上一节我们已经得知,单片机中的定时/计数器都能有多种用途,那么我怎样才能让它们工作于我所需要的用途呢?这就要通过定时/计数器的方式控制字来设置。在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。顺便说一下,TMOD和TCON是名称,我们在写程序时就能直接用这个名称来指定它们,当然也能直接用它们的地址89H和88H来指定它们(其实用名称也就是直接用地址,汇编软件帮你翻译一下而已)。

<TMOD结构>
从图1中我们能看出,TMOD被分成两部份,每部份4位。分别用于控制T1和T0,至于这里面是什么意思,我们下面介绍。

<TCON结构>
从图2中我们能看出,TCON也被分成两部份,高4位用于定时/计数器,低4位则用于中断(我们暂不管)。而TF1(0)我们上节课已提到了,当计数溢出后TF1(0)就由0变为1。原来TF1(0)在这儿!那么TR0、TR1又是什么呢?看上节课的图。
计数脉冲要进入计数器还真不不难,有层层关要通过,最起码,就是TR0(1)要为1,开关才能合上,脉冲才能过来。因此,TR0(1)称之为运行控制位,可用指令SETB来置位以启动计数器/定时器运行,用指令CLR来关闭定时/计数器的工作,一切尽在自已的掌握中。

<单片机定时器/计数器结构>
定时/计数器的四种工作方式
工作方式0
定时器/计数器的工作方式0称之为13位定时/计数方式。它由TL(1/0)的低5位和TH(0/1)的8位组成13位的计数器,此时TL(1/0)的高3位未用。
我们用这个图来讨论几个问题:
M1M0:定时/计数器一共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。
C/T:前面我们说过,定时/计数器即可作定时用也可用计数用,到底作什么用,由我们根据需要自行决定,也说是决定权在我们&#0;&#0;编程者。如果C/T为0就是用作定时器(开关往上打),如果C/T为1就是用作计数器(开关往下打)。顺便提一下:一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用的,这是个极普通的常识,几乎没有教材会提这一点,但很多开始学习者却会有此困惑。
GATE:看图,当我们选择了定时或计数工作方式后,定时/计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去,那么开关什么时候过去呢?有两种情况
GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR1是1,开关就合上,计数脉冲得以畅通无阻,而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR1。
GATE=1,在此种情况下,计数脉冲通路上的开关不仅要由TR1来控制,而且还要受到INT1管脚的控制,只有TR1为1,且INT1管脚也是高电平,开关才合上,计数脉冲才得以通过。这个特性能用来测量一个信号的高电平的宽度,想想看,怎么测?
为什 么在这种模式下只用13位呢?干吗不用16位,这是为了和51机的前辈48系列兼容而设的一种工作式,如果你觉得用得不顺手,那就干脆用第二种工作方式。
工作方式1
工作方式1是16位的定时/计数方式,将M1M0设为01即可,其它特性与工作方式0相同。
工作方式2
在介绍这种式方式之前先让我们思考一个问题:上一次课我们提到过任意计数及任意定时的问题,比如我要计1000个数,可是16位的计数器要计到65536才满,怎么办呢?我们讨论后得出的办法是用预置数,先在计数器里放上64536,再来1000个脉冲,不就行了吗?是的,但是计满了之后我们又该怎么办呢?要知道,计数总是持续重复的,流水线上计满后马上又要开始下一次计数,下一次的计数还是1000吗?当计满并溢出后,计数器里面的值变成了0(为什么,能参考前面课程的说明),因此下一次将要计满65536后才会溢出,这可不符合要求,怎么办?当然办法很简单,就是每次一溢出时执行一段程序(这常常是需要的,要不然要溢出干吗?)能在这段程序中做把预置数64536送入计数器中的事情。所以采用工作方式0或1都要在溢出后做一个重置预置数的工作,做工作当然就得要时间,一般来说这点时间不算什么,可是有一些场合我们还是要计较的,所以就有了第三种工作方式&#0;&#0;自动再装入预置数的工作方式。
既然要自动得新装入预置数,那么预置数就得放在一个地方,要不然装什么呢?那么预置数放在什么地方呢?它放在T(0/1)的高8位,那么这样高8位不就不能参与计数了吗?是的,在工作方式2,只有低8位参与计数,而高8位不参与计数,用作预置数的存放,这样计数范围就小多了,当然做任可事总有代价的,关键是看值不值,如果我根本不需要计那么多数,那么就能用这种方式。看图4,每当计数溢出,就会打开T(0/1)的高、低8位之间的开关,计预置数进入低8位。这是由硬件自动完成的,不需要由人工干预。
常常这种式作方式用于波特率发生器(我们将在串行接口中讲解),用于这种用途时,定时器就是为了供给一个时间基准。计数溢出后不需要做事情,要做的仅仅只有一件,就是重新装入预置数,再开始计数,而且中间不要任何延迟,可见这个任务用工作方式2来完成是最妙不过了。
工作方式3
这种式作方式之下,定时/计数器0被拆成2个独立的定时/计数器来用。其中,TL0能组成8位的定时器或计数器的工作方式,而TH0则只能作为定时器来用。我们知道作定时、计数器来用,需要控制,计满后溢出需要有溢出标记,T0被分成两个来用,那就要两套控制及、溢出标记了,从何而来呢?TL0还是用原来的T0的标记,而TH0则借用T1的标记。如此T1不是无标记、控制可用了吗?是的。
一般情况处,只有在T1以工作方式2运行(当波特率发生器用)时,才让T0工作于方式3的。
定时器/计数器的定时/计数范围
工作方式0:13位定时/计数方式,因此,最多能计到2的13次方,也就是8192次。
工作方式1:16位定时/计数方式,因此,最多能计到2的16次方,也就是65536次。
工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多能计到2的8次方,也说是256次。
预置值计算:用最大计数量减去需要的计数次数即可。
例:流水线上一个包装是12盒,要求每到12盒就产生一个动作,用单片机的工作方式0来控制,应当预置多大的值呢?对了,就是8192-12=8180。
以上是计数,明白了这个道理,定时也是一样。这在前面的课程已提到,我们不再重复,请参考前面的例程。

评分

参与人数 1黑币 +5 收起 理由
秋葉原48 + 5 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:42148 发表于 2013-10-20 07:04 | 只看该作者
谢谢楼主诲人不倦
回复

使用道具 举报

板凳
ID:57149 发表于 2013-11-23 09:10 | 只看该作者
定时器/计数器的定时/计数范围
工作方式0:13位定时/计数方式,因此,最多能计到2的13次方,也就是8192次。
工作方式1:16位定时/计数方式,因此,最多能计到2的16次方,也就是65536次。
工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多能计到2的8次方,也说是256次。
这样讲就记忆深刻了。
回复

使用道具 举报

地板
ID:61875 发表于 2014-5-31 05:32 | 只看该作者
谢谢楼主学习了。
回复

使用道具 举报

5#
ID:66787 发表于 2014-10-1 08:29 | 只看该作者
有点明白了
回复

使用道具 举报

6#
ID:70651 发表于 2014-12-18 15:40 | 只看该作者
作方式0:13位定时/计数方式,因此,最多能计到2的13次方,也就是8192次。 工作方式1:16位定时/计数方式,因此,最多能计到2的16次方,也就是65536次。 工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多能计到2的8次方,也说是256次。
回复

使用道具 举报

7#
ID:73372 发表于 2015-2-7 15:47 | 只看该作者
真的好,学习了。谢谢楼主
回复

使用道具 举报

8#
ID:75791 发表于 2015-4-8 09:31 | 只看该作者
加油!
回复

使用道具 举报

9#
ID:87913 发表于 2015-9-1 10:33 | 只看该作者
终于明白了,谢谢了
回复

使用道具 举报

10#
ID:89128 发表于 2015-9-1 15:20 | 只看该作者
正在学习中。
回复

使用道具 举报

11#
ID:95150 发表于 2015-11-11 12:30 | 只看该作者
谢谢楼主分享。讲解的太详细了!易懂!
回复

使用道具 举报

12#
ID:98839 发表于 2015-12-9 11:14 | 只看该作者
这一课看得有点糊涂!
回复

使用道具 举报

13#
ID:107365 发表于 2016-4-6 01:15 | 只看该作者
楼主,对单片机的理解好深刻!膜拜
回复

使用道具 举报

14#
ID:152317 发表于 2016-12-6 08:06 | 只看该作者
继续学习
回复

使用道具 举报

15#
ID:166135 发表于 2017-2-27 23:01 | 只看该作者
定时器计时器都是一样的嘛
回复

使用道具 举报

16#
ID:168259 发表于 2017-3-26 11:34 来自手机 | 只看该作者
学习了,很有用,谢了!
回复

使用道具 举报

17#
ID:231550 发表于 2017-9-7 20:34 | 只看该作者
讲的通俗易懂,好厉害
回复

使用道具 举报

18#
ID:251178 发表于 2017-11-19 20:16 | 只看该作者
非常详细,通俗易懂!
回复

使用道具 举报

19#
ID:58723 发表于 2017-12-18 22:59 来自手机 | 只看该作者
123怎么都看不到底下啊
回复

使用道具 举报

20#
ID:229981 发表于 2018-3-5 23:47 来自手机 | 只看该作者
emmm……学到一半有事,断篇了,还要再看一遍
回复

使用道具 举报

21#
ID:313635 发表于 2018-4-22 12:18 | 只看该作者
为什么我这里没显示内容啊  急死了,大神
回复

使用道具 举报

22#
ID:309880 发表于 2018-6-2 15:15 | 只看该作者
做任可事总有代价的,关键是看值不值
有道理
回复

使用道具 举报

23#
ID:330209 发表于 2018-6-2 15:53 | 只看该作者
好资料,非常详细
回复

使用道具 举报

24#
ID:345799 发表于 2018-6-6 20:07 | 只看该作者

真的好,学习了。谢谢楼主
回复

使用道具 举报

25#
ID:93625 发表于 2018-6-26 10:43 | 只看该作者
继续学习中。。。
回复

使用道具 举报

26#
ID:363969 发表于 2018-7-6 11:12 来自手机 | 只看该作者
为什么我用手机看不到图的
回复

使用道具 举报

27#
ID:375427 发表于 2018-7-20 09:27 | 只看该作者
想看看c语言程序例子,最好能详细注解
回复

使用道具 举报

28#
ID:380335 发表于 2018-8-22 11:51 | 只看该作者
这个教程讲的很好,感谢楼主!如果能出视频 应该是更佳!不管如何 ,祝楼主每天都快乐!
回复

使用道具 举报

29#
ID:313459 发表于 2018-9-26 20:07 来自手机 | 只看该作者
很详细,厉害
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表