51单片机定时器
51单片机定时器工作方式

51单片机定时器工作方式51单片机是一种非常常见的单片机,它具有多个定时器用来实现各种定时任务。
下面我们就来详细介绍一下51单片机的定时器工作方式。
首先,51单片机的定时器可以分为两种类型:定时/计数器0(T0)和定时/计数器1(T1),它们分别有不同的工作方式和控制寄存器。
一、定时/计数器0(T0)工作方式:定时/计数器0(T0)是一个8位的定时器/计数器,它可以进行定时或计数操作。
在定时模式下,它可以作为定时器在规定的时间段内进行计时;在计数模式下,它可以根据外部信号的脉冲计数。
在定时模式下,T0可以通过设置控制寄存器TCON的位4(TR0)来启动或停止计时操作。
当TR0为1时,定时器开始计时;当TR0为0时,定时器停止计时。
定时器的工作频率可以通过控制寄存器TMOD的位1和位0来设置。
在计数模式下,T0可以通过设置TCON的位5(CT0)来选择定时器或计数器操作。
当CT0为0时,定时器工作,当CT0为1时,计数器工作。
同时,在计数模式下,还需要通过设置控制寄存器TMOD的位1和位0来设置计数器的工作频率。
定时/计数器0还可以使用中断功能,通过设置控制器IE的位4(ET0)来开启或关闭中断。
当ET0为1时,当定时器溢出时会产生中断请求,可以在中断服务程序中处理相应的操作。
二、定时/计数器1(T1)工作方式:定时/计数器1(T1)也是一个8位的定时器/计数器,它可以进行定时或计数操作。
类似于T0,T1也可以在定时模式下作为定时器进行计时,或者在计数模式下根据外部信号的脉冲进行计数。
在定时模式下,T1可以通过设置TCON的位6(TR1)来启动或停止计时操作。
当TR1为1时,定时器开始计时;当TR1为0时,定时器停止计时。
定时器的工作频率可以通过设置TMOD的位3和位2来设置。
在计数模式下,T1可以通过设置TCON的位7(CT1)来选择定时器或计数器操作。
当CT1为0时,定时器工作;当CT1为1时,计数器工作。
51单片机定时器的使用

151单片机定时器/计时器的使用步骤:1、 打开中断允许位:对IE 寄存器进行控制,IE 寄存器各位的信息如下图所示:EA : 为0时关所有中断;为1时开所有中断ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES : 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开2、 选择定时器/计时器的工作方式:定时器TMOD 格式CPU 在每个机器周期内对T0/T1检测一次,但只有在前一次检测为1和后一次检测为0时才会使计数器加1。
因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。
由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。
通常,T0或T1输入线上的计数脉冲频率总小于100kHz 。
方式0:定时器/计时器按13位加1计数,这13位由TH 中的高8位和TL 中的低5位组成,其中TL 中的高3位弃之不用(与MCS-48兼容)。
13位计数器按加1计数器计数,计满为0时能自动向CPU 发出溢出中断请求,但要它再次计数,CPU 必须在其中断服务程序中为它重装初值。
方式1:16位加1计数器,由TH 和TL 组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。
2方式2:计数器被拆成一个8位寄存器TH 和一个8位计数器TL ,CPU 对它们初始化时必须送相同的定时初值。
当计数器启动后,TL 按8位加1计数,当它计满回零时,一方面向CPU 发送溢出中断请求,另一方面从TH 中重新获得初值并启动计数。
方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。
在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。
MCS-51单片机的定时器-计数器

MCS-51的定时器/计数器共有四种工作方式。工作在方式0、方 式1和方式2时,定时器/计数器0和定时器/计数器1的工作原理完全 一样,现以定时器/计数器0为例介绍前三种工作方式。
1. 方式0(M1M0=00) (1)电路逻辑结构
方式0是13位计数结构的工作方式,其计数器由TH0全部8位 和TL0的低5位构成。TL0高三位弃之不用。图6.4 是定时器/计数 器0工作在方式0的逻辑结构。
分析:题目的要求可用下图来表示。
。
P1.0
8051 250 s 250 s
由上图可以看出只要使 的电位每隔250 取一次反即可。所 以定时时间应取250 。
1)计算计数初值 设计数初值为x,由定时计算公式知:
2)专用寄存器的初始化
D7
D6 D5 D4
D3
D2 D1
D0
GATE
GATE
所以,TMOD应设置为:10H 开放定时器/计数器1中断,所以IE应设置为:88H
当GATE=1时,只有TR0和 同时为高电平,定时器/计数 器 才工作,否则,定时器/计数器不工作。
(2)定时和计数的应用 计数范围:1~213 计数计算公式:计数值=213-计数初值 定时范围:1机器周期~213机器周期 定时计算公式:定时时间=(213-定时初值)×机器周期 如果晶振频率为6MHz ,则最大定时时间为: 213×1/6MHz×12=214( )
单片机原理及应用
MCS-5单片机内部共有两个16位可编程的定时器/计数器,即 定时器T0和定时器T1它们既有定时功能又有计数功能。
1.1 结构
定时器/计数器的基本结构如图6.3所示。基本部件是两个8位计 数器(其中TH1和TL1是T1的计数器,TH0和TL0是T0的计数器)。
2-MCS51单片机原理-定时器解析

MOV TL0,#9CH ;T0置初值
MOV TH0,#9CH
SETB TR1 ;启动T1
HERE: AJMP HERE
方式3的应用
T0工作在方式3时,TL0和TH0被分成两个独立的8位
定时器/计数器。其中,TL0可作为8位的定时器/计
数器;而TH0只能作为8位的定时器。
33
当T1用作串行口波特率发生器时,T0才设置为方式3。 此时,常把T1设置为方式2,用作波特率发生器。
31
外部信号由T1(P3.5) 脚输入,每发生一次负跳变计数 器加1,每输入100个脉冲,计数器产生溢出中断, 在中断服务程序中将P1.0取反一次。
T1工作在方式2的控制字为TMOD=60H。不使用T0 时,TMOD的低4位可任取,但不能使T0进入方式 3,这里取全0。
(2)计算T1的初值
X=28-100=156=9CH
18
定时器/计数器的编程和应用 4种工作方式中,方式0与方式1基本相同,由于方式0
是为兼容MCS-48而设,其计数初值计算复杂,在 实际应用中,一般不用方式0,而采用方式1。 方式1应用 例1 假设系统时钟频率采用6MHz,要在P1.0上输出 一个周期为2ms的方波,如图所示。
19
方波的周期用T0来确定,让T0每隔1ms计数溢出1次, 既T0每隔1ms产生一次中断,CPU相应中断后, 在中断服务程序中对P1.0取反。
(2) C/T*——计数器模式和定时器模式选择位 0:定时器模式。 1:计数器模式。
6
(3) GATE——门控位 0:以运行控制位TRX(X=0,1)来启动 定时器/计数器运行。 1: 用 外 中 断 引 脚 ( INT0* 或 INT1* ) 上 的 高电平来启动定时器/计数器运行。
51单片机的定时器_计数器的C51编程

51单片机的定时器_计数器的C51编程相关知识点:1、单片机的定时器/计数器,实质是按一定时间间隔、自动在系统后台进行计数的。
2、当被设定工作在定时器方式时,自动计数的间隔是机器周期(12个晶振振荡周期),即计数频率是晶振振荡频率的1/12;3、当定时器被启动时,系统自动在后台,从初始值开始进行计数,计数到某个终点值时(方式1时是65535),产生溢出中断,自动去运行定时中断服务程序;注意,整个计数、溢出后去执行中断服务程序,都是单片机系统在后台自动完成的,不需要人工干预!4、定时器的定时时间,应该是(终点值-初始值)x机器周期。
对于工作在方式1和12MHz时钟的单片机,最大的计时时间是(65535-0)x1uS=65.535ms。
这个时间也是一般的51单片机定时器能够定时的最大定时时间,如果需要更长的定时时间,则一般可累加多定时几次得到,比如需要1秒的定时时间,则可让系统定时50ms,循环20次定时就可以得到1s的定时时间。
5、定时器定时得到的时间,由于是系统后台自动进行计数得到的,不受主程序中运行其他程序的影响,所以相当精确;6、使用定时器,必须先用TMOD寄存器设定T0/T1的工作方式,一般设定在方式1的情况比较多,所以可以这样设定:TMOD=0x01(仅设T0为方式1,即16位)、TMOD=0x10(仅设T1为方式1,即16位)、TMOD=0x11(设T0和T1为方式1,即都为16位)。
7、使用定时器,必须根据需要的定时时间,装载相应的初始值,而且在中断服务程序中,很多情况下得重新装载初始值,否则系统会从零开始计数而引起定时失败;8、要使用定时器前,还必须打开总中断和相应的定时中断,并启动之:EA=1(开总中断)、ET0=1(开定时器0中断)、TR0=1(启动定时器0)、ET1=1(开定时器1中断)、TR1=1(启动定时器1);9、注意中断服务程序尽可能短小精干,不要让它完成太多任务,尤其尽量避免出现长延时,以提高系统对其他事件的响应灵敏度.//定时器基本例程-1(未使用定时器,一个灯每隔500ms亮灭一次)//这是个特意安排的例程,以便与下面的例程2进行对比#include <reg52.h>sbit led=P2^7;void delay_ms(unsigned int xms); //ms级延时子程序//=================================================void main(){led=1; //上电初始化,led灯不亮while(1){led=!led;delay_ms(500);}}//=================================================void delay_ms(unsigned int xms) //ms级延时子程序{ unsigned int x,y;for(x=xms;x>0;x--)for(y=130;y>0;y--);}//-------------------------------------------------//定时器基本例程-2(使用定时器,一个灯每隔500ms亮灭一次)#include <reg52.h>sbit led=P2^7;unsigned char num;void delay_ms(unsigned int xms); //ms级延时子程序//=================================================void main(){led=1; //上电初始化,led灯不亮TMOD=0x01; //设定定时器0为工作方式1TH0=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; //EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0while(1){delay_ms(8000);}}//=================================================void delay_ms(unsigned int xms) //ms级延时子程序{ unsigned int x,y;for(x=xms;x>0;x--)for(y=130;y>0;y--);}//-------------------------------------------------void led_flash() interrupt 1 //使用了定时中断0的led闪烁子函数{ TH0=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000 TL0=(65536-50000)%256; //num++;if(num==10){num=0;led=!led;}}////定时器基本例程-3//(使用定时器T1,单片机整个口接的8个灯每隔500ms亮灭一次)#include <reg52.h>#define led_port P0 //宏定义,具体的端口尽量不要出现在主函数和主函数中unsigned char num;void delay_ms(unsigned int xms); //ms级延时子程序//=================================================void main(){led_port=0xff; //上电初始化,所有led灯不亮TMOD=0x10; //设定定时器1为工作方式1(16位方式)TH1=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; //EA=1; //开总中断ET1=1; //开定时器1中断TR1=1; //启动定时器1while(1){delay_ms(8000); //这句表明定时中断的运行是在系统后台自动运行的,不需要主函数“操心”}}//=================================================void delay_ms(unsigned int xms) //ms级延时子程序{ unsigned int x,y;for(x=xms;x>0;x--)for(y=130;y>0;y--);}//-------------------------------------------------void led_flash() interrupt 3 //使用了定时中断1的8灯闪烁子函数{ TH1=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; //num++; //计数if(num==10) //计够10次,时间就是10x50ms=500ms{num=0; //清零,以便进行下一次500ms的10次计数led_port=~led_port; //整个口接的led灯亮灭状态翻转}}//-------------------------------------------------//定时器基本例程-4//(同时使用定时器T0和定时器T1,单片机某个口的灯和某个口接的8个灯每隔500ms亮灭一次)#include <reg52.h>sbit led=P2^7;#define led_port P0 //宏定义,具体的端口尽量不要出现在主函数和主函数中unsigned char num_0,num_1;void delay_ms(unsigned int xms); //ms级延时子程序//=================================================void main(){led=1; //上电初始化,led灯不亮led_port=0xff; //上电初始化,该口所有led灯不亮TMOD=0x11; //设定定时器0和定时器1都为工作方式1(16位方式)TH0=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; //TH1=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; //EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0ET1=1; //开定时器1中断TR1=1; //启动定时器1while(1){delay_ms(8000); //这句表明定时中断的运行是在系统后台自动运行的,不需要主函数“操心”}}//=================================================void delay_ms(unsigned int xms) //ms级延时子程序{ unsigned int x,y;for(x=xms;x>0;x--)for(y=130;y>0;y--);}//-------------------------------------------------void led_flash() interrupt 1 //使用了定时中断0的led闪烁子函数{ TH0=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL0=(65536-50000)%256; //num_0++; //计数if(num_0==10) //计够10次,时间就是10x50ms=500ms{num_0=0; //清零,以便进行下一次500ms的10次计数led=!led; //led灯亮灭状态翻转}}//-------------------------------------------------void led_all_flash() interrupt 3 //使用了定时中断1的8灯闪烁子函数{ TH1=(65536-50000)/256; //装载初始值,12MHZ晶振50ms数为50000TL1=(65536-50000)%256; //num_1++; //计数if(num_1==10) //计够10次,时间就是10x50ms=500ms{num_1=0; //清零,以便进行下一次500ms的10次计数led_port=~led_port; //整个口接的led灯亮灭状态翻转}}//-------------------------------------------------//定时器基本例程-5//设定定时器T0工作在方式1的计数应用状态,//单片机T0口(P3.4)接一个按键充当外部脉冲源,//系统对进来的脉冲(每按一次键得一脉冲)进行计数,//计数的结果用接在单片机P0口的8个LED灯表示出来//(大家也可以改成用1602LCD来显示,这样更直观)//广西民大物电学院李映超2010年4月14日#include <reg52.h>#define led_port P0 //宏定义,具体的端口尽量不要出现在主函数和主函数中//=================================================void main(){TMOD=0x05; //设定定时器0为工作方式1、计数器TH0=0; //清零TL0=250; //TR0=1; //启动定时器0进行计数while(1){led_port=TL0; //将计数结果送去显示(用8个LED灯显示),//这里仅显示16位计数器的低8位}}定时器0仍旧工作在计数器状态,增加定时器1工作在定时状态,得到1s的定时时间,定时时间到后,将定时器0计数得到的脉冲数去显示,则这个脉冲数就是所输入的外部信号的频率,从而构成一个简单而准确的频率计!!不过,这个简单的“频率计”能够计量的信号频率(脉冲数),受单片机中断响应速度的影响,一般只能达到单片机系统时钟晶振的1/24,所以要能够测量更高的频率,必须使用前置分频器,对更高频率的待测输入信号进行预分频!。
51单片机定时器工作原理

51单片机定时器工作原理51单片机是一款广泛使用的微控制器,它的定时器功能可以用于实现定时操作、计时、脉冲计数等功能。
本文将介绍51单片机定时器的工作原理。
01、51单片机的定时器51单片机的定时器包括两个独立的定时器,即定时器0和定时器1。
每个定时器都由一个8位计数器和一组控制寄存器组成。
这些寄存器被映射到特定的内存地址,并且可以通过读写这些地址来控制定时器的工作方式。
02、定时器的计数器定时器的计数器是一个8位的寄存器,它通过每次递增来实现计时操作。
当计数器的值达到最大值255时,它会自动重置为0,从而形成一个循环计时器。
通过改变计数器的初值可以改变定时器的定时时长。
在51单片机中,计数器的初值可以通过内部RAM、外部RAM或IO 口进行设置。
03、定时器的工作模式51单片机的定时器可以工作在4种不同的模式下,分别是方式0、方式1、方式2和方式3。
每种模式下,定时器的工作方式都不同,可以实现不同的定时器操作,如定时操作、计时操作、脉冲计数等。
在每种模式下,定时器的一些控制寄存器的设置也是不同的。
04、定时器的中断控制定时器在计时过程中可以触发中断信号,用于提示系统完成定时操作。
在51单片机中,可以通过设置中断允许位来开启定时器中断功能。
当定时器计时满足中断触发条件时,会自动发出中断信号,通知系统进行相应的中断处理。
05、注意事项在使用51单片机定时器时需要注意以下问题:1) 在每次使用定时器之前,必须先进行相应的初始化设置。
2) 定时器操作时需要注意定时器的中断允许位的设置,以便及时处理定时器计时的中断。
3) 在使用定时器时不要过度依赖计时精度,因为51单片机的晶振精度和定时器的延时误差可能会导致计时误差。
4) 在设计系统时应合理规划定时器的使用,以充分利用定时器的功能,同时避免出现冲突或资源浪费现象。
以上就是51单片机定时器的工作原理和注意事项,仅供参考。
通过对单片机定时器的深入学习和了解,可以更好地控制单片机系统的定时操作,实现更高效、可靠的工作。
简述mcs-51单片机中定时器方式0、方式1和方式2的工作特点。

MCS-51单片机中定时器的方式0、方式1和方式2具有不同的工作特点。
方式0是一个13位的定时器/计数器,其使用了16位寄存器(TH0和TL0)中的13位,包括TL0的低5位和TH0的8位,而TL0的高3位并未使用。
方式1是一个16位的定时器/计数器,TH0和TL0对应的16位全部参与计数运算。
当TH0和TL0计数满溢出时,硬件会自动将TF0置位并申请中断,同时16位加1计数器会从0开始继续计数。
在定时工作方式下,定时时间t对应的初值为X=216–t×fosc/12。
在计数工作方式下,计数长度最大为216=65536(个外部脉冲)。
方式2的特点是初值只需设置一次,每次溢出后,初值会自动从TH0加载到TL0或从TH1加载到TL1,但计数范围比方式1小。
在方式2中,只有TL0用作8位计数器参与脉冲计数工作,TH0不参与计数,只用来保存初值。
以上信息仅供参考,建议咨询专业计算机技术人员或者查阅专业书籍了解更多详细信息。
51单片机接口(定时器)8

PT0M0: MOV TL0,#0CH ;T0置初值低位 MOV TH0,#0F0H ;T0初值高位 SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 SETB EA ;CPU 开放中断 RET ;中断服务程序 IT0P: MOV TL0,#0CH ;T0置初值低位 MOV TH0,#0F0H ;T0初值高位 CPL P1.0 ;P1.0取反 RETI
TFi
中断申请
高位 + 模式2时:低位作8位计数器,高位作重装载 寄存器(看红色框图)
GATE
中断引脚 INTi
定时器T0的模式3结构
F0/12
C/T=0 引脚 T0 TR0 GATE 中断引脚 INT0
TL0
C/T=1
TF0
中断申请
+
模式3时:T0高8位也做计数器,但要借用T1 的控制位TR1和标志位TF1以及中断资源。 此时的T1只能工作于模式2或者休息。 TH0 TR1 TF1 中断申请
51定时器框图
i=0,1 指: T0,T1和 INT0,INT1
T0,T1的模式寄存器TMOD
MSB GATE C/T M1 M0 GATE C/T M1 LSB MO
定时器T1模式
定时器T0模式
当使用INTi测量脉宽时置1,否则置0 置1时选择Counter,时钟由引脚输入。 置0时选择Timer,时钟选用fosc/12 M1M0 两位二进制数表示选择定时器模式为 模式0~3 高4位管理定时器T1,低4位管理定时器T0 GATE C/ T
定时模式,模式2的预置值计算
方式2: 8位定计数器的最大计数值=28 =256 假设计数器工作在计数器方式2,要求计数 100个脉冲的计数初值的计算如下。设计数初 始值位x,则: 28 - x = 100 x = 156 因此THx=TLx=0x9CH。 以下就定时器的工作方式0举例说明定时器的 应用方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.2.1 工作方式控制寄存器TMOD
*M0 位分为两组,高 4位控制T1,低4位控制T0。 (3) (2) C/T 、 — 计数器模式和定时器模式选择位 — 工作方式选择位 (4)8M1 TMOD 无位地址,不能位寻址。 M0 工 作 方 式 0”。 (1) GATE — TMOD 门控位 0: 定时器模式。 (5)M1 复位时, 所有位均为“ 0 0 方式0,13位定时器/计数器。 0: 以TRX (X=0,1) 来启动定时器/计数器运行。 1: 计数器模式。 0 1 方式1,16位定时器/计数器。 * 或 INT1 * ) 上的高电平和 1: (INT0 用外中断引脚 1 0 方式2,8位常数自动重新装载 TRX来启 动定时器/计数器运行。 1 1 方式3,仅适用于T0,
8位计数器TL0使用T0的状态控制位C/T*、GATE、TR0、 INT0,它既可以工作在定时方式,也可以工作在计数方式。 8位定时器TH0被固定为一个8位定时器(不能作外部计数模 式) ,并使用定时器T1的状态控制位TR1,同时占用定时器 T1的中断请求源TF1。此时,定时器TH0的启动或停止只受 TR1控制。 TR1=1时,启动TH0的计数; TR1=0时,停止TH0的计数
可编程定时器的工作方式、启动、停止、溢出标 志、计数器等都是可编程的——通过设置寄存器 TMOD,TCON,TH0,TL0,TH1和TL1 实现。
当设置了定时器的工作方式并启动定时器工作后, 定时器就按被设定好的工作方式独立工作,不再 占用CPU,只有在计数器计满溢出时才向CPU申 请中断,占用CPU。 由此可见,定时器是单片机中工作效率高且应用 灵活的部件。
12
5.1 定时器的结构及工作原理
定时/计数器对输入信号的要求
1.
外部计数脉冲的最高频率为系统振荡器频率的1/24,例如 选用12MHz频率的晶体,则可输入500KHz的外部脉冲。
输入信号的高、低电平至少要分别保持一个机器周期。 如图所示,图中Tcy为机器周期。
2.
13
5.1 定时器的结构及工作原理
指令周期 S1 S2 机器周期 S3 S4 S5 S6 S1 S2 机器周期 S4 S3 S5 S6 P P P P XTAL2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 1 P2 P1 P2 1 P2 1 P2 1 P2 P1 P2 P1 P2 (OSC) 振荡周期 状态周期
(4)对TCON寄存器中的TR0或TR1置位,启动定时/计数
器,置位以后,计数器即按规定的工作模式和初值进行计 数或开始定时。
20
5.2.3 定时/计数器的初始化
初值计算:
设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。
(2) 当GATE=1时, “与门”的输出信号K由INTx输入 电平和TRx位的状态一起决定(即此时K=TRx·INTx),
当且仅当TRx=1且INTx=1(高电平)时,计数启动; 否则,计数停止。
返回
27
5.3 定时器的工作方式——方式1
5.3.2 方式1
M1、M0=01,为16位的计数器,除位数外,其他与方式0相同。
(2) 定时器工作模式
也是通过计数实现的。计数脉冲来自内部时钟脉冲,每个机器周期 计数值增1,每个机器周期=12个振荡周期,因此计数频率为振荡频 率的1/12。所以定时时间=计数值×机器周期。
4种工作方式 (方式0-方式3) 。
8
5.1 定时器的结构及工作原理
f0
f f 0 /12
加1计数器 定时
26
5.3 定时器的工作方式——方式0
GATE控制定时器Tx(T1或T0)的条件:
(1) 当GATE=0时,“或门”输出恒为1,“与门”的输 出信号K由TRx决定(即此时K=TRx),定时器不受INTx 输入电平的影响,由TRx直接控制定时器的启动和停止。 TRx=1;计数启动; TRx=0;计数停止;
5.3 定时器的工作方式
MCS-51的定时器T0有4种工作方式:
即:方式0,方式1,方式2,方式3。
MCS-51的定时器T1有3种工作方式:
即:方式0,方式1,方式2。
23
5.3 定时器的工作方式——方式0
5.2.1 方式0
M1、M0设置为00 ,为13位计数器,以T1为例, 其框图如下:
定时器/计数器及其应用
定时器/计数器及其应用
定时器/计数器的应用场合: 定时或延时控制、对外部事件的检测、计数 等;
MCS-51系列8031、8051单片机有两个 16位定时器/计数器(即T0和T1); 8032、8052单片机有3个16位定时器/计 数器(即T0、 T1和T2);
2Biblioteka 定时器/计数器及其应用
5.3.1 5.3.2 5.3.3 5.3.4
方式0 方式1 方式2 方式3
5.4 定时器的编程和应用
5
第5章 定时器/计数器及其应用
5.1 定时器的结构及工作原理
6
5.1 定时器的结构及工作原理
内 部 结定 构时 框器 图
组成:两个16位的定时器T0和T1,以及他们的工作方式寄存器 TMOD和控制寄存器TCON等组成。内部通过总线与CPU相连。 定时器T0和T1各由两个8位特殊功能寄存器TH0、TL0、TH1、 TL1构成。 工作方式寄存器TMOD:用于设置定时器的工作模式和工作方式; 控制寄存器TCON:用于启动和停止定时器的计数,并控制定时器 的状态; 单片机复位时,两个寄存器的所有位都被清0。
THx 作为常数缓冲器,当 TLx 计数溢出时,在置“ 1 ”溢出标志 TFx 的同时,还自动的将 THx 中的初值送至 TLx ,使 TLx从初值开 始重新计数。定时器/计数器的方式2工作过程如图 (x=0, 1) 。
29
5.3 定时器的工作方式——方式2
优点:
方式0和方式1用于循环重复定时或计数 时,在每次计数器挤满溢出后,计数器 复0。若要进行新一轮的计数,就得重 新装入计数初值。这样一来不仅造成编 程麻烦,而且影响定时精度。而方式2 具有初值自动装入的功能,避免了这个 缺点,可实现精确的定时。
Tx TRx
计数
THx
TLx
TFx
控制信号K “1”启动,计数器运行; “0”停止,计数器停止;
定时器/计数器原理框图 INTx 当控制信号 C/T = 0 定时器工作在定时方式;加1计数器对脉冲f 进行计数,每来一个脉冲,计数器加 1,直到计时器计满溢出; 因为 f f 0 /12 ,即一个计数脉冲的周期就是一个机器周期;计数 器计数的是机器周期脉冲个数。从而实现定时。
25
5.3 定时器的工作方式——方式0
当C/T=0时,为定时工作模式,开关接到振荡器 的12分频器输出上,计数器对机器周期脉冲计数。 其定时时间为: (213-初值)×振荡周期×12
例如:若晶振频率为12MHz,则最长的定时时间 为(213-0)×(1/12)×12us=8.191ms
当C/T=1时,为计数工作模式,开关与外部引脚 T1(P3.5)接通,计数器对来自外部引脚的输入脉 冲计数。当外部信号发生负跳变时计数器加1。
7
8051
5.1 定时器的结构及工作原理
两个可编程的定时器/计数器T1、T0。 每个定时器内部结构实际上就是一个可编程的加法计数器, 由编程来设置它工作在定时状态还是计数状态。
两种工作模式: (1) 计数器工作模式
就是对外部事件进行计数。计数脉冲来自相应的外部输入引脚T0 (P3.4)或T1(P3.5)。当输入信号发生由1至0的负跳变(下降沿)时, 计数器(TH0,TL0或TH1,TL1)的值增1。计数的最高频率一般为 振荡频率的1/24。Why?
缺点:
只有8位计数器,定时时间短、计数范 围小。其定时时间为: (28-初值)×振荡周期×12
若晶振频率为12MHz,则最长的定时时间为 (28-0)×(1/12)×12us=0.256ms
方式2工作过程图 (x=0, 1) 。
30
5.3 定时器的工作方式——方式3
5.3.4 方式3 只适用于定时器/计数器T0。T1不能工作在方式3。 如果将T1置为方式3,则相当于TR1=0,停止计数 (此时T1 可用来作串行口波特率产生器) 。 1. 工作方式3下的T0 T0在方式3时被拆成两个独立的8位计数器:TH0和TL0。
在每个机器周期的S5P2期间采样检测引脚输入电平。 若前一个机器周期采样值为“1”,后一个机器周期采样值 为“0”,则计数器加1。 新的计数值在检测到输入引脚电平发生“1”到“0”的负 跳变(下降沿)后,于下一个机器周期的S3P1期间装入计 数器中。
由于CPU需要两个机器周期来识别一个“1”到“0”的跳变 信号,所以最高的计数频率为振荡周期的1/24。
T0分成两个8位计数器,T1停止计数。
17
5.2.2 控制寄存器TCON
低4位与外部中断有关,后面介绍。高4位的功能如下: (1) TF1、TF0 —计数溢出标志位 定时器T0或T1计数溢出时,由硬件自动将此位置“1”; TFx可以由程序查询,也是定时中断的请求源; (2) TR1、TR0 —计数运行控制位 TRx=1: 启动定时器/计数器工作 TRx=0: 停止定时器/计数器工作
18
5.2.3 定时/计数器的初始化
MCS-51单片机的定时器/计数器是可编程的,但在进行定 时或计数之前要对程序进行初始化,具体步骤如下: (1)对TMOD赋值,以确定定时器的工作模式; (2)置定时/计数器初值,直接将初值写入寄存器的TH0、 TL0或TH1、TL1; (3)根据需要,对IE置初值,开放定时器中断;