您的位置 首页 技术

普通单片机教育 第十六讲 守时/计数器的方法操控字

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

从上一节咱们现已得知,单片机中的守时/计数器都能够有多种用处,那么我怎样才干让它们作业于我所需求的用处呢?这就要经过守时/计数器的方法操控字来设置。

在单片机中有两个特别功用寄存器与守时/计数有关,这便是TMOD和TCON。趁便说一下,TMOD和TCON是称号,咱们在写程序时就能够直接用这个称号来指定它们,当然也能够直接用它们的地址89H和88H来指定它们(其有用称号也便是直接用地址,汇编软件帮你翻译一下罢了)。

从图1中咱们能够看出,TMOD被分红两部份,每部份4位。别离用于操控T1和T0,至于这里边是什么意思,咱们下面介绍。

从图2中咱们能够看出,TCON也被分红两部份,高4位用于守时/计数器,低4位则用于中止(咱们暂不论)。而TF1(0)咱们上节课已说到了,当计数溢出后TF1(0)就由0变为1。本来TF1(0)在这儿!那么TR0、TR1又是什么呢?看上节课的图。

计数脉冲要进入计数器还真不容易,有层层关要经过,最起码,便是TR0(1)要为1,开关才干合上,脉冲才干过来。因而,TR0(1)称之为运转操控位,可用指令SETB来置位以发动计数器/守时器运转,用指令CLR来

封闭守时/计数器的作业,全部尽在自已的把握中。

守时/计数器的四种作业方法

1.作业方法0

守时器/计数器的作业方法0称之为13位守时/计数方法。它由TL(1/0)的低5位和TH(0/1)的8位构成13位的计数器,此刻TL(1/0)的高3位未用。

咱们用这个图来评论几个问题:

1.M1M0:守时/计数器一共有四种作业方法,便是用M1M0来操控的,2位正好是四种组合。

2.C/T:前面咱们说过,守时/计数器即可作守时用也可用计数用,究竟作什么用,由咱们根据需求自行决定,也说是决定权在咱们编程者。假如C/T为0便是用作守时器(开关往上打),假如C/T为1便是用作计数器(开关往下打)。趁便提一下:一个守时/计数器同一时刻要么作守时用,要么作计数用,不能一起用的,这是个极一般的知识,几乎没有教材会提这一点,但许多初学者却会有此困惑。

3.GATE:看图,当咱们挑选了守时或计数作业方法后,守时/计数脉冲却不一定能抵达计数器端,中心还有一个开关,明显这个开关不合上,计数脉冲就无法曩昔,那么开关什么时候曩昔呢?有两种状况

1.GATE=0,剖析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种状况下,开关的翻开、合上只取决于TR1,只需TR1是1,开关就合上,计数脉冲得以四通八达,而假如TR1等于0则开关翻开,计数脉冲无法经过,因而守时/计数是否作业,只取决于TR1。

2.GATE=1,在此种状况下,计数脉冲通路上的开关不只要由TR1来操控,并且还要遭到INT1引脚的操控,只要TR1为1,且INT1引脚也是高电平,开关才合上,计数脉冲才得以经过。这个特性能够用来丈量一个信号的高电平的宽度,想想看,怎样测?

为什么在这种形式下只用13位呢?干吗不必16位,这是为了和51机的长辈48系列兼容而设的一种作业式,假如你觉得用得不顺手,那就爽性用第二种作业方法。

1.作业方法1

作业方法1是16位的守时/计数方法,将M1M0设为01即可,其它特性与作业方法0相同。

2.作业方法2

在介绍这种式方法之前先让咱们考虑一个问题:上一次课咱们说到过恣意计数及恣意守时的问题,比方我要计1000个数,可是16位的计数器要计到65536才满,怎样办呢?咱们评论后得出的方法是用预置数,先在计数器里放上64536,再来1000个脉冲,不就行了吗?是的,可是计满了之后咱们又该怎样办呢?要知道,计数总是不断重复的,流水线上计满后立刻又要开端下一次计数,下一次的计数仍是1000吗?当计满并溢出后,计数器里边的值变成了0(为什么,能够参阅前面课程的阐明),因而下一次即将计满65536后才会溢出,这可不符合要求,怎样办?当然方法很简单,便是每次一溢出时履行一段程序(这一般是需求的,要不然要溢出干吗?)能够在这段程序中做把预置数64536送入计数器中的作业。所以选用作业方法0或1都要在溢出后做一个重置预置数的作业,做作业当然就得要时刻,一般来说这点时刻不算什么,可是有一些场合咱们仍是要计较的,所以就有了第三种作业方法主动再装入预置数的作业方法。

已然要主动得新装入预置数,那么预置数就得放在一个当地,要不然装什么呢?那么预置数放在什么当地呢?它放在T(0/1)的高8位,那么这样高8位不就不能参加计数了吗?是的,在作业方法2,只要低8位参加计数,而高8位不参加计数,用作预置数的寄存,这样计数规模就小多了,当然做任可事总有价值的,关键是看值不值,假如我底子不需求计那么大都,那么就能够用这种方法。看图4,每逢计数溢出,就会翻开T(0/1)的高、低8位之间的开关,计预置数进入低8位。这是由硬件主动完结的,不需求由人工干预。

一般这种式作方法用于波特率发生器(咱们将在串行接口中解说),用于这种用处时,守时器便是为了供给一个时刻基准。计数溢出后不需求做作业,要做的只是只要一件,便是从头装入预置数,再开端计数,并且中心不要任何推迟,可见这个使命用作业方法2来完结是最妙不过了。

3.作业方法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。

以上是计数,理解了这个道理,守时也是相同。这在前面的课程已说到,咱们不再重复,请参阅前面的比如。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/261796.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部