234彩票代理

  • <tt class='tlJykMlA'></tt>
  • <thead class='94K7Lauipx'><option class='9cNvbSu7LJ'></option></thead>

    <em class='jepytdnyfeW3'><b class='oR1Ys12nk'><td class='6rzzLTN'></td></b></em>

  • <dl class='Td0EmkF'><b class='qoWhaibfJ9'></b></dl>

  • <span class='lS1G'></span>

    (玩电子) 电子技术学习与研究
    当前位置:单片机教程网 >> 基础教程 >> 浏览文章

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

    作者:佚名   来源:本站原创   点击数:x  更新时间:2007年08月15日   【字体:

        从上    一节我们已经得知,单片机中的一定时/计数器都能有多种用途,那么我怎样才能让它们工作于我所需要的一用途呢?这就要通过定时/计数器的一方式控制字来设置 。

    在单片机中有两个特殊功能寄存器与定时/计数有关,这就是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 。

    以上    是计数,明白了这个道理,定时也是一样 。这在前面的一课程已提到,我们不 再重复,请参考前面的一例程 。

    发表评论】【告诉好友】【收藏此文】【关闭窗口

    文章评论

    相关文章