第七章51系列单片机定时器计数器
单片机原理及接口技术(C51编程)第7章 定时器计数器

图7-14 由外部计数输入信号控制LED的闪烁
(3)设置IE寄存器 本例由于采用T1中断,因此需将IE寄存器的EA、ET1位置1。
(4)启动和停止定时器T1 将寄存器TCON中TR1=1,则启动T1计数;TR1=0,则停止T1计数。
参考程序如下:
#include <reg51.h> void Delay(unsigned int i)
7.4 定时器/计数器的编程和应用 4种工作方式中,方式0与方式1基本相同,只是计数位数不同。方
式0为13位,方式1为16位。由于方式0是为兼容MCS-48而设,计数初 值计算复杂,所以在实际应用中,一般不用方式0,常采用方式1。
7.4.1 P1口控制8只LED每0.5s闪亮一次 【例7-1】在AT89S51的P1口上接有8只LED,原理电路见图7-
当TMOD的低2位为11时,T0被选为方式3,各引脚与T0的逻辑关系 见图7-8。
T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的状态控制位 C/T* 、GATE、TR0 ,而TH0被固定为一个8位定时器(不能作为外部 计数模式),并使用定时器T1的状态控制位TR1,同时占用定时器T1的 中断请求源TF1。
13。采用T0方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮 一次。
23
图7-13 方式1定时中断控制LED闪亮
24
(1)设置TMOD寄存器 T0工作在方式1,应使TMOD寄存器的M1、M0=01;应设置C/T*=0,为定
时器模式;对T0的运行控制仅由TR0来控制,应使相应的GATE位为0。定时 器T1不使用,各相关位均设为0。所以,TMOD寄存器应初始化为0x01。 (2)计算定时器T0的计数初值
第七章 51系列单片机定时器计数器

(3)查询方式
查询方式在定时器计数过程中,CPU要不断查询溢
出标志位TF0的状态。这就占用了很多CPU的工作时间,使
CPU的效率下降。
程序清单:
MOV TMOD,#00H ;设置T0为模式0
MOV TL0,#18H
;送初值
MOV TH0,#0E0H
;
SETBC TF0,NEXT ;查询定时时间到期否?
定时器(T0或T1)的高8位 和低5位(其余三位为0)组 成一个13位定时器/计数器 。 当TL0的低5位溢出时,向 TH0进位;TH0溢出时,向 中断标志位TF0进位(硬件 置TF0),并申请中断。
振荡器 12
M0(0) M1(0)
C/T=0
T0引脚
C/T=1
TL0 TH0 (5位) (8位)
控制 =1
转换为二进制数: X=1111000001100B T0的低5位: 01100B=0CH T0的高 8位: 11110000B=F0H
T0的最大定时时间应于13位计数器各位全为1,即(TH0) =FFH,(TL0)=1FH。即X=0。
则 T=213×12/6MHZ=16.384ms
例2:
利用T0工作于模式0产生1ms的定时,在P1.0引脚上输出 周期为2ms的方波。设单片机晶振频率fosc=12MHZ。
通过系统对时钟脉冲的计数来实现。通过程序可以改变计
数值,也就改变了定时时间。同时可编程定时器具有定时和计 数功能。
7.1.2 定时器/计数器的结构
MCS-51系列单片机有两个16位的定时器,分别为T0和T1。 它们都有定时和事件计数的功能,可用于定时控制、延时、对外 部事件计数和检测等场合 。
T0由两个8位特殊功能寄存器TH0和TL0构成; T1由TH1和TL1构成。 T0、T1由软件设置为定时器工作方式或计数方式及其他灵 活多样的可控功能方式。 T0、T1的功能都由特殊功能寄存器TMOD和TCON所控 制。
MCS51单片机的定时计数器及应用

定时/计数器T0和T1的工作方式2(P143) ----8位自动重载初值
振荡器
/12
T0 TR0
GATE INT0
控制
TL0(8 位) 重载
TH0(8位)
中断 TF0
TL0(或TL1)用于计数,TH0(或TH1)用于保存初值,计满 溢出时硬件自动将TH0的值重新装入TL0。自动装载的初值:
X=256-N
while (1) ;// 原地踏步
{}
}
void time0_int(void) interrupt 1
{// 中断服务程序 SQ=!SQ ;// 输出翻转
}
采用查询方式的汇编程序(P145)
ORG 0000H
LJMP MAIN ORG 0100H ;主程序 MAIN: MOV TMOD,#02H ; 定 时器T0工作方式2 MOV TH0,#06 ;保存初值 MOV TL0,#06 ; 赋初值 SETB TR0 ; 启动T0
ORG 0030H; 主程序 MAIN:MOV TMOD,#02H; 定时器
T0工作方式2 MOV TH0,#06H;初值保存 MOV TL0,#06H; 赋初值 SETB EA; 开放总中断 SETB ET0; 开放T0溢出中断 SETB TR0; 启动T0 SJMP $; 原地踏步
END
采用中断处理方式的C51程序(P145)
微 处 理 器
TH1
启动
TCON
溢出
TL1
TH0
TL0
内部总线
启动
工作方式
工作方式
TMOD
定时/计数器的结构说明
? TH0和TL0是定时/计数器T0计数器的高 8位和低8位, TH1和TL1是定时/计数器T1计数器的高 8位和低8位。
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
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
方式 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可以在定时模式或计数模式下工作,通过设置计数值和时钟源频率,实现精确的定时功能或测量外部
事件的时间间隔或频率。
编程则是必不可少的,通过配置寄存器和编写中断服务程序来实现定时器的工作。
MCS51单片机的定时器计数器

脉冲宽度测量应用
简介:脉冲宽度测量是定时器计数器在MCS51单片机中的一个重要应用, 通过定时器计数器可以精确测量脉冲信号的宽度。
工作原理:利用定时器计数器对输入的脉冲信号进行定时计数,根据计数 值和定时器计数器的时钟频率,可以计算出脉冲信号的宽度。
应用场景:在电机控制、通信、测量等领域中,需要精确测量脉冲信号的 宽度,例如在电机控制中,需要测量电机的占空比,以实现精确控制。
MCS51单片机的应用领域
工业控制 智能仪表 家电产品 通讯设备
MCS51单片机的定时器计数器功能
定时器/计数器:用于时间延迟和计数 工作模式:四种模式可选,包括模式0、模式1、模式2和模式3 计数范围:16位计数,可计数0-65535 定时器溢出标志:当定时器溢出时,会设置溢出标志位,可产生中断或溢出处理
定时器计数器在 串行通信中的工 作原理:通过定 时器和计数器来 控制数据传输的 速率和同步
定时器计数于产生精确的时间延迟或定时,实现定时器计数器的最基本功能。
计数功能:用于对外部事件进行计数,例如计数脉冲信号的个数。
事件触发:可以用于产生中断,用于处理特定事件,如时间到达或计数达到预设值。
THANK YOU
汇报人:
停止方式:通过编程设置定时器计数器的停止方式,如手动停止或自动停 止
启动条件:定时器计数器在满足一定条件时自动启动,如达到预设时间或 外部事件触发
停止条件:定时器计数器在满足一定条件时自动停止,如达到预设时间或 外部事件触发
定时器计数器的读写操作
读取当前计数值:通过读取相应的寄存器,可以获取定时器/计数器的当前计数值。
优势:使用定时器计数器进行脉冲宽度测量具有精度高、可靠性好等优点, 可以满足各种应用需求。
51单片机定时与计数的工作原理

51单片机定时与计数的工作原理一、概述51单片机是一种广泛应用于嵌入式系统中的微处理器,具有高性价比、易学易用等特点。
其中,定时与计数功能是其常用的功能之一,通过定时与计数可以实现许多实际应用,如脉冲计数、PWM输出等。
本文将详细介绍51单片机定时与计数的工作原理。
二、定时器和计数器在介绍51单片机的定时与计数功能之前,我们需要先了解两个重要的概念:定时器和计数器。
1. 定时器定时器是一种能够按照设定时间进行计时的电路。
其基本原理是利用振荡电路产生一个稳定的时间基准信号,再通过分频电路将其分频得到所需的时间间隔,并通过计数器进行累加,从而实现精确的时间控制。
2. 计数器计数器是一种能够对输入脉冲进行计数并输出相应结果的电路。
其基本原理是利用触发电路对输入脉冲进行检测,并通过累加器进行累加,从而得到输入脉冲数量。
三、51单片机中的定时与计数功能在51单片机中,有两个独立的16位定时器/计数器,分别为Timer0和Timer1。
它们可以分别用作定时器或计数器,并且可以通过软件配置其工作模式。
1. Timer0Timer0是一个8位定时器/计数器,它的输入时钟源可以来自外部引脚或系统时钟。
在定时模式下,其最大计时时间为2^8×12/11MHz≈29μs,在计数模式下,其最大计数值为2^8=256。
Timer0的工作模式可以通过TCON寄存器的TF0、TR0、TMOD寄存器的M0位和GATE0位进行配置。
其中,TF0表示定时/计数溢出标志,TR0表示定时/计数启动控制位,M0位表示Timer0的工作模式(00表示13位定时/计数、01表示16位定时/计数、10表示8位自动重装载定时、11保留),GATE0表示是否使用外部引脚作为启动控制信号。
2. Timer1Timer1是一个16位定时器/计数器,它的输入时钟源可以来自外部引脚或系统时钟。
在定时模式下,其最大计时时间为2^16×12/11MHz≈5.9ms,在计数模式下,其最大计数值为2^16=65536。
MCS-51单片机的定时、计数器

M1 0 0
M0 0 1
工作方式 0 1
方式说明 13位定时器/计数器 16位定时器/计数器 具有自动重装初值的8位定时器 /计数器
1
1
0
1
2
3
3.定时器/计数器控制寄存器TCON TCON控制寄存器各位定义如下:
D7
TCON
TF1
D6
TR1
D5
TF0
D4
TR0
D3
IE1
D2
IT1
D1
IE0
D0
IT0 字节 地址 88H
计数器的高8位和低8位。
作计数器用时,加法计数器对芯片引脚T0(P3.4)或T1(P3.5)
上的输入脉冲计数。每输入一个脉冲,加法计数器增加1。加法
计数溢出时可向CPU发出中断请求信号。
作定时器用时,加法计数器对内部机器周期脉冲Tcy计数。 由于机器周期是定值,所以对Tcy的计数就是定时,如Tcy=1 μs,计数值100,相当于定时100 μs。 加法计数器的初值可以由程序设定,设置的初值不同,计 数值或定时时间就不同。在定时器/计数器的工作过程中,加 法计数器的内容可用程序读回CPU。
≥1 S TH1 (8 位 ) TF 1
1
图 2 .1 6 定 时 器 / 计 数 器 方 式 3 的 逻 辑 结 构
图2.16 定时器/计数器方式3的逻辑结构
ELSE:
;此处可写定时1分钟到后的处理程序
AJMP REPEAT ORG 001BH SETB F0 RETI ;定时器/计数器T1的中断服务程序入口地址 ;建立定时1分钟到的用户标志
用定时器控制信号灯
问题的提出 ① “MOV TMOD,#01H”指令是将01H送 给寄存器TMOD,为什么是01H?
单片机定时器计数器工作原理

单片机定时器计数器工作原理单片机定时器计数器是单片机中非常重要的一个模块,它通常用于实现各种定时和计数功能。
通过定时器计数器,单片机能够精准地进行定时操作,实现定时中断、计数、脉冲生成等功能。
本文将详细介绍单片机定时器计数器的工作原理。
1. 定时器计数器的功能单片机定时器计数器通常由若干寄存器和控制逻辑组成,可以实现以下几种功能:- 定时功能:通过设置计数器的初始值和工作模式,可以实现一定时间的定时功能,单片机能够在计时结束时触发中断或产生输出信号。
- 计数功能:可以实现对外部信号的计数功能,用于测量脉冲个数、频率等。
也可以用于实现脉冲输出、PWM等功能。
- 脉冲发生功能:可以在一定条件下控制定时器输出脉冲,用于控制外部器件的工作。
2. 定时器计数器的工作原理定时器计数器的工作原理可以分为初始化、计数及中断处理几个基本环节。
(1)初始化:在使用定时器前,需要对定时器计数器进行初始化设置。
主要包括选择工作模式、设置计数器的初始值、开启中断等。
不同的单片机厂商提供了不同的定时器初始化方式和寄存器设置方式,通常需要查阅相关的单片机手册来进行设置。
(2)计数:初始化完成后,定时器开始进行计数工作。
根据不同的工作模式,定时器可以以不同的频率进行计数。
通常采用的计数源是内部时钟频率,也可以选择外部时钟源。
通过对计数器的频率设置和初始值的设定,可以实现不同的定时功能。
(3)中断处理:在定时器计数完成后,可以触发中断来通知单片机进行相应的处理。
通过中断服务程序,可以定时执行一些任务,或者控制一些外部设备。
中断服务程序的编写需要根据具体的单片机和编程语言来进行相应的设置。
3. 定时器计数器的应用定时器计数器广泛应用于各种嵌入式系统中,最常见的应用包括定时中断、PWM输出、脉冲计数、定时控制等。
可以利用定时器计数器实现LED呼吸灯效果、马达控制、红外遥控编码等功能。
在工业自动化、通信设备、电子仪器等领域也有着广泛的应用。
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,所以要能够测量更高的频率,必须使用前置分频器,对更高频率的待测输入信号进行预分频!。
《单片机原理及应用》第7章 51及定时器计数器应用基础

中断,并在中断服务程序中对P1.0和P1.1取反。由于 采用了6MHz晶振,因此单片机的机器周期为2μs。因 此可计算TL0的初值X=156=9CH,TH0的初值X=56=38H。
【例7-3】P1.1输出周期1s的方波
• 由于定时时间较长,一个定时器不能直接实现(一个 定时器最长定时时间为65536us),可以有以下两种方 法。
• 方法1:硬件定时*软件计数 • 如硬件定时50ms,软件计数器设定为20即可。
方法2:硬件定时器*硬件计数器
• (1)T0定时器,定时器50ms,定时时间到,P1.0取反 ;
• (2)T1计数器, • 计数脉冲位P1.0, • 计数10次; • (3)计数次数到 • P1.1取反。
【例7-4】不同占空比的输出)
• 7.1.1 结构 • 7.1.2 控制寄存器 •
7.1.1 结构
• 计数功能:
• 是指对外部事件进行计数:计数信号来自T0(P3.4)、 T1(P3.5)引脚。
• 定时功能:
• 也是通过计数器的计数功能来完成的,不过此时的计 数脉冲来自单片机内部:机器周期。
7.1.2 控制寄存器
• 与定时器/计数器应用有关的控制寄存器有2个,分别 为TCON、TMOD、TH、TL。
• 1、计数器控制寄存器(TCON)
2、工作方式控制寄存器(TMOD)
• 3、TH、TL • 4、如果是中断方式,还与IE、IP寄存器有关。
7.1.3 串行通信的检错与纠错
• 1、奇偶校验 • 2、代码和校验 • 3、循环冗余校验(CRC校验)
总结:
• 7.1.4(1串)并行行接与口串芯行片;UART和USART
51单片机的定时器计数器

初值计算: 设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得 X=M-定时值/T T为计数周期,是单片机的机器周期。(模式0 M为213,模式1 M为216,模式2和3 M为28)
振荡源
Tx引脚 GATE INTx TRx
÷ 12
° C/ T=0
K
S
°
°
°
C/ T=1
1°
≥1
&
THx TLx
TFx
8位
15位
• T0(或T1)工作于13位定时、计数方式。 • 16位寄存器(THX+TLX)只用13位,TLX的高3位未用。
中断
3.定时器/计数器的工作方式
定时或计数之前程序初始化步骤:
• 0 停止 • 启动
触发方式选择
• 0 低电平 • 1 下降沿
2.定时器/计数器的控制
工作方式控制寄存器TMOD(89H) D7 D6 D5 D4 D3 D2 D1 D0
GATE C/T M1 M0 GATE C/T M1 M0
T1控制
GATE —— 门控位
T0控制
• GATE = 0 启动由TR0(或TR1)一位控制; • GATE = 1 启动受 TR0和/INT0 (或TR1和 /INT1 )两位控制。
定时脉冲信号 外部事件信号
定时 +1记数器
计数 计数初值
计数溢出
8051
1. 51单片机定时器/计数器的结构
内 部 结 构定 框时 图器
第7章 51单片机的定时计数器

TH0、TL0/TH1、TL1分别是T0/T1的数据高位/低位寄存器,均为8位。 当定时计数器收到一个驱动事件(定时、计数)后,对应的数据寄存器的内 容加1,当数据寄存器的值到达最大的时候,将产生一个溢出中断,在单片机 复位后所有寄存器的值都被初始化为0x00,这些寄存器都不能位寻址。
工作方式2下的 内部结构
7.3 51单片机定时计数器的工作方式
7.3.4 工作方式3
当M1、M0设定为“11”时,T0工作于工作方式3,在这种工作方式下T0 被拆分成了两个独立的8位计数器TH0和TL0,TL0使用T0本身的控制和中断 资源,而TH0则占用了T1的TR1和TF1作为启动控制位和溢出标志。在这种情 况下,T1将停止运行并且其数据寄存器将保持其当前数值,所以设置T0为工 作方式3也可以代替复位TR1来关闭T1定时计数器。
7.4 使用51单片机的计数器
7.4.2 使用计数功能
其计数驱动信号来自外部引脚T0(P3.4)和T1(P3.5),当这两个引脚 上检查到一个负跳变的时候,其对应的计数寄存器加1。由于51单片机确认一 个负跳变需要两个机器周期,所以外部的跳变产生频率不能够高于51单片机 工作频率的1/2,否则就会丢失跳变或者是检测不到任何跳 变。
7.4 使用51单片机的计数器
7.4.3 使用门控信号
当定时计数器的控制寄存器TMOD中的GATE0/GATE1被置位后,定时计 数器T0/T1受到计数脉冲和单片机外部中断引脚INT0(P3.2)/INT1(P3.3) 上的电平信号的联合控制。只有当外部中断引脚上为高电平并且TR0/TR1被 启动时,定时计数器才工作。
Hale Waihona Puke .5 定时计数器T27.5.3 T2的中断处理
单片机原理及智能仪表技术第7章

计数状态:X=M-N
定时状态:X=M-定时时间/T,T为机器周期
2、TMOD定时器方式设置寄存器(89H):
TMOD主要用于 选择定时器的工作 模式(C/T)、启动方 式(GATE)和工作方 式等。该寄存器的 格式如图所示。
2、TMOD定时器方式设置寄存器(89H):
TMOD,#方式字 THx,#XH TLx,#XL EA ETx TRx
;选择方式 ;装入Tx时间常数 ;开Tx中断
;启动Tx定时器
需考虑:1. 按实际需要选择定时/计数功能; 2. 按时间或计数长度选择工作方式; 3. 计算时间常数:
二、定时/计数器初值的计算
(1)定时器初值的计算
在定时器模式下,计数器由单片机主脉冲经 12 分频后 计数。因此,定时器定时时间T的公式:T=(M-TC)×T计数, 上式也可写成:TC=M-T/T计数 式中,M为模值,和定时器的工作方式有关,在方式0时 M为213,在方式1时M为216,在方式2和方式3时M为28;T计数是 单片机振荡周期TCLK的12倍;TC为定时器的定时初值。 例:单片机时钟频率12MHz,定时器工作在方式1下,定 时100us,初值为多少? 解:时钟频率Ф CLK=12MHz,所以振荡周期TCLK=1/12us T计数=12×TCLK=1us,M=216=65536,T=100us 所以,TC=65536-100/1=65436,0xFF9C
定时器工作方式:当选择定时器方式时(C/T=0),TR1=1,定时器对系统的机器周 期计数,每过一个机器周期,计数器TH1,TH0加1,直至计满规定个数回零,置 位定时器中断标志(TF1)产生溢出中断。根据机器周期和设定的计数初值,可以定 时产生各种精确的时间。 计数器工作方式:当选择计数器方式时(C/T=1),外部脉冲通过引脚T1(P3.5)引入, 计数器对此外部脉冲的下降沿进行加1计数,直至计满规定值回零,置位定时器中 断标志(TF1)产生溢出中断。根据规定的时间内的计数个数,可以得到信号的频率。 计数最高频率不得超过振荡频率的1/24。
51单片机 定时器和计数器 结构

51单片机定时器和计数器结构下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!51单片机定时器和计数器结构详解一、引言在51单片机中,定时器和计数器是两个非常重要的功能模块,它们广泛应用于各种嵌入式系统中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
振荡器 12
M0(0) M1(0)
பைடு நூலகம்
C/T=0
T0引脚
C/T=1
TL0 TH0 (5位) (8位)
控制 =1
申请 TF0 中断
CG/ATT 0
1
1
开关接通
E
≥1 &
GATE=0时,INT0信号无效。B点电
×INT0端 或门 与门
位取决于TR0的状态,于是,由TR0 一位就可控制计数开关K,开启或关
TR0
断T0。若软件使TR0置1,便接通计数
GATE=1时,必须 INT0=1且TR0=1时,B点才 开关K,启动T0在原值上加1计数,直
是高电平,计数开关K闭合,T0开始计数。
至溢出。若TR0=0,则关断计数开关
INT0由1变0时,T0停止计数。 第七章51系列单片机定时K器计,数停器止计数。
例1:
设定时器T0工作于模式0,定时时间为1ms,fosc=6MHZ。 试确定T0的初值,计算最大定时时间T。
通过系统对时钟脉冲的计数来实现。通过程序可以改变计 数值,也就改变了定时时间。同时可编程定时器具有定时和计 数功能。
第七章51系列单片机定时器计数器
7.1.2 定时器/计数器的结构
MCS-51系列单片机有两个16位的定时器,分别为T0和T1。 它们都有定时和事件计数的功能,可用于定时控制、延时、对外部 事件计数和检测等场合 。
T0由两个8位特殊功能寄存器TH0和TL0构成; T1由TH1和TL1构成。 T0、T1由软件设置为定时器工作方式或计数方式及其他灵 活多样的可控功能方式。 T0、T1的功能都由特殊功能寄存器TMOD和TCON所控 制。
第七章51系列单片机定时器计数器
AT89C51定时器结构: 定时器工作方式:每个机器周期使定时器(T0或T1)的数
式和控制功能。当系统复位时,两个寄存器所有位被清0。
1.工作模式寄存器TMOD (89H,不能位寻址只能由字节设置定时器工作模
式)
定时器T1工作模式定义 定时器T0工作模式定义
GATE C / T M1 M0 GATE C / T M1 M0
M1、M0:工作模式控制位 ( 定义4 种方式 ): 0 0: 模式0 13位定时器——作用不大 0 1: 模式1 16位定时器——经常用到 1 0: 模式2 可自动重装的8位定时器——经常用到 1 1: 模式3 T0分为2个8位定时器;T1不工作——几乎无用
第七章51系列单片机定时器计数器
GATE C / T M1 M0 GATE C / T M1 M0
(89H)
T1
T0
C/T :计数器/定时器选择位 =0 片内时钟定时器。对机器周期脉冲计数定时 = 1 外部事件计数器。对T0(T1)引脚的负脉冲计数;
GATE门控位: 定时器可由软件与硬件两者控制 GATE = 0 ——普通用法
定时器T1便开始计数。
第七章51系列单片机定时器计数器
定时器T0/T1 中断申请过程
定时/计数器可按片内机器周期定时,也可对由 T0/T1引脚输入一个负脉冲进行加法计数
在已经开放T0/T1中断允许且已被启动的前提下: T0/T1加满溢出时 TF0/TF1标志位自动置“1” 检测到TCON中TF0/TF1变“1”后,将产生指令:
定时器的启/停由软件对TR0(TR1)位写“1”/“0”
控制,不管INT0、INT1的电平。
GATE = 1 ——门控用法
INT0或INT1引脚为高电平且由软件使TR0或TR1置
1时,才能启动定时器工作。
第七章51系列单片机定时器计数器
2.定时器控制寄存器TCON (88H,可位寻 址)
8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF0(TF1):定时器0/1计数溢出标志位。 =1 计数溢出; =0 计数未满
TF0(TF1) 可用于申请中断或供CPU查询。 在进入中断服务程序时会自动清零; 但在查询方式时必须软件清零。
TR0(TR1): 定时器0/1运行控制位。 =1 启动计数; =0 停止计数 在程序中用指令“SETB TR1”使TR1位置1,
t=(213—T0初值)X振荡周期X 12 当C/T=1时作外部事件计数器,控制开关使引 脚T0(P3.4)与13位计数器相连,外部计数脉冲 下降沿使计数器加1。
定时器(T0或T1)的高8位和 低5位(其余三位为0)组成 一个13位定时器/计数器 。当 TL0的低5位溢出时,向TH0 进位;TH0溢出时,向中断 标志位TF0进位(硬件置 TF0),并申请中断。
值加1直至计数溢出。 计数器工作方式:在每个机器周期的S5P2期间采样T0和T1
引脚,若某一个机器周期采样值为1,下一个机器周期采样值 为0,则计数器加1。最高计数频率为振荡频率的1/24。
第七章51系列单片机定时器计数器
7.2 定时器/计数器的控制 8位寄存器TMOD和TCON,用来设置T0和T1的操作模
第七章 51系列单片机的定时器/
第七章51系列单片机定时器计数器
7.1 定时器/计数器概述
7.1.1 定时方法
在单片机控制系统中,定时的方法有: 1. 软件定时
靠执行一个循环程序以进行时间延迟。特点是:时间精确, 且不需外加硬件电路。缺点是:定时时要占用CPU,增加CPU的 开销。 2.硬件定时
使用硬件电路来完成。方法是:定时功能全部由硬件电路完 成,不占CPU的时间。缺点是:定时参数一旦设定,修改比较困 难。适用于:时间较长的定时 3.可编程定时器
解:当T0为工作模式0时,加1计数器为13位。设T0的初值为X。 则 (213—X)×1/(6×106)×12=1×10-3S (213—X)×12/6=1000 X=7692
转换为二进制数: X=01100B T0的低5位: 01100B=0CH T0的高 8位: 11110000B=F0H
LCALL 000BH/LCALL 001BH 执行中断服务程序, TF0/TF1标志位会自动清“0”,以备下次中断申请。
第七章51系列单片机定时器计数器
7.3 定时器/计数器的四种工作模式及应用
第七章51系列单片机定时器计数器
1. 模式0及应用(以T0为例)
C/T=0时定时器工作方式,控制开关接通振荡 器12分频输出端,T0对机器周期计数。其定时时 间为: