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时,计数器工作。
第6章MCS-51的定时器
• 28×12×1/12MHz=28us=256us=0.256ms
工作方式2_补充说明
8位计数器 TL0作计数器,TH0作预置寄存器使用,计数溢出时 ,TH0中的计数初值自动装入TL0,即TL0是一个自动 恢复初值的8位计数器。 在使用时,要把计数初值同时装入TL0和TH0中。 优点是提高定时精度,减少了程序的复杂程度。
工作方式1_应用分析
定时和计数的应用 计数范围:1~216 计数计算公式:计数值=216-计数初值 机器周期(MC):=12/Fosc=12/时钟频率 定时范围:1机器周期~216机器周期 定时计算公式:定时时间=(216-定时初值)×
机器周期 如果晶振频率为6MHz ,则最大定时时间为: 216×12×1/6MHz=217us=131072us=131.072ms 如果晶振频率为12MHz ,则最大定时时间为: 216×12×1/12MHz=216us=65536us=65.536ms 工作方式1的定时计数功能切换模式,与工作方式
0完全一样;而启动定时计数器的模式,也与工作方式 0完全一样。计数量方式1更大,可完全取代方式0。
6.2.3 方式2
方式2为自动重装初值的8位计数方式。
TCON
TF1 D7
申请 中断
TR1
溢出8位计数器
1
TF0
TL0
TR0
0 &
TH1重TH装0 单元 ≥1 8位
D0
T0引脚
机器周期 1
INT0引脚
6.1.1 工作方式控制寄存器TMOD TMOD(工作方式寄存器):选择定时器/计数器T0、T1的工作 模式和工作方式,字节地址为89H,不能位寻址。
8位分为两组,高4位控制T1,低4位控制T0。 (1)GATE——门控位
MCS-51单片机的定时器计数器
1. 定时器T0/T1 中断申请过程
(1)在已经开放T0/T1中断允许且已被启动的前提下, T0/T1加1计满溢出时 TF0/TF1标志位自动置“1” ;
(2)CPU 检测到TCON中TF0/TF1变“1”后,将产生指 令:LCALL 000BH/LCALL 001BH 执行中断服务程序;
(3)TF0/TF1标志位由硬件自动清“0”,以备下次中断申
郑州大学
docin/sundae_meng
(3)工作方式寄存器TMOD
T1
T2
GATE C / T M1 M0 GATE C / T M1 M0
M1,M0:工作方式选择位 。
=00:13位定时器/计数器; =01:16位定时器/计数器(常用); =10:可自动重装的8位定时器/计数器(常用); =11:T0 分为2个8位定时器/计数器;仅适用于T0。 C/T :定时方式/计数方式选择位。 = 1:选择计数器工作方式,对T0/T1引脚输入的外部事件 的负脉冲计数; = 0 :选择定时器工作方式,对机器周期脉冲计数定时。 如下页图所示。
CPL P1.0 MOV TH0,#15H MOV TL0,#0A0H
START:MOV SP,#60H MOV P1,#0FFH
SETB TR0 POP PSW
MOV TMOD,#01H MOV TH0,#15H MOV TL0,#0A0H
POP ACC RETI END
SETB EA
Байду номын сангаас
SETB ET0
定时器/计数器0采用工作方式1,其初值为:
21650ms/1s=6553650000=15536=3CB0H
电路图如下:
郑州大学
docin/sundae_meng
51单片机定时-计数器结构和计数器工作原理
使TR0或TR1置位,启动定时/计数器
晶体振荡器的振荡信号从XTAL2端输入到片内的时钟发生器上,时钟发
生器是一个二分频触发器电路,它将振荡器的信号频率除以2,向CPU提供
了两相时钟信号P1和P2。时钟信号的周期称为机器状态时间S,它是振荡
周期的2倍。在每个时钟周期(即机器状态时间S)的前半周期,相位1(即
P1信号)有效,在每个时钟周期的后半周期,相位2(即P2信号)有效。
提供
用途:定时器和计数器
核心:加1计数器
原理:每来一个脉冲则加1计数器加1,当加到全1时再来一个脉冲使加
1计数器归零,同时加1计数器的溢出使TCON寄存器中的TF0(或TF1)
置1,向CPU发出中断请求
脉冲来
补充:
计数器工作原理:
用作计数器时,对T0或T1引脚的外部脉冲计数,如果前一个机器周期
采样值为1,后一个机器周期采样值为0,则说明有一个脉冲,计数器加
1。
在每个机器周期的S5P2期间采样引脚输入电平。新的计数初值于下一个
机器周期的S3P1期间装入计数器。
此种方式需要两个机器周期来检测一个1->0负跳变信号,因此最高的计
数频率为时钟频率的1/24。
S5P2:
S5P2指的是第5个时钟周期的相位2。
工作原理:13位计数器,使用TL0的低5位和TH0的高8位组成,TL0
的低5位溢出时向TH0进位。TH0溢出时发出中断请求。
方式1
计算公式:
最大计数:65536个机器周期
工作原理:16位计数器,TL0作为低8位,TH0作为高8位
方式2:自动重装初值的8位计数方式
计算公式:p.s.晶振频率必须选择12的整数倍,因为定时器的频率是晶振
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的计数器)。
MCS-51最新单片机内部设有几个定时计数器?它们是由哪些专用
1、MCS-51单片机内部设有几个定时/计数器?它们是由哪些专用寄存器组成?答:MCS-51单片机内部设有2个定时/计数器。
他们由两个8位的特殊功能寄存器TCOM和TMOD,两个16位的特殊功能寄存器T0和T1构成。
2、MCS-51单片机的定时/计数器有哪几种操作模式?各有什么特点?答:MCS-51单片机的定时/计数器有4种操作模式。
方式0:13位计数/定时器。
13位由TLi的低五位和THi构成,手动重载入时间常数,软件启动/停止计数/定时器。
方式1:16位计数/定时器。
16位由TLi和THi构成,手动重载入时间常数,软件启动/停止计数/定时器。
方式2:8位计数/定时器。
TLi被定义为加1计数器,THi被定义为赋值寄存器,自动重载入时间常数,软件启动/停止计数/定时器。
方式3:T0 被用作两个独立的8位计数/定时器,手动重载入时间常数,软件启动/停止计数/定时器。
T1常被用作波特率发生器。
3、80C51定时器作定时或计数时其计数脉冲分别由谁提供?当用作定时器时,其定时时间与哪些因素有关?用作计数器时,对外界计数脉冲频率有何限制?答:80C51定时器作定时时其计数脉冲由内部振荡器经12分频后的输出,即机器周期的脉冲提供;80C51定时器作计数时其计数脉冲由外部输入脉冲提供。
当用作定时器时,其定时时间与内部振荡器频率、时间常数和定时器工作方式有关。
当用作计数器时,外界计数脉冲频率应低于振荡频率的1/24。
4、80C51定时器的门控信号GATE设置为1时,定时器如何启动?答:80C51定时器的门控信号GATE设置为1时,定时器启动需要同时满足INTi 引脚为高电平和Tri置位这两个条件,即通过满足这两个条件来启动定时器。
5、什么是串行通信、并行通信?其优缺点?并行通信是指在同一时刻发送多位数据;串行通信是指用一根线,在不同的时刻发送8位数据。
并行通信的优点是发送速度快;缺点是传输距离短、资源占用多。
串行通信的优点是传输距离远、占用资源少;缺点是发送速度慢。
MCS-51单片机内部定时器计数器
二、 方式1
方式 1(16位计数器)
•MCS-51单片机内部定时器计数器
方式1和方式0的工作原理基本相同,唯一 不同是T0和T1工作在方式1时是16位的计数/定 时器。
方式1时的计数长度M是2的16次方。16位 的初值直接拆成高低字节,分别送入TH和TL 即可。
•MCS-51单片机内部定时器计数器
M1 M0:四种工作方式的选择位 工作方式选择表
M1 M0 方式
说明
0 0 0 13 位定时器(TH的 8 位和TL的低 5 位)
0 1 1 16 位定时器/计数器
1 0 2 自动重装入初值的 8 位计数器 T0 分成两个独立的 8 位计数器,
1 1 3 T1 在方式 3 时停止工作
定时 1 ms的初值:
因为 机器周期=12÷6 MHz= 2 μs
所以 1 ms内T0 需要计数N次:
•MCS-51单片机内部定时器计数器
N= 1 ms÷2 μs = 500
由此可知: 使用方式 0 的 13 位计数器即可, T0 的初值X为 X=M-N=8 192-500=7 692=1E0CH 但是, 因为 13 位计数器中, 低 8 位 TL0 只使用了 5 位, 其 余码均计入高 8 位TH0 的初值, 则 T0
0。TF产生的中断申请是否被接受, 还需要由中断计数器T1、 T0 的运行控制位,
通过软件置 1 后, 定时器 /计数器才开始工作, 在系统复位时
被清 0。
•MCS-51单片机内部定时器计数器
定时器的工作方式
一、 方式 0
方式 0(13位计数器)
•MCS-51单片机内部定时器计数器
•MCS-51单片机内部定时器计数器
51单片机定时计数器的工作原理
51单片机定时计数器的工作原理
51单片机是一种常用的微控制器,它具有多个定时计数器,其中包括定时器0和定时器1。
这些定时计数器是通过内部时
钟源提供的脉冲进行计数的。
定时器0和定时器1是独立的计数器,它们可以用于不同
的应用。
这里我们将主要关注定时器0的工作原理。
定时器0
由一个八位计数器和一个控制寄存器组成。
当定时器0启动时,它会根据时钟源提供的脉冲进行计数,每个脉冲会使计数器的值增加1。
定时器0的计数范围为0-255,即八位二进制数。
通过控制寄存器,我们可以设置定时器0的工作模式、计
数器的初始值以及时钟源的频率。
定时器0可以以不同的方式工作,包括定时模式和计数模式。
在定时模式下,我们可以设置一个初始值,并在每次计数
器增加到该值时产生一个中断。
这样就可以实现精确的定时功能。
定时器0的中断服务程序可以完成各种操作,例如控制其他外设、延时等。
在计数模式下,定时器0将简单地计数外部触发信号的脉
冲次数。
这可以用于测量外部事件的时间间隔或频率。
需要注意的是,定时器0的工作需要通过编程来完成。
我
们可以使用汇编语言或C语言来配置定时器0的寄存器,并
设计相应的中断服务程序。
51单片机定时器的工作原理是通过定时器0和定时器1实
现计数功能。
定时器0可以在定时模式或计数模式下工作,通过设置计数值和时钟源频率,实现精确的定时功能或测量外部
事件的时间间隔或频率。
编程则是必不可少的,通过配置寄存器和编写中断服务程序来实现定时器的工作。
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,所以要能够测量更高的频率,必须使用前置分频器,对更高频率的待测输入信号进行预分频!。
第6章-MCS-51定时计数器
1.定时/计数器工作方式寄存器TMOD TMOD为T0、T1的工作方式寄存器,主要用于控制定
时/计数器T0和T1的工作模式和4种工作方式。低4位用于 控制T0,高4位用于控制T1。
门控 位
在单片机应用中,定时和计数的需求比较多,为了使用 方便并增加单片机的功能,就把定时电路集成到芯片中,称 之为定时/计数器。目前,几乎所有的单片机都集成了可编 程定时/计数器,为单片机提供定时和计数功能。
6.1.1 定时/计数器的结构 MCS-51 单片机内部有两个16位的可编程定时/计数器,称为
定时器0(T0)和定时器1(T1),都具有定时和计数的功能,可 编程选择其作为定时器或作为计数器用。 TMOD:选择定时器/计数器T0、T1的工作模式和工作方式。 TCON:控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。
Hale Waihona Puke ⑵ 工作方式1: T0初值 =216-500s/2s=65536–250=65286=FF06H TH0=FFH;TL0=06H。
⑶ 工作方式2: T0初值 =28-500s/2s=256-250=6 TH0=06H;TL0=06H。
⑷ 工作方式3: T0方式3时,被拆成两个8位定时器,定时初值可分别计
定时器:对片内机器时钟(周期方波)进行计数 计数器:对Tx引脚输入的负脉冲进行计数
6.1.2 定时/计数器的工作原理
单片机内部有两个定时/计数器T0和T1,其核心是计数器, 基本功能是加1。
对外部事件脉冲(下降沿)计数,是计数器;对片内机周 脉冲计数,是定时器。
计数器由二个8位计数器组成。
第06章 MCS51单片机定时计数器
定时器/计数器的工作方式
1.定时/计数器工作方式0
工作方式0是13位计数结构的工作方式,其计数器由TH的全部8位和 TL的低5位构成,TL的高3位没有使用。当C/T=0时,多路开关接通振荡脉 冲的12分频输出,13位计数器以次进行计数。这就是定时工作方式。当 C/T=1时,多路开关接通计数引脚(To),外部计数脉冲由银南脚To输入。 当计数脉冲发生负跳变时,计数器加1,这就是我们常称的计数工作方式
ET0
TR0 HERE 0500H P1.0
;T0中断允许
;启动T0 ;等待中断 ;中断服务程序
RETI
END
4.工作方式3的应用
【例】假设有一个用户系统中已使用了两个外部中断源, 并 置定时器 T1 于方式 2, 作串行口波特率发生器用, 现要 求再增加一个外部中断源, 并由P1.0 口输出一个5 Hz的 方波(假设晶振频率为 6 MHz)。 在不增加其它硬件开销时,可把定时/计数器T0置于工作方 式3,利用外部引脚T0端作附加的外部中断输入端,把TL0 预置为0FFH,这样在T0端出现由1至0的负跳变时,TL0溢 出,申请中断,相当于边沿激活的外部中断源。在方式3 下,TH0总是作8位定时器用,可以靠它来控制由P1.0输出 的5kHz方波。 由P1.0输出5kHz的方波,即每隔100μ s使P1.0的电平发生一 次变化。则TH0中的初始值:X=M-N=256-100/2=206。 下面是有关的程序:
TL0 溢出中断服务程序(由 000BH单元转来):
TL0INT: MOV RETI TL0, #0FFH ; 外部引脚 T0 引起中断处理程序
TH0 溢出中断服务程序(由 001BH转来):
TH0INT: MOV
51单片机计数器与定时器的区别
51 单片机计数器与定时器的区别
在51 单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,对于初学者来说,这几部分的内容很难理解。
但是我个人觉得这几部分内容是单片机学习的重点,如果在一个学期的课堂学习或者自学中没有理解这几部分内容,那就等于还没有掌握51 单片机,那更谈不上单片机的开发了,我们都知道在成品的单片机项目中,有很多是以这几部分为理论基础的,万年历是以定时器为主的,报警器是以中断为主的,联机通讯是以串口为主的。
在这几部分内容中,计数器/定时器对于初学者说很容易搞混淆,下面我将对这方面的内容结合自己的学习经验谈几点看法。
计数器和定时器的本质是相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。
当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。
在定时器和计数器中都有一个溢出的概念,那什幺是溢出了。
呵呵,我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,。
第5章 MCS-51单片单片机内部 定时器计数器
LOOP:
例:由P1.0输出方波信号,周 期为2ms,设fosc=12MHz。 (中断方式)
2ms
解:每隔1ms改变一次P1.0的输出状态,即形成方波, 用T0非门控方式1定时。 计算时间常数:X = 216 - t/T = 216 –(1/1000)/10-6 = 65536-1000 = 64536 = FC18H
3 工作模式2 • 模式2把TL0(或TL1)设置成一个可以自动重 装载的8位定时器/计数器 。 用于需要重复定时和计数的场合。 最大计数值:256 (28) 最大定时时间(晶振12MHz时 T=1s): 256s 自动恢复初值8位定时/计数器。TLx为8位加1计 数器,THx为8位初值暂存器。
复位时,TMOD所有位均置0。 确定定时器工作方式指令: MOV TMOD,#方式字 例:设T0用方式2非门控定时,T1用方式1门控计数。 MOV TMOD,#0D2H ; 1101 0010 B
定时器控制寄存器TCON除可字节寻址外,各 位还可以位寻址。
位地址 位符号 8FH TF1 8EH 8DH 8CH TR1 TF0 TR0 8BH IE1 8AH 89H 88H IT1 IE0 IT0
解得:T0初值=7096=11011101 11000B,其中将高8位 11011101 B=DDH 赋给 TH0 ,低 5 位 11000B=18H 赋 给 TL0。
方法一:
采用查询工作方式,编程如下:
ORG AJMP 0000H MAIN
LOOP:JNB TF0,$;$为当前指令指 针地址 CLR SETB CLR MOV MOV TF0 P1.0 P1.0 TH0 , #0DDH ;重装载 ;产生2µ s正脉冲
ORG AJMP ORG AJMP ORG MAIN:MOV MOV MOV SETB SETB SETB HERE:SJMP PT0INT:MOV MOV CPL RETI
MCS-51单片机的定时器计数器
TL; 如:任务中的MOV TH0,#00H 两条指令,设定计数初
值。 MOV TL0,#00H
Copyright 2006
(3)根据需要开放定时器/计数器的中断——对IE位赋值; (4)启动定时器/计数器; 如:任务中的SETB TR0 指令 初值的计算方法 X=M-计数值 M是定时器的最大计数值。视工作方式不同而不同。
判断中 断的次 数
程
CPL P1.0
;定时到,输出取反
序
NO:RETI
;中断返回
END
注意:此程序的#20和#60这两个立即数后面没 有加H表示是十进制数。
思考:能否利用定时器来实现一个电子钟?
Copyright 2006
测量每1秒钟之内的按键按下次数
工作方式0: 13位定时/计数方式,因此,最多可以计到2的13 次方,也就是8192次。
工作方式1: 16位定时/计数方式,因此,最多可以计到2的16 次方,也就是65536次。
工作方式2和工作方式3:都是8位的定时/计数方式,因此, 最多可以计到2的8次方,也说是256次。
Copyright 2006
;开中断 ;开T0中断 ;运行T0 ;等待中断 ;定时到,输出取反 ;重新加载初战值
;中断返回
中断程序的主 程序和中断服 务程序的布局
定时器初始化
开定时器中断
Copyright 2006
实例二:利用方式1定时
题目:用定时器T1,使用工作方式1,在单片机的P1.0输出一个周期为2分钟、占 空比为1:1的方波信号。
Copyright 2006
MCS-51单片机的定时器/计数器(二)
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单片机上实现精确的时间控制和事件调度。
这对于实现诸如延时、精确计时和脉冲生成等功能非常有用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定时/计数器的控制寄存器TCON
TCON
(88H)
D7
TF1
D6
TR1
D5
TF0
D4
TR0
D3
IE1
D2
IT1
D1
IE0
D0
IT0
其中: TF1:定时/计数器T1的溢出标志位,当定时/计数器T1计满时,由 硬件使它置位,如中断允许则触发T1中断。进入中断处理后由内部硬 件电路自动清除。 TR1:定时/计数器T1的启动位,可由软件置位或清零,当TR1=1时 启动;TR1=0时停止。
定时时间常数初值X: 方式0 X=8192-T(fosc/12) 方式1 X=65536-T(fosc/12) 方式2、方式3 X=256-T(fosc/12) 其中T是需要定时的时间,单位是微秒;fosc是晶振
计数时间常数X: 方式0 X=8192-S 方式1 X=65536-S 方式2、方式3 X=256-S 说明:式中S是需要计数的次数
2)定时初值计算
定时就是定时间,假设晶振频率为f,定时时间为T,对 应的计数值为X,此时计数器是将系统时钟12分频后作为 计数脉冲,则以下等式成立。
n 要装入的计数器初值 CI= 2 -T· fosc/12。 例如:已知晶振的频率为 6 MHz,要求定时为2 ms,则 当为方式0时,应装入的计数初值为; 3 6 8192-2×10 ×6×10 /12 = 8192-1000 = 7192
此外,T1还可以作为串行接口的波特率发生器。
定时/计数器的结构
1.定时和计数的原理
单片机是对脉冲个数计数,计数器 (1)计数 每接收到一个脉冲,计数值加1, 定时/计数器的实质是在处置基础上的加1计数 器(16位), 当接收满65535个脉冲后,再 来一个脉冲,计数值清0表明 这一轮计数结束,同时将标 志位TF0或TF1置1。
定财器/计数器初始化步骤
1)确定工作方式:把工作方式控制字写入到TMOD中; 2)设置定时或计数的初值:根据问题要求,求出定时或计 数的初值,写入到寄存器THO、TLO或THI、TLI中。 3)如果需要中断,使定时器中断允许位ET0或ETI置位, 如果要求中断嵌套,还应设置相应的中断优先级,然后置 位EA,使CPU开放中断;如果不需要中断,仅以软件方式 对计数器溢出标志TFO或TFI进行查询,则可略去此步骤; 4)启动定时器/计数器:将 TRO或 TRI置 1即可启动定时 器/计数器。
(3) C/T * ——计数器模式和定时器模式选择 位
0:定时器模式。 1:计数器模式。来自定时/计数器的工作方式
一.方式0
方式0是13位的定时/计数方式,因而最大计数值为 2的13次幂,等 于8192。如计数值为N,则置入的初值X为: X=8192-N 例如定时/计数器T0的计数值为1000,则初值为7192,转换成二进 制数为1110000011000B,则TH0=11100000B,TL0=00011000B。
89C51 单片机原理及应用
89C51单片机
定时器/计数器
单片机的定时/计数器
单片机应用系统中定时计数的需求:
如用单片机控制的打铃器、空调的定时开关、啤酒自动生产 线上对酒瓶的计数装置等。
89C51单片机片内的定时/计数器:
两个16位可编程的定时/计数器:T0和T1,都能定时和对 外部事件进行计数。
获得标准时间
由单片机的晶振经过12分频后得到。由于晶振的频率很准, 所以这个时钟脉冲的时间间隔也很准。当单片机采用12MH z的晶振时,它提供给计数器的脉冲频率是12MHz/1 单片机内部的标准时钟 2=1MHz,脉冲周期就是1微秒。 脉冲是如何获得的呢?
定时/计数器T0的结构示意图
定时/计数器的结构
2.T0工作在方式3下T1的各种工作方式 当T1用作串行口的波特率发生器时, T0才工作 在方式3。 T0处于方式3时, T1可定为方式0、方式1和方 式2,用来作为串行口的波特率发生器,或不需要 中断的场合。
定时器/计数器对输入信号的要求 外部计数脉冲的最高频率为系统振荡器频率的1/24, 例如选用12MHz频率的晶体,则可输入500KHz的外部脉冲。 输入信号的高、低电平至少要保持一个机器周期。
单片机复位时,两个寄存器的所有位都被清0。
定时器/计数器控制寄存器TCON
低4位与外部中断有关,已介绍。高4位的功能如下: (1) TF1、TF0——计数溢出标志位 (2) TR1、TR0——计数运行控制位
1:启动定时器/计数器工作 0:停止定时器/计数器工作
工作方式控制寄存器TMOD
8位分为两组,高4位控制T1,低4位控制T0。 (1)GATE——门控位 0:以TRX(X=0,1)来启动定时器/计数器运行。 1:用外中断引脚 (INT0* 或 INT1* )上的高电平和 TRX 来启动 定时器/计数器运行。 (2)M1、M0——工作方式选择位 M1 M0 工 作 方 式 0 0 方式0,13位定时器/计数器。 0 1 方式1,16位定时器/计数器。 1 0 方式2,8位常数自动重新装载 1 1 方式3,仅适用于T0,T0分成 两个8 位计数器,T1停止计数。
三.方式2
方式2,16位的计数器只用了8位来计数,用的是TL0(或TL1)的 8位来进行计数,而TH0(或TH1)用于保存初值。当TL0(或TL1) 计满时则溢出,一方面使TF0(或TF1)置位,另一方面溢出信号又会 触发三态门,使三态门导通,TH0(或TH1)的值就自动装入TL0(或 TL1)。 TLX作为常数缓冲器,当TLX计数溢出时,在置“1”溢出标志
M1 0 0 1 1 M0 0 1 0 1 工作方式 0 1 2 3 方式说明 13位定时/计数器 16位定时/计数器 8位自动重置定时/计数器 两个8位定时/计数器(只有T0有)
C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0 时工作于定时方式。 GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号 的影响。
定时器/计数器的编程和应用 4种工作方式中,方式0与方式1基本相同,由于方式0是为 兼容MCS-48而设,初值计算复杂,在实际应用中,一般不用 方式0,而采用方式1。 方式1应用 例1 假设系统时钟频率采用6MHz,要在P1.0上输出一个周 期为2ms的方波,如图所示。
方波的周期用T0来确定,让T0每隔1ms计数溢出1次(每 1ms产生一次中断),CPU响应中断后,在中断服务程序中对 P1.0取反。 (1)计算初值X 设初值为X,则有:
如图所示,图中Tcy为机器周期。
定时器/计数器的初始化
定时/计数器的方式寄存器TMOD
TMOD D7 GATE ← D6 C/T 定时器1 D5 M1 D4 M0 → D3 GATE ← D2 C/T 定时器0 D1 M1 D0 M0 →
(89H)
其中: M1、M0为工作方式选择位 ,用于对T0的四种工作方式,T1的三 种工作方式进行选择,选择情况如下
工作方式3相当于增加一个附加的8位定时器/计数器,从 而具有3个定时器/计数器。 只适用于定时器/计数器T0。T1不能工作在方式3, T1方式3时相当于TR1=0,停止计数(此时T1可用来作串 行口波特率产生器)。
1.工作方式3下的T0
T0分为两个独立的8位计数器:TL0和TH0 。TL0使用T0的状态 控制位C/T*、GATE、TR0、,而TH0被固定为一个8位定时器 (不能作外部计数模式),并使用定时器T1的状态控制位 TR1和TF1,同时占用定时器T1的中断请求源TF1。
单片机内部的16位定时/计数器由高8位和低8位两个寄存 器组成: T0由TH0和TL0组成, T1由TH1和TL1组成, 定时/计数器的计数值就存放在这里面。定时/计数器T1的 结构与T0相同。 定时器/计数器的控制寄存器 TMOD:选择定时器/计数器T0、T1的工作模式和工作 方式。 TCON:控制T0、T1的启动和停止计数,同时包含了 T0、T1的状态。
二、方式1
方式1是16位的定时/计数方式,因而最大计数值为 2的16次幂, 等于65536。如计数值为N,则置入的初值X为: X=65536-N 如定时/计数器T0的计数值为1000,则初值为655361000=64536,转换成二进制数为1111110000011000B,则 TH0=11111100B,TL0=00011000B。
定时器初值的设置
在时钟频率为12MHz的情况下,每个时钟脉冲是1微 秒,则计满65536个脉冲需65.536毫秒,如要定时10毫秒 则存入初值55536,(10毫秒是10000微秒,需计数 10000个脉冲)。可见, 定时器的定时时间长短与系统时钟和定时器初值有关。 说明 1. 当定时/计数器用作计数器时,通过引脚P3.4、P3.5 对外部输入脉冲计数。 2 . 定时/计数器T0(T1)启动运行后,会按设定的工作方 式独立进行计数,不再占用CPU时间。当计数器T0(T1)计 满溢出时,TF0(TF1)置1,向CPU发出中断请求信号。
四、方式3
方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数器 T0工作于方式3,定时/计数器T0被分为两个部分TL0和TH0,其中, TL0可作为定时/计数器使用,占用T0的全部控制位:GATE、C/T、 TR0和TF0;而TH0固定只能作定时器使用,对机器周期进行计数, 这时它占用定时/计数器T1的TR1位、TF1位和T1的中断资源。
定时器/计数器初值计算
定时器/计数器用于定时或计数时,必须按照需要给计数 器设置初值。定时器/计数器在计数初值的基础上以加1 的方式进行计数,在计数器从全1变为全0时,将自动产生 溢出中断请求。 (1)计数初值计算 假设要计数的值为X,由于计数器是加工计数器,所以 n 定时器/计数器的初值为 2 -X: 其中n的值依赖于工作方式, 对于方式 0,n= 13;即初值=8192-X 对于方式 1,n= 16;即初值=65536-X 对于方式 2和方式 3,n=8;即初值= 256-X