定时器计数器的4种工作方式及应用
在前面的学习中,我们已经知道通过设置TMOD的M1、M0两位,可以选择定时/计数器的四种工作方式。T0和T1在使用前三种工作方式时,除使用的寄存器和控制位不同外,其他操作相似。另外,T1没有工作方式3。下面以T0为例来讲述4种工作方式。
工作方式0及应用
当M1M0=00时,T0采用方式0工作,如图5-2所示,此时T0是一个由TL0的低5位和TH0的8位构成的13位计数器(注:TL0的高3位未用)。
图5-2 定时/计数器T0工作方式0的原理图
13位计数器的最大计数值为2 13 =8192,若振荡器的时钟频率 f OSC=12MHz时,机器周期为1 μ s,方式0最大的定时时间为8192 μ s。
若TL0的低5位计数满时,直接向TH0进位(而不是向TL0的第6位进位);13位定时/计数溢出时,TF0置“1”。
技巧定时/计数原理:定时/计数器只有在计数值达到最大(发生溢出)时,才会产生中断。那么任意值的定时或计数怎么实现呢,比如采用方式0时,我们需要计数500,那么,计数开始前,在定时/计数器中写入预置数7692(8192-500),就可以达到需要的效果。
【例5-1】 利用T0方式0定时由P1.0输出频率为500Hz的方波信号,晶振为12MHz。
分析如下:
已知信号的频率为500Hz,则周期为2ms,由于输出的是方波信号,定时时间为半个周期,即1000us。
则 定时初值=2 13 -t/T机器=8192-1000/1=7192
TH0= 7192/32=0xe0
TL0= 7192%32=0x18
c语言的源程序如下:
工作方式1及应用
当M1M0=01时,T0采用方式1工作,如图5-3所示,此时T0是TL0和TH0构成16位的定时/计数器,最大计数值为2 16 =65536,其他特性和方式0相似。
图5-3 定时/计数器T0工作方式1的原理图
【例5-2】 利用定时器0产生10Hz的方波,由P1.0口输出,设晶振频率为12MHz。
分析如下:
频率为10Hz的方波,周期为100ms,定时时间为50ms,12MHz晶振的机器周期为1us。
T0初值=2 16 -t/T机器=65536-50000/1=55536=0x3cb0
则TH0=0x3c,TL0=0xb0
C语言的源程序如下:
工作方式2及应用
当M1M0=10时,T0采用方式2工作,如图5-4所示,此时T0是一个8位自动重装定时/计数器,低8位TL0用作计数(最大计数值为2 8 =256),高8位TH0用于保存计数初值。若TL0计数已满发生溢出,TF0置“1”的同时,TH0中的初值将自动装入TL0。
图5-4 定时/计数器T0工作方式2的原理图
提示方式2的计数范围虽然比较小,但是初值可自动恢复,因此适用于计数范围较小、需要重复计数的场合,例如脉冲信号发生器。
【例5-3】 在工业流水线生产中,常利用传感器检测货品经过个数。这里我们进行模仿操作,由单片机定时器T1的外部脉冲输入引脚对检测的脉冲信号进行计数,当计数满12个时,让电机运转3秒后停止。脉冲计数及电机控制的电路如图5-5所示。
图5-5 脉冲计数及电机控制电路图
分析如下:
利用T1的方式2计数对外部脉冲计数,根据题目要求,当计数12次能够产生溢出,则T1的初值应设定为256-12=244。TMOD寄存器的高4位是针对T1进行设置,其中M1M0=10设为方式2,
设为计数方式。电机的启动与停止通过P1.0进行控制,当P1.0输出1时三极管导通,电机得电运行,当P1.0输出0时,三极管截止,电机失电停止。
c语言的源程序如下:
工作方式3及应用
当M1M0=11时,T0采用方式3工作,如图5-6所示,在这种工作方式下,T0被拆成两个独立的定时/计数器来用。其中,TL0使用T0原有的资源,可以作为8位定时/计数器;TH0使用T1的TR1和TF1,只能对内部脉冲计数,作为定时器使用。
图5-6 定时/计数器T0工作方式3的原理图
当T0工作在方式3时,T1仍可设置为方式0、方式1或方式2,如图5-7所示。此时,T1由定时/计数方式选择位切换其定时或计数功能,当计数器计满溢出时,将输出送往串行口。在这种情况下,T1一般用作串行口波特率发生器。
图5-7 T0工作在方式3时T1的三种工作方式
提示
由于T1的TR1位被TH0占用,因此,其启动和关闭较为特殊。当工作方式设置完成时,T1就开始运行;将T1的工作方式设置为方式3时,T1停止工作。
【例5-4】 有一应用系统,将T1置于方式2作为串行口的波特率发生器,现要求T0增加一个外部中断源,中断时P1.1口取反,并由P1.0输出频率为10KHz的方波信号(假设单片机的晶振频率为12MHz)。
分析如下:
由于T1已经被使用,因而T0既要作为方波信号发生器,又要增加一个外部中断源,只能采用工作方式3,其中TH0为8位定时器,TL0为预置初值0xff的计数器。
10KHz方波的周期为100us,因此,TH0初值为256-100/2=206=0xce
程序如下:
定时器计数器综合应用实例讲解
【例1】 编写定时器T0产生1秒的定时程序,通过P1.0口输出高、低电平均为1s的方波(假设单片机采用12MHz的晶振)。
分析如下:
12MHz的晶振,机器周期为1us,各种工作方式直接定时的最大定时时间分别为:
方式0: 2 13 =8192us=8.192ms
方式1: 2 16 =65536us=65.536ms
方式2、3: 2 8 =256us
编程思路:
任何一种方式都无法直接实现1s的定时,可以考虑采用方式1实现50ms定时中断,设置一变量对中断的次数进行计数,计数到20时即为1秒。
c语言源程序如下:
【例2】 脉冲宽度的检测:要求对外部输入的高电平脉冲持续的时间进行检测,即检测高电平脉冲宽度,将检测的脉宽以微秒为单位显示在数码管上(假设单片机的晶振频率为12MHz)。
脉宽检测系统电路如图5-8所示。
图5-8 脉冲宽度检测系统电路图
分析如下:
TMOD的GATE位为门控位,当GATE置1时,只有当对应的外部中断引脚
为1,且TRn置1时,定时器n才会启动定时(n=0或1)。利用该特点,可以检测
口脉冲高电平持续的时间,在信号的上升沿启动定时器,下降沿停止定时器。
在本实例中,采用T0的方式1定时功能对脉冲宽度进行测量,直接测量的最大值为65535,如果晶振为12MHz,则机器周期为1us,直接可检测的最大脉冲宽度为65.535ms。如果需要检测更宽的脉冲,可对定时器0溢出的次数进行计数,将溢出次数乘以65536,来计算。将外部中断设为下降沿触发,当检测到下降沿信号时,将进入外部中断处理程序,读取定时器的数值,此数值即为脉冲信号的宽度,通过数码管(关于数码管显示的知识参见8.3节)动态扫描显示检测的脉冲宽度值。
c源程序如下:
【例3】 单片机时钟:由6个数码管的动态扫描显示分别显示小时、分钟、秒,由四个按键对时间进行调节。数据调整采用移位的方式,根据移位键触发的次数去调节不同的时间对象,加1、减1键分别对时间进行加1和减1调整,清零键将时间清零。
单片机时钟系统电路如图5-9所示。
分析如下:
根据题目的功能要求,系统主要包括数码管动态扫描显示程序、按键检测调时程序、时间产生程序、系统初始化等程序模块。
➢ 时间产生的思路 :由定时器产生50毫秒定时中断,中断20次为1秒,当秒加到60时,秒清零,分钟加1,当分钟加到60分时,分钟清零,小时加1,当小时加到24时,小时清零。
➢ 按键检测调时思路 :设置时间变量setNum对移位按键的次数进行记录,默认为0,不进入调时状态,随着移位按键的触发,setNum值加1,程序根据setNum的值分别处于调节秒、分钟、小时状态,当setNum加到4时回到0。
➢ 数码管动态扫描显示思路 :将秒、分、时时间分别拆分出个位和十位数,通过查询数字显示的代码表,送至P0口,通过P2.0~P2.5动态扫描驱动对应的数码管显示。
图5-9 单片机时钟系统电路图
c源程序如下:
【例4】 单片机频率计:将外部脉冲从P3.5口输入,利用利用单片机的定时/计数器功能,计算脉冲频率并将频率值通过数码管进行显示。
频率计系统电路如图5-10所示。
分析如下:
频率是周期的倒数,即每秒钟产生的周期信号的个数。根据频率的定义,充分的利用单片机的定时/计数器资源,由定时器0实现1秒定时,定时器1则对外部脉冲个数进行计数,这样1秒钟内所计的脉冲个数即为输入信号的频率。
编程说明:
在8051单片机中有两个16位的定时/计数器,分别为T0和T1,在这里设置T0为工作方式1定时,T1为工作方式1计数,则TMOD=0x51。
计数脉冲由单片机的P3.5口输入,利用定时器0产生50毫秒定时,定时中断20次即为1秒钟,将单片机定时器1设为计数模式,由P3.5(T1)口输入外部计数脉冲,在1秒钟计数的脉冲信号数即为所测信号的频率,然后由数码管动态扫描显示对应的频率值。
图5-10 频率及系统电路图
c源程序如下:
相关问答
电子定时器 怎么三步设置定时器开关时段?随着智能时代的到来,很多设备都实现了智能化,可以方便的进行操作和管理~但是还有很多电子设备没有时控和其它智能控制的能力,比如:上下班开关饮水机、空调,...
电子定时器 只设开不设关可以吗?这种定时器通常用于需要在一定时间内开启某个设备或装置的场合,例如定时开启水泵、灯光等。这种设计可以实现简单化、易操作...电子定时器只设开不设关是可...
怎么使用 电子定时器 开关水?买一个家用的定时器,水族器材店常有的,机械式能精确到15分钟,电子式能精确到1分钟。再买一个电磁阀,注意压力范围。水位控制部分用浮球阀控制,抽水马桶用的...
cn101a 电子定时器 说明书?1)灶具在工作状态下,按下定时器的上调节键或下调节键均可启动定时器定时功能。(2)按压上调节键或下调节键可设置定时时间,定时时间设置范围为1分钟-9小时59分...
冰箱买了 电子定时器 怎么调节?应根据季节温度变化来调整压缩机的开停时间比例,夏季可按1:1;春秋季按1:2-1:3;冬季按1:4-1:5。压缩机的工作时间长短可根据过去正常情况下的工作时间...应根...
米迪MD-L12 电子 式 定时器 怎么样,好不好?这种定时器有20组组合定时开关模式,如果你只需要单组循环的开关模式的话,在定时器是准确的北京时间.将星期一至星期天设置成ON.将其中的任意一组开关时间设置...
电动车 电子定时器 怎么设置?3、再次按下设定键,面板左下方出现编程段数“1...按下设定按钮,屏幕左下方出现数字提示编程段数,选好要编程的标签号后,进行设置开启。3、再次按下设定键,面...
电高压锅上的ddfb一30 定时器 是何原理?电压力锅接通电源后,没有进行加热定时操作时;定时器没有接通电路,电压力锅进入保温状态。电源经温度保险FU1、加热盘RL、压力开关、限温开关、保温开关形成回...
公牛gnd2 定时器 说明书?1公牛GND-2定时插座非常简单易用,只需要按照正确的步骤操作,就能够实现定时开关电器的功能。2首先,将GND-2插头插入电源插座,然后将需要控制的电器插入GND...
电源 定时器 怎样设置时间? - 懂得电源定时器分为机械式和电子式,但是基本上都是用旋转拔盘定时的,其中一个是起始拔盘,另一个是停止拔盘,只要根据自己需要设定就可以轻松设置电源定...