51单片机学习笔记(三)_定时器和计数器
第七章 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所控 制。
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时,计数器工作。
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单片机 定时器和计数器 结构
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单片机中,定时器和计数器是两个非常重要的功能模块,它们广泛应用于各种嵌入式系统中。
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的整数倍,因为定时器的频率是晶振
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可以在定时模式或计数模式下工作,通过设置计数值和时钟源频率,实现精确的定时功能或测量外部
事件的时间间隔或频率。
编程则是必不可少的,通过配置寄存器和编写中断服务程序来实现定时器的工作。
c51单片机计数器触发机制
C51单片机的计数器是通过触发机制来工作的。
在C51单片机中,有两种常见的计数器类型:定时器和计数器/计时器。
1. 定时器(Timer):
定时器用于生成一定时间间隔的定时事件。
C51单片机中的定时器是基于内部或外部时钟源进行计数的。
当定时器达到设定的计数值时,会触发定时器中断,并执行相应的中断服务程序(ISR)。
可以使用定时器来生成精确的时间延迟、控制周期性任务等。
2. 计数器/计时器(Counter/Timer):
计数器/计时器可以用来计数外部事件的脉冲数量或测量时间间隔。
它可以根据外部事件的触发边沿(上升沿或下降沿)来触发计数动作。
当计数器达到设定的计数值时,也可以触发计数器中断,并执行相应的中断服务程序(ISR)。
计数器还可以被配置为计时器模式,用于测量时间间隔。
在C51单片机中,计数器的触发机制通常是通过设置相关的寄存器来实现的。
这些寄存器包括计数器的初始值、计数模式、计数触发边沿等。
通过配置这些寄存器,可以灵活地控制计数器的工作方式和触发条件。
需要注意的是,具体的计数器触发机制可能会因不同的单片机型号而有所差异。
因此,在编程时应参考相关的芯片手册或数据表,以了解具体的计数器触发机制及其相应的寄存器设置。
1。
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?
MCS-51单片机计数器定时器详解
MCS-51单片机计数器定时器详解80C51单片机内部设有两个16位的可编程定时器/计数器。
可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变。
在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。
:从上面定时器/计数器的结构图中我们可以看出,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)输入。
定时计数器的原理:16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。
当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。
显然,定时器的定时时间与系统的振荡频率有关。
因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。
如果晶振为12MHz,则计数周期为:T=1/(12×106)Hz×1/12=1μs这是最短的定时周期。
若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。
当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。
计数器在每个机器周期的S5P2期间采样引脚输入电平。
若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。
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,所以要能够测量更高的频率,必须使用前置分频器,对更高频率的待测输入信号进行预分频!。
单片机中的定时器和计数器
单片机中的定时器和计数器单片机作为一种嵌入式系统的核心部件,在各个领域都发挥着重要的作用。
其中,定时器和计数器作为单片机中常用的功能模块,被广泛应用于各种实际场景中。
本文将介绍单片机中的定时器和计数器的原理、使用方法以及在实际应用中的一些典型案例。
一、定时器的原理和使用方法定时器是单片机中常见的一个功能模块,它可以用来产生一定时间间隔的中断信号,以实现对时间的计量和控制。
定时器一般由一个计数器和一组控制寄存器组成。
具体来说,定时器根据计数器的累加值来判断时间是否到达设定的阈值,并在时间到达时产生中断信号。
在单片机中,定时器的使用方法如下:1. 设置定时器的工作模式:包括工作在定时模式还是计数模式,以及选择时钟源等。
2. 设置定时器的阈值:即需要计时的时间间隔。
3. 启动定时器:通过控制寄存器来启动定时器的运行。
4. 等待定时器中断:当定时器计数器的累加值达到设定的阈值时,会产生中断信号,可以通过中断服务函数来进行相应的处理。
二、计数器的原理和使用方法计数器是单片机中另一个常见的功能模块,它主要用于记录一个事件的发生次数。
计数器一般由一个计数寄存器和一组控制寄存器组成。
计数器可以通过外部信号的输入来触发计数,并且可以根据需要进行计数器的清零、暂停和启动操作。
在单片机中,计数器的使用方法如下:1. 设置计数器的工作模式:包括工作在计数上升沿触发模式还是计数下降沿触发模式,以及选择计数方向等。
2. 设置计数器的初始值:即计数器开始计数的初始值。
3. 启动计数器:通过控制寄存器来启动计数器的运行。
4. 根据需要进行清零、暂停和启动操作:可以通过控制寄存器来实现计数器的清零、暂停和启动操作。
三、定时器和计数器的应用案例1. 蜂鸣器定时器控制:通过定时器模块产生一定频率的方波信号,控制蜂鸣器的鸣叫时间和静默时间,实现声音的产生和控制。
2. LED呼吸灯控制:通过定时器模块和计数器模块配合使用,控制LED的亮度实现呼吸灯效果。
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单片机定时器/计数器的结构
内 部 结 构定 框时 图器
单片机定时器与计数器的区别
单片机定时器与计数器的区别在51单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,两者的区别是什么呢?下面就跟着店铺一起来看看吧。
单片机计数器与定时器的区别计数器和定时器的本质是相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。
当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。
在定时器和计数器中都有一个溢出的概念,那什么是溢出了。
呵呵,我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,过了一会儿,碗的水满了,就发生溢出。
同样的道理,假设水龙头的水是一滴滴的往碗里滴,那么总有一滴水是导致碗中的水溢出的。
在碗中溢出的水就浪费了,但是在单片机的定时计数器中溢出将导致一次中断,至于什么是中断我们下次再讲,这里只是初步的提下概念,中断就是能够打断系统正常运行,而去运行中断服务程序的过程,当服务程序运行完以后又自动回到被打断的地方继续运行。
在定时器计数器中,我们有个概念叫容量,就是最大计数量。
方式0是2的13次方,方式1是2的13次方,方式2是2的8次方,方式3是2的8次方。
把水滴比喻成脉冲,那么导致碗中水溢出的最后一滴水的就是定时计数器的溢出的最后一个脉冲。
在各种单片机书本中,在介绍定时计数器时都讲到一个计数初值,那什么是计数初值呢?在这里我们还是假设水滴碗。
假设第一百滴水能够使碗中的水溢出,我们就知道这个碗的容量是100。
问题1,我如何才能使碗接到10滴水就溢出呢?呵呵,我可以想象,如果拿一个空碗去接水,那么还是得要100滴水才能溢出,但是如果我们拿一个已经装有水的碗拿去接,那就不用100滴了。
到此我们可以算出,要使10滴水让碗中的水溢出,那么碗中就先要装90滴水。
在定时计数器中,这90滴水就是我们所谓的初始值。
问题2,在一个车间我们如何利用单片机对100件产品进行计件,并进行自动包装呢?我们可以利用计数器计数100,在中断中执行一个自动包装的动作就可以了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机学习笔记(三)_定时器和计数器
注:定时器与计数器原理与使用方法相似、此处计数器知识为基础普及、后
面详讲2 个定时器(寄存器)、定时器0、定时器1、(计数器0、计数器1)
TMOD:定时器/计数器模式控制寄存器详见百度百科TMOD
每经过一个机器周期、寄存器+1TF:定时器溢出标志。
溢出时自动置1。
中
断时硬件清零否则必须软件清零。
TR:定时器运行控制位。
置1 开始计时、清
零停止计时。
C/T:该位为0 时用作计时器、该位为1 时用作计数器。
溢出时
时间-开始计时时间=预设定时时间
一个机器周期共有12 个振荡脉冲周期若设定时为0.02s,则:
12*(65535-X)/11059200=0.02s
定时器作加1 次数:X=47104=0xB800 次时间为0.02s
使用定时器的方法
1、设置特殊功能寄存器TMOD,使之工作在需求的状态。
2、设置计数寄存
器的初值,精确设定好定时时间。
3、设置特殊功能寄存器TCON,通过打开
TR 来让定时器进行工作。
4、判断寄存器TCON 的FT0 位、检测定时器溢出情况。
假设我们使用定时器0、定时为0.02s,两个寄存器计时
TMOD=0x01; TMOD=0x01,指的是采用T0 方式,将M1 置0,M0 置1,是
方式一的定时器
高八位寄存器TH0=0xB8、低八位寄存器TL0=0x00
C 程序实现1s 钟定时
#include typedef unsigned char uint8;typedef unsigned int uint16;sbit led=P1;uint8 counter;void main(){TMOD=0x01;TH0=0xb8;TL0=0x00;TR0=1;。