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举例说明定时器的 应用方法
MCS51单片机中的定时器
7
1.3
定时器/计数器的功能
定时器/计数器具有定时和计数两种功能,应用范围如下。 1. 定时与延时控制方面 可产生定时中断信号,以设计出各种不同频率的信号源; 产生定时扫描信号,对键盘进行扫描以获得控制信号,对 显示器进行扫描以不间断地显示数据。 2. 测量外部脉冲方面 对外部脉冲信号进行计数可测量脉冲信号的宽度、周期, 也可实现自动计数。 3. 监控系统工作方面 对系统进行定时扫描,当系统工作异常时,使系统自动复 位,重新启动以恢复正常工作。
振荡器 12 分频
TC/ =0 C/T TC/ =1 C/T
&
TH0 (8 位)
TL0 (5 位)
TF0
中断
T0(P3.4) TR0 GATE INT0(P3.2)
1
≥1
定时器/计数器0方式0逻辑结构
17
3.1 定时器/计数器的初始化
【例1】 用定时器0方式0,定时5ms,以中断方式工作,进行 程序初始化设计,晶振频率为6MHz。 解:用定时器0方式0时,定时器/计数器方式寄存器TMOD低4 位中的M1M0应取00;可设定为软件启动定时器,故 GATE取0;因用定时功能,C/T取0;定时器方式寄存器 TMOD高4位为无关位,一般都取0,所以TMOD应为00H。 晶振频率为6MHz,T机=12/fosc=12/(6106)=2s 定时初值X=213-T/T机=213-51000/2=8192-2500=5692 =163CH=1011000111100B 因TL0的高3位未用,对计算出的定时初值X要进行修正, 即在低5位前插入3个0,修正后的定时初值 X=1011000100011100B=B11CH
005DH
0060H 0062H 0065H 0068H
51单片机的定时器应用解析
51单片机的定时器应用解析定时器是一种多功能的外设,可以在嵌入式系统中广泛应用。
在 51 单片机中,定时器分为两种:定时/计数器和串行接口定时器(SIT)。
这篇文档将着重介绍定时/计数器的应用。
定时器基础定时器由两个 8 位定时器(Timer0 和 Timer1)和一个 16 位定时器(Timer2)组成。
定时器通过计数器实现定时功能,计数器钟频为定时器输入时钟的一半。
定时器的定时时间可以通过改变计数器初始值和时钟源分频系数来实现。
定时器应用延时定时器可以用来实现延时功能,常见的延时方式是使用定时器产生中断,在中断服务程序中完成延时操作。
PWM定时器可以用来实现脉冲宽度调制(PWM)功能,PWM 的输出占空比可以通过改变计数器初始值和重载值来实现。
计数器定时器也可以作为计数器使用。
在计数器模式下,定时器向计数器输入信号计数,并将计数值存入寄存器中。
定时器使用示例中断延时void init_timer0(unsigned int ms){TMOD &= 0xF0;TMOD |= 0x01;TH0 = ( - FOSC / 1000 * ms) >> 8;TL0 = ( - FOSC / 1000 * ms) & 0xFF;ET0 = 1;TR0 = 1;}void timer0_isr() __interrupt (1){static unsigned char cnt = 0;TH0 = ( - FOSC / 1000 * ms) >> 8;TL0 = ( - FOSC / 1000 * ms) & 0xFF;if(cnt++ >= 20){cnt = 0;// do something every 20 ms}}PWMvoid init_timer1(unsigned int freq, unsigned char duty_cycle) {TMOD &= 0x0F;TMOD |= 0x10;TH1 = ( - FOSC / freq / 2) >> 8;TL1 = ( - FOSC / freq / 2) & 0xFF;// calculate duty cycleunsigned int reload = (unsigned int)(FOSC / freq * duty_cycle / 100 / 2);// set duty cycleRCAP2H = reload >> 8;RCAP2L = reload & 0xFF;TR1 = 1;}结论定时器是 51 单片机中常用的外设之一,可以实现延时、PWM 等多种功能。
51单片机定时时钟工作原理
51单片机定时时钟工作原理51单片机(也被称为8051微控制器)的定时器/计数器是一个非常有用的功能,它允许用户在特定的时间间隔内执行任务。
下面是其基本工作原理:1. 结构:8051单片机通常包含两个定时器/计数器,称为Timer0和Timer1。
每个定时器都有一个16位的计数器,可以用来跟踪经过的时间或事件。
2. 时钟源:定时器的核心是一个振荡器或外部时钟源,为计数器提供脉冲。
通常,这个时钟源可以是内部的,也可以是外部的。
内部时钟源通常基于系统时钟,而外部时钟源则直接从外部硬件输入。
3. 计数过程:每当振荡器产生一个脉冲,计数器就会增加(对于向上计数的定时器)或减少(对于向下计数的定时器)一个单位。
这取决于定时器的模式。
4. 溢出:当计数器达到其最大值(对于向上计数的定时器)或达到0(对于向下计数的定时器)时,会发生溢出事件。
这会导致一个中断,可以用来执行特定的任务或操作。
5. 分频:在某些模式下,计数器的输出可以用来分频系统时钟,从而产生更精确的定时器时钟。
6. 预分频器:预分频器允许用户设置一个值,该值决定了振荡器的输入脉冲被分频的次数。
这有助于控制计数器的速度,从而控制定时器的精度。
7. 工作模式:8051微控制器支持多种定时器模式,包括正常模式、自动重装载模式和比较模式。
每种模式都有其特定的应用和行为。
8. 中断:当定时器溢出时,可以产生一个中断。
这意味着微控制器可以暂时停止当前的任务,转而处理与定时器相关的特定任务。
通过合理配置和使用这些定时器/计数器,开发人员可以在8051单片机上实现精确的时间控制和事件调度。
这对于实现诸如延时、精确计时和脉冲生成等功能非常有用。
51单片机定时器总结
51 单片机定时器总结
1.定时器TMOD 寄存器
C/T 这一位用来控制定时器工作方式。
本来T 上面有一横表示低电平有效。
c 为计数,也即是及外部脉冲的个数,也会是定时器溢出及中断。
GATE 这一位用来设定外部中断脉冲是否可启动定时器。
意思就是当GATE=1 时,定时器的启动有二个位控制,即TR0 和int0(这是对定时器0 来说的,T1 的话上二位就是1)。
定时器只有在上二位都是一的情况下才会启动。
我们就可以利用这个功能来测量脉冲的宽度。
我们知道在其他单片机中我们测脉冲宽度可以利用外部中断在上升沿河下
降沿各读取一次定时器值来测定。
但51 单片机没有上升沿中断,也就没有办法测出高电平宽度。
现在我们可以这样做,令TR0=1,GATE=1,这时定时器的启动只有INT0 控制。
当INT0 为高电平时定时器启动,为低电平时定时器关闭。
我们设置下降沿中断,在中断中就可以读取高电平所占的时间了。
但是这样做只能得到高电平时间按。
要想得到脉冲周期,可以再开一个定时器,另外一个就正常工作,这样就可以得到脉冲周期。
也就可以求出脉冲宽
度了。
T0 的工作方式3 相信很少人记得,我还没有用过,但是我感觉做起码在我们需要用到的时候,还知道有这个功能。
方式3 可以把T0 当作二个独立的
计数器使用。
在高级应用中肯定会有用吧。
51单片机定时器(二)
51单⽚机定时器(⼆)书接上回,下⾯是定时器的其他⼯作⽅式。
⼀、⼯作⽅式1:(还是拿t0做说明)定时/ 计数器的⼯作⽅式1⾃⼰经验是⽤的⽐较多的,它的结构图如下:TH0的⼋位和TL0的⼋位构成⼀个16位定时/计数器,可以定时时间最长在⼯作⽅式1下,计数器的计数值范围是:1—65536(216)当为定时⼯作⽅式1时,定时时间的计算公式为:(216—计数初值)╳晶振周期╳12或(216—计数初值)╳机器周期其时间单位与晶振周期或机器周期相同。
如果单⽚机的晶振选为6.000MHz,则最⼩定时时间为:[213—(216—1)]╳1/6╳10-6╳12=2╳10-6(s)=2(us)(216—0)╳1/6╳10-6╳12=131072╳10-6(s)=131072(us)。
⼯作⽅式1的使⽤,和⽅式0完全⼀样,不必赘⾔。
⼆、⼯作⽅式2⼯作⽅式2的结构图如下:从图中可以看出来,计数寄存器变成了⼀个——TL0,⼯作⽅式2下多了⼀个重装载寄存器,也就是原来的TH0。
在⼯作⽅式2下,如果TL0中的数据溢出,那么原先存储在TH0中的数据就会⾃动的装载到TL0中去,这是由单⽚机的硬件实现的,这样我们就不⽤在⼿动给定时器赋初值,⽽且硬件重装载不会耽误时间,所以⼯作⽅式2的计时是最准确的。
但是就是这样⼀来的计数结构只有8位,计数值有限,最⼤只能到255。
所以这种⼯作⽅式很适合于那些重复计数的应⽤场合。
例如我们可以通过这样的计数⽅式产⽣中断,从⽽产⽣⼀个固定频率的脉冲。
也可以当作串⾏数据通信的波特率发送器使⽤。
⼯作⽅式2下的其他使⽤和⼯作⽅式0,1相同。
三、⼯作⽅式3之前的3种⼯作⽅式中,定时器t0和t1的⼯作⽅式完全相同,⽽在⼯作⽅式3中终于有了个性的发挥不在相同了。
下⾯是⼯作⽅式3情况下t0的结构图。
可以看出,t0被分成了2个定时器,每个⼋位,定时/计数器0的TL0拆成的定时器和之前⽅式0,1⼀样,不过TH0拆成的就“因霸”了,它把原先定时器1的溢出标志位给占⽤了,⽽且还不受GATE门控的控制,这样以来,如果定时器0的TH0构成的8位定时器在使⽤,定定时器1就憋屈了,没有溢出位使⽤。
51单片机定时器设置
51单片机定时器设置51单片机,也被称为8051微控制器,是一种广泛应用的嵌入式系统。
它具有4个16位的定时器/计数器,可以用于实现定时、计数、脉冲生成等功能。
通过设置相应的控制位和计数初值,可以控制定时器的启动、停止和溢出等行为,从而实现精确的定时控制。
确定应用需求:首先需要明确应用的需求,包括需要定时的时间、计数的数量等。
根据需求选择合适的定时器型号和操作模式。
设置计数初值:根据需要的定时时间,计算出对应的计数初值。
计数初值需要根据定时器的位数和时钟频率进行计算。
设置控制位:控制位包括定时器控制寄存器(TCON)和中断控制寄存器(IE)。
通过设置控制位,可以控制定时器的启动、停止、溢出等行为,以及是否开启中断等功能。
编写程序代码:根据需求和应用场景,编写相应的程序代码。
程序代码需要包括初始化代码和主循环代码。
调试和测试:在完成设置和编程后,需要进行调试和测试。
可以通过观察定时器的状态和输出结果,检查定时器是否按照预期工作。
计数初值的计算要准确,否则会影响定时的精度。
控制位的设置要正确,否则会导致定时器无法正常工作。
需要考虑定时器的溢出情况,以及如何处理溢出中断。
需要考虑定时器的抗干扰能力,以及如何避免干扰对定时精度的影响。
需要根据具体应用场景进行优化,例如调整计数初值或控制位等,以达到更好的性能和精度。
51单片机的定时器是一个非常实用的功能模块,可以用于实现各种定时控制和计数操作。
在进行定时器设置时,需要注意计数初值的计算、控制位的设置、溢出处理以及抗干扰等问题。
同时需要根据具体应用场景进行优化,以达到更好的性能和精度。
在实际应用中,使用51单片机的定时器可以很方便地实现各种定时控制和计数操作,为嵌入式系统的开发提供了便利。
在嵌入式系统和微控制器领域,51单片机因其功能强大、使用广泛而备受。
其中,定时器中断功能是51单片机的重要特性之一,它为系统提供了高精度的定时和计数能力。
本文将详细介绍51单片机定时器中断的工作原理、配置和使用方法。
MCS-51系列单片机的定时器
件设置成定时工作方式或计数工作方式,工作方式 的设定由工作方式寄存器TMOD设置,由控制寄存 器TCON控制。
寄存器TMOD的字节地址为89H,其不可以进行位寻址,各位定义如 表6-1。
1、GATE-选通控制位(门控位) GATE=0,只要用软件对TR0(或TR1)置1就启动定 时器; GATE=l,只有外部中断INT1(或INT0)引脚为高电 平,且用软件对TR0(或TR1)置1才启动定时器。 2、C/ -工作方式选择位
时器计数器都具有计数和定时两种功能,并具有 3~4种工作方式。
51单片机定时器/计数器的逻辑结构如图6-1,可以看出,16位 的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和 TL0构成;T1由TH1和TL1构成,访问地址依次为8AH-8DH。 这些寄存器用于存放定时或计数初值,均可单独访问。此外,其 内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控 制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电 路连接起来的。TMOD主要是用于选定定时器的工作方式, TCON主要是用于控制定时器的启动停止,此外TCON还可以保 存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部 事件通过引脚T0(P3.4)和T1(P3.5)输入。
对定时器/计数器的工作方式寄存器TMOD中的M1 M0位进行设置,可以 使得定时器/计数器工作在4种工作方式下,下面对这4种方式做一下介绍。
6.3.1定时器/计数器的工作方式0
(1)计数结构 在工作方式0下,定时器/计数器采用13位计数结构。
(2)工作方式0的特点 ①两个定时器/计数器T0、T1均可在方式0下工作; ②13位计数结构,其计数器由THx全部8位和TLx的低5位构成(高3位不
51单片机定时器、串口、中断
51单⽚机定时器、串⼝、中断⽂章⽬录MCS-51功能单元⼀、定时器&计数器1. 数量:两个可编程的16位的定时器/计数器T0和T1;都是16位加法计数结构;分为⾼8位和低8位;TH0、TL0,TH1、TL1;定时器/计数器T0、T1是80C51的中断源之⼀,当数据寄存器溢出,则向CPU申请中断。
数据寄存器的复位状态为0。
为使计数值或定时值满⾜⾃⼰的要求,需预先将数据寄存器赋值,称为初值设定,中断中也要重新设定初值。
2. 定时器和计数器本质:都是计数器,对下降沿进⾏计数,计数达到溢出后置为标志位或者进⼊中断;3. 两者的区别:定时器是对内部的机械周期脉冲进⾏计数,每个脉冲都是⼀个机械周期;定时时间=机器周期*(2^L-初值) (L=13,16,8)计数器则是通过外部IO⼝进⾏脉冲计数,⼀个脉冲加⼀个数;对应IO⼝:T0-P3.4,T1-P3.5;计数长度:计数长度=(2^L-初值) (L=13,16,8)两者的模式切换通过TMOD控制4. TMOD结构图:5. TMOD详解GATE:门控位GATE =1,由中断引脚INT0(P3.2)、INT1(P3.3)和TCON中的位TR0、TR1共同控制来启动定时器/计数器GATE =0,由TR0和TR1置位来启动定时器/计数器**(⼀般为0)**C/!T:模式选择位:1时,计数器模式;0时,定时器模式;M0 & M1共同控制⼯作⽅式:项⽬开发⼀般⽤01,考试⼤概率考00;6. 启动停⽌与中断控制寄存器TCONTFx:定时器或者计数器溢出时置位1,请求中断,中断程序进⼊后⾃动清零;TRx:定时器启动控制位,当其等于1时定时器/计数器启动;7. 中断允许控制寄存器:IEETx:定时器/计数器的中断允许位EA:CPU总中断的允许位8. 定时器/计数器使⽤:(重点)⼯作⽅式的设置://设置定时器0⼯作在16位模式//C语⾔TMOD=0x01; //定时器//汇编MOV TMOD, #01H;计数初值的计算+装载:伪代码://机械周期1us,设置500us中断⼀次为FE0C//C语⾔TH0=0xFE;TL0=0x0C;//汇编MOV TH0, #0FEH ;MOV TL0, #0cH ;中断允许位的设置:伪代码://CEA=1;ET0=1;//assemblySETB EA ;turn on all interruptSETB ET0 ;turn on 0 interrupt开启定时器:伪代码://cTR0=1;//assemblySETB TR0 ;turn onCLR TR0 ;turn off !9. 使⽤实例:定时器使⽤⽅式(中断⽅式):ORG 0000H;AJMP MAIN;ORG 001BH;AJMP IRQ1;MAIN:MOV TMOD, #00H ;⼯作模式0,⾼8+低5MOV TH1, #0FCHMOV TL1, #03HSETB TR1;SETB ET1;SETB EA;AJMP $;IRQ1:MOV TMOD, #00HMOV TH1, #0FCHCPL P1.0RETI ;中断返回⼀定要加!计数器使⽤⽅式(中断⽅式):ORG 0000H;AJMP MAIN;ORG 001BH;AJMP IRQ1;MAIN:MOV TMOD, #04H ;计数器模式MOV TH1, #0FCH ;⼀千个下降沿中断⼀次 MOV TL1, #03HSETB TR1;SETB ET1;SETB EA;AJMP $;MOV TMOD, #00HMOV TH1, #0FCHCPL P1.0RETI ;中断返回⼀定要加!查询⽅式则是判断TF溢出标志,变⾼后进⼊⾃定义韩式处理数据,清空标志;⼆、并⾏⼝&串⾏⼝并⾏⼝:并⾏传输数据(不常⽤)占据资源⼤,错误率⾼,但快串⾏⼝:(重要)稳定,占据IO⼝⼩,准确,稍微慢1. 串⾏⼝控制寄存器SCON:SM0和SM1:串⾏⼝⽅式选择位;00-移位寄存器⽅式01-8位UART,波特率可变10-9位UART,波特率为fosc/64或fosc/32(PCON决定)11-9位UART,波特率可变⽅式1为常⽤通信⽅式;⽅式2、3为多机通信,⽅式0为移位寄存器,不常⽤;重要标志位:TI:发送完成标志RI:接收完成标志2. 串⼝波特率与定时器1关联,公式如下:波特率=2^SMOD * fosc / [32 * 12(2^K-初值)];(fosc系统主频)波特率翻倍寄存器:PCON只有最⾼位(SMOD)有效:为1时波特率翻倍,为0时不翻倍⽅式1串⼝通信接收代码:ORG 0000HLJMP MAINORG 0023HLJMP RX_TIMAIN:MOV SCON, #50HMOV PCON, #00HMOV TMOD, #02HMOV TH1, #0FDHMOV TL1, #0FDHSETB TR1SETB EASETB ESRX_TI:PUSH ACCMOV TH1, #0FDHMOV TL1, #0FDHMOV A, SBUF;处理POP ACCRETI发送套⽤代码:MOV SBUF, AJNB TI, $CLR TIRET三、中断系统所有中断控制位:TCON:TF1、TF0:定时器溢出标志、请求中断:IE1、IE0:外部中断溢出请求:IT1、IT0:外部中断触发⽅式选择-1下降沿触发、0低电平触发SCON:内部TI、RI触发接收发送中断。
51单片机定时器工作原理
51单片机定时器工作原理在嵌入式系统中,定时器是一个非常重要的模块,它可以用来进行定时操作、计数操作等。
而在51单片机中,定时器也是一个核心的功能模块。
本文将介绍51单片机定时器的工作原理,希望能够帮助大家更好地理解和应用定时器功能。
首先,我们来看一下51单片机中定时器的基本结构。
51单片机中有定时器/计数器T0和T1两个,它们都是16位的定时器/计数器。
每个定时器/计数器都有一个相关的控制寄存器,用来设置定时器的工作模式、计数初值等。
此外,定时器还有一个相关的中断控制寄存器,用来允许或禁止定时器中断。
定时器的工作原理主要包括定时器的工作模式、工作时钟源以及定时器的中断功能。
定时器的工作模式有4种,分别是模式0、模式1、模式2和模式3。
在不同的工作模式下,定时器可以实现不同的功能,比如定时器功能、计数功能等。
工作时钟源可以是外部时钟源,也可以是内部时钟源。
通过设置相关的控制寄存器,可以选择合适的工作时钟源。
定时器的中断功能可以在定时器溢出时产生中断请求,通过设置中断控制寄存器,可以允许或禁止定时器中断。
接下来,我们将详细介绍51单片机定时器的工作模式。
模式0是最简单的工作模式,定时器工作在方式0下时,定时器每次溢出都会产生一个中断请求。
模式1是定时器的13位工作模式,定时器每次溢出都会产生一个中断请求。
模式2是定时器的8位自动重装载模式,定时器每次溢出都会重新装载初值,并产生一个中断请求。
模式3是定时器的两个8位计数器工作在方式3下时,定时器可以实现两个独立的计数功能。
此外,定时器的工作时钟源也是非常重要的。
在51单片机中,定时器的工作时钟源可以是系统时钟、外部时钟或者定时器自己的时钟。
通过设置相应的控制寄存器,可以选择合适的工作时钟源。
最后,我们来介绍一下定时器的中断功能。
在51单片机中,定时器的中断功能可以在定时器溢出时产生中断请求,通过设置中断控制寄存器,可以允许或禁止定时器中断。
定时器中断可以在定时器溢出时执行一段中断服务程序,实现定时操作。
- 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置初值,开放定时器中断;