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

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

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

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

在单片机中有两个特殊功能寄存器与定时/计数有关这就是TMOD和TCON顺便说一下TMOD和TCON是名称我们在写程序时就能直接用这个名称来指定它们当然也能直接用它们的地址89H和88H来指定它们其实用名称也就是直接用地址汇编软件帮你翻译一下而已


<TMOD结构>

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


<TCON结构>

从图2中我们能看出TCON也被分成两部份高4位用于定时/计数器低4位则用于中断我们暂不管而TF10我们上节课已提到了当计数溢出后TF10就由0变为1原来TF10在这儿那么TR0TR1又是什么呢看上节课的图

计数脉冲要进入计数器还真不不难有层层关要通过最起码就是TR01要为1开关才能合上脉冲才能过础因此TR01称之为运行控制位可用指令SETB来置位以启动计数器/定时器运行用指令CLR来关闭定时/计数器的工作一芯在自已的掌握中


<单片机定时器/计数器结构>

定时/计数器的四种工作方式

工作方式0

定时器/计数器的工作方式0称之为13位定时/计数方式它由TL1/0的低5位和TH0/1的8位组成13位的计数器此时TL1/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;自动再装入预置数的工作方式

既然要自动得新装入预置数那么预置数就得放在一个地方要不然装什么呢那么预置数放在什么地方呢它放在T0/1的高8位那么这样高8位不就不能参与计数了吗是的在工作方式2只有低8位参与计数而高8位不参与计数用作预置数的存放这样计数段就小多了当然做任可事总有代价的关键是看值不值如果我根本不需要计那么多数那么就能用这种方式看图4每当计数溢出就会打开T0/1的高低8位之间的开关计预置数进入低8位这是由硬件自动完成的不需要由人工干预

常常这种式作方式用于波特率发生器我们将在串行接口中讲解用于这种用途时定时器就是为了供给一个时间基准计数溢出后不需要做事情要做的仅仅只有一件就是重新装入预置数再开始计数而且中间不要任何延迟可见这个任务用工作方式2来完成是最妙不过了

工作方式3

这种式作方式之下定时/计数器0被拆成2个独立的定时/计数器来用其中TL0能组成8位的定时器或计数器的工作方式而TH0则只能作为定时器来用我们知道作定时计数器来用需要控制计满后溢出需要有溢出标记T0被分成两个来用那就要教控制及溢出标记了从何而来呢TL0还是用原来的T0的标记而TH0则借用T1的标记如此T1不是无标记控制可用了吗是的

一般情况处只有在T1以工作方式2运行当波特率发生器用时才让T0工作于方式3的

定时器/计数器的定时/计数段

工作方式013位定时/计数方式因此最多能计到2的13次方也就是8192次

工作方式116位定时/计数方式因此最多能计到2的16次方也就是65536次

工作方式2和工作方式3都是8位的定时/计数方式因此最多能计到2的8次方也说是256次

预置值计算用最大计数量减去需要的计数次数即可

例流水线上一个包装是12盒要求每到12芯产生一个动作用单片机的工作方式0来控制应当预置多大的的أ对了就是8192-12=8180

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

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

文章评论

相关文章

Ƶ