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

发布者:悠然自在最新更新时间:2020-07-02 来源: eefocus关键字:单片机  定时器  计数器  方式控制字 手机看文章 扫描二维码
随时随地手机看文章

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


在单片机中有两个特殊功能寄存器与定时/计数有关,这就是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来关闭定时/计数器的工作,一切尽在自已的掌握中。


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

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

工作方式0

定时器/计数器的工作方式0称之为13位定时/计数方式。它由TL(1/0)的低5位和TH(0/1)的8位组成13位的计数器,此时TL(1/0)的高3位未用。


我们用这个图来讨论几个问题:

M1M0:定时/计数器一共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。

C/T:前面我们说过,定时/计数器即可作定时用也可用计数用,到底作什么用,由我们根据需要自行决定,也说是决定权在我们��编程者。如果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都要在溢出后做一个重置预置数的工作,做工作当然就得要时间,一般来说这点时间不算什么,可是有一些场合我们还是要计较的,所以就有了第三种工作方式��自动再装入预置数的工作方式。


既然要自动得新装入预置数,那么预置数就得放在一个地方,要不然装什么呢?那么预置数放在什么地方呢?它放在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。


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

关键字:单片机  定时器  计数器  方式控制字 引用地址:17课:单片机定时器/计数器的方式控制字

上一篇:16课:单片机定时器与计数器
下一篇:18课:单片机的中断系统

推荐阅读最新更新时间:2024-11-03 11:16

HOLTEK 新推出 HT45F3W 血压计 MCU
Holtek在医疗量测领域不断追求卓越精进,正式推出高度整合,高性价比的血压计专用MCU HT45F3W。HT45F3W整合了多个可程序调整放大倍率及偏压的专用运算放大器,并内建有13-位模拟数字转换器,定电流产生器,同时具有Charge Pump及Regulator等功能,并搭配IAP ( In-Application Programming) 技术,对于程序更新及量测数据储存都可轻易完成。非常适用于臂式血压计及腕式血压计并各项居家医疗健康器材等产品。 HT45F3W包含有16K Word Flash程序内存、512Byte数据存储器、64Byte Data EEPROM及8 Level Stack等核心规格;同时兼具实用的外
[医疗电子]
HOLTEK 新推出 HT45F3W 血压计 <font color='red'>MCU</font>
利用C164单片机设计自动摊铺机通信模块
1.引言 随着高等级公路的不断发展,对于高等级公路的路面基层、底基层施工质量要求也日益严格,采用常规的施工方法已难以满足其表面几何尺寸和平整度的要求,因此采用摊铺机摊铺路面基层、底基层施工势在必行。但公路工程任务中,质量要求高,时间紧,操作条件恶劣,迫切要求改善操作环境,降低劳动强度,提高摊铺机自动化程度。工程机械一体化和机器人化是工程机械未来的发展方向。融合电子技术、计算机技术、控制技术、通信技术等,实现机械产品的自动化和智能化,为机电一体化技术开辟了发展的广阔天地。 该沥青混凝土自动摊铺机的研制、开发,将提高道路摊铺工程的自动化程度和智能化水平,改善道路工程的操作环境和劳动条件,降低劳动强度,提高摊铺机产品的档次,成为国内
[单片机]
利用C164<font color='red'>单片机</font>设计自动摊铺机通信模块
stm32之滴答定时器(3):滴答定时器的初始化设置
所谓初始化呢,实际就是对于定时器的参数的设置,这里实际只有一个函数,SysTick_Config,这个函数如下 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks SysTick_LOAD_RELOAD_Msk) return (1); SysTick- LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; NVIC_SetPriority (SysTick_IRQn, (1 __NVIC_PRIO_BITS) - 1);
[单片机]
第5章 定时器/计数器
定时/计数器的功能 MCS-51单片机内共有两个可编程的定时/计数器T0和T1。它们都是十六位加法计数器结构,分别由TH0、TL0和TH1、TL1四个8位计数器组成,每个定时/计数器都具有定时和计数两种功能。 计数功能 对外来脉冲进行计数。计数脉冲的输入端来自单片机的两个信号引脚T0(P3.4)和T1(P3.5)外部输入的脉冲在负跳变时有效,计数脉冲的频率最高为振荡频率的1/24。 定时功能 定时功能也是通过计数器的计数来实现的,不过这时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲。因此,计数频率为振荡频率的1/12。这样,不但可以根据计数器的预置值计算出定时时间,也可以反过来按定时时间的要求,计算出计数器的
[单片机]
KUKA给整数计数器或者二进制输出端赋值
选择菜单序列 命令 == i/bin= 。 联机表单 i/bin 用此指令可以对一个整数计数器或一个二进制输出端赋值,并将赋以的和一种条件 (布尔算子)相连接。为进行赋值,在需要时可能会将多个算术算子 (最多 11 个)进行逻辑连接。 通过一个二进制输出端可将一个数值以二进制形式向一系列设定的输出端进行分配,例如为了在其他设备或控制装置上输出程序编号。例如为了数焊点,将使用整数计数器。 1 信号 i :整数计数器 bin:二进制输出 2 信号的编号 i: 1 ... 60 bin: 1 ... 6 3 运算符
[机器人]
51单片机(AT89C52)串口收发程序
#include reg52.h #define uchar unsigned char uchar rtemp,sflag; void SerialInit() //11.0592M晶振,波特率9600 { TMOD=0x20; //设置定时器1工作方式为方式2 TH1=0xfd; TL1=0xfd; TR1=1; //启动定时器1 SM0=0; //串口方式1 SM1=1; REN=1; //允许接收 PCON=0x00; //关倍频 ES=1; //开串口中断 EA=1; //开总中断 } void SerialServi
[单片机]
51<font color='red'>单片机</font>(AT89C52)串口收发程序
基于STC89C51单片机的出租车计费器设计
出租车计费器是出租车上必不可少的一种仪表,随着电子技术,特别是嵌入式应用技术的飞速发展,智能芯片越来越广的应用到了出租车计费器上。这使得出租车计费器能够精准的计算出行车里程及对应的价格,使乘客能够更直观明了的知道自己的乘车价格,而司机师傅也不用再靠人工计算来得出乘客的费用,避免了很多麻烦。本文以单片机STC89C51 为核心设计一款出租车计费器, 使能够实现里程及对应价格的显示,由于采用芯片的自动定时计数,所以能够准确的计算出总的行车里程并能转换成对应的价格来,这样能够避免出租车司机作弊的可能性,做到公平公正。 1 出租车计费器的设计要求与设计方案 1.1 出租车计费器设计要求 设计一个出租车自动计费器,计费包括起步价、行车里程、总
[单片机]
基于STC89C51<font color='red'>单片机</font>的出租车计费器设计
MCU为工业和汽车设计师扩展8位空间
2008 年 4 月 28 日 ,随着企业的功率预算不断紧缩,而嵌入式内容需求却在日益增加,企业对高度集成、高性能微控制器( MCU )的需求成为必然。为了满足工业和汽车市场的这一需求,飞思卡尔近日为其 S08D 系列增加了强大的新成员,该新成员具有卓越的 8 位性能和片上功能。 飞思卡尔高度集成的 9S08DZ128 MCU 内置控制器区域网络( CAN )接口、电子可擦除可编程只读存储器( EEPROM )和片上仿真 / 调试工具。嵌入式 CAN 接口为众多汽车和工业控制应用提供了理想连通性解决方案。而嵌入式 EEPROM 则通过实现轻松地数据写入和擦除,提高了系统设计灵活性,消除了外部串行 EEPROM 。具有
[新品]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved