第9章 C51定时器
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.1 定时器/计数器简介
• 51系列单片机具有两个通用定时器/计数器T0和T1。T0和T1 都具有定时和计数两种功能,可以通过特殊功能寄存器来 选择,下面分别介绍。 • 计数。计数功能就是对计数脉冲进行计数。其中,计数脉 冲来自相应的外部输入引脚P3.4(T0)或P3.5(T1)。当 该引脚的输入信号发生由高电平至低电平的负跳变时,计 数器(TH0、TL0或TH1、TL0)的值增加1。 • 定时。定时功能是对时间进行统计。定时器/计数器的定时 功能其实也是通过计数实现的,只不过,此时的计数脉冲 来自于单片机的内部时钟脉冲。 • 除此之外,定时器/计数器T0和T1共有4种工作模式,同样 可以通过特殊功能寄存器来选择。
9.6 小结
• 本章详细讲述了51系列单片机的定时器/计数器的 结构,控制寄存器以及4种工作模式,并结合每一 种工作模式给出了详细的程序设计方法和实例。 定时器/计数器是单片机的一个非常有用的功能, 熟练掌握本章内容,对以后的C51单片机程序设计 有很大帮助。
定时器/计数器的结构示意图
9.1.2 方式控制寄存器TMOD
• TMOD寄存器用于定义T0和T1的工作方式和4种工作 模式,其单元地址为89H。定时器/计数器0和1的 方式控制寄存器TMOD,如图所示。其中,低4位用 于控制T0,高4位用于控制T1,两部分操作和含义 完全相同。下面分别介绍各个控制位的含义:
第9章 C51定时器/计数器程序设计
• C51语言是运行于单片机上的程序语言,因此,学 习C51语言必须结合单片机来进行。51系列单片机 集成了多种硬件资源,这些资源均可以使用C51语 言来进行控制。本章开始便介绍如何将C51程序应 用于单片机上。 • 51系列单片机的集成了两个可编程的定时器/计数 器,即定时/计数器0和1,简称T0和T1,有4种工 作方式可供选择。单片机内部通过专用寄存器 TMOD、TCON来设置定时/计数器工作的参数,例如 方式选择、定时计数选择、运行控制、溢出标志、 触发方式等控制字。本章介绍如何使用C51语言来 进行定时器/计数器程序设计。
控制寄存器TCON
9.1.4 定时器/计数器的初值
• 单片机内部的定时器/计数器是加法计数,其在计数溢出时 才申请中断。为了实现自定义的计数值或定时值,需要从 计数最大值计算得出需要设置的初值。在不同的工作模式 中,计数最大值不同,可以为213、216和28。假设计数最大 值为MAX,则初值X计算方法如下: • 在计数方式下,X=MAX-计数值。 • 在定时方式下,X=MAX-定时值/T。 • 式中T为单片机的计数周期,也就是单片机的机器周期。 • 例如,当单片机的机器周期T=0.5µs时,如果定时器/计数 器工作于模式0,MAX=213x0.5µs=4.096ms;如果定时器/计 数器工作于模式1,则最大定时值为 MAX=216x0.5µs=32.768ms。
9.5.2 定时器/计数器模式3的程序设计
• 定时器/计数器模式3中,TH0和TL0分别作为两个独立的8位 定时器使用,其程序设计可以按照前面介绍的初始化步骤 来实现。假定8051单片机(或者其它兼容型号单片机)外 接6MHz晶振,需要在P1.0端口和P1.1端口输出如图9.4所示 的波形。从图中可以看出,P1.0引脚的方波周期为400µs, P1.1引脚的方波周期为800µs。程序中可以采用TL0和TH0产 生200µs和400µs的定时中断,并在中断服务例程中对P1.0 引脚和P1.1引脚取反而得到。 • 由于采用了6MHz的晶振,因此单片机的机器周期为 12÷6MHz=2×10-6s=2µs。根据前面介绍的定时初值的计数 方法,定时时间=200µs =200×10-6=(28-X)×2×10-6,因 此定时器TL0的初值为X=156=9CH。同样,定时时间=400µs =400×10-6=(28-X)×2×10-6,因此定时器TL0的初值为 X=56=38H。
9.3.2 定时器/计数器模式1的程序设计
• 定时器/计数器模式1的工作原理和模式0相同,可以按照前 面介绍的初始化步骤来实现。假定8051单片机(或者其它 兼容型号单片机)外接12MHz晶振,需要在P1.2端口输出频 率为50Hz的方波,即周期为20ms。此时可以采用定时器T1 工作于模式1,使定时器产生10ms的定时,通过定时中断来 产生P1.2端口的方波信号输出。 • 由于采用了12MHz的晶振,因此单片机的机器周期为 12÷12MHz=1×10-6s=1µs。根据前面介绍的定时初值的计数 方法,定时时间=10ms=10×10-3=(216-X)×1×10-6,因此 定时器初值X=55536=D8F0H。则根据工作模式1的特点,其 为16位定时器,定时器T1的初值应该设置为TH0=0D8H, TL0=0F0H。
T
T
方式控制寄存器TMOD
9.1.3 中断控制寄存器TCON
• 寄存器TCON的功能是在定时器溢出时设定标志位, 并控制定时器的运行、停止和中断请求。寄存器 TCON的单元地址为88H。中断控制寄存器TCON的组 成,如图所示。其包含3个部分,TF1和TR1位用于 控制T1,TF0和TR0位用于控制T0,其它的为中断 控制。下面分别介绍各种控制位的含义,如下所 示。
9.2.2 定时器/计数器模式0的程序设计
• 定时器/计数器模式0的程序设计可以按照前面介绍的初始 化步骤来实现。假定8051单片机(或者其它兼容型号单片 机)外接6MHz晶振,需要在P1.2端口输出频率为500Hz的方 波,即周期为2ms。此时可以采用定时器T0工作于模式0, 使定时器产生1ms的定时,通过定时中断来产生P1.2端口的 方波信号输出。 • 由于采用了6MHz的晶振,因此单片机的机器周期为 12÷6MHz=2×10-6s=2µs。根据前面介绍的定时初值的计数 方法,定时时间=1ms=1×10-3=(213-X)×2×10-6,因此定 时器初值X=7692=1E0CH。则根据工作模式0的特点,其为13 位定时器,定时器T0的初值应该设置为TH0=0F0H,TL0=0CH。
9.2 定时器/计数器工作模式0的C51程序设计 • 51系列单片机的定时器/计数器工作模式0是13位 计数器,其由一个高8位(0~7)计数器(TH0或 TH1)和一个具有32位分频的低8位计数器中的 (TL0或TL1)的低5位(0~4)组成。
9.2.1 定时器/计数器工作模式0
• 在工作模式0中,定时器/计数器T1和T0的组成结 构与功能完全相同。当置寄存器TMOD的M1=0、 M0=0时,T0和T1就工作在模式0状态。这里以T0为 例进行介绍,T1的使用类似。 • 在工作模式0下,当TL0的低5位计数溢出时,向 TH0进位,当TH0计数器溢出时,计数器清零,并 向溢出控制位TF0进位置1,同时向8051 CPU发出 中断请求。无论工作于计数方式还是定时方式, 其运行原理都是相同的。
9.3 定时器/计数器工作模式1的C51程序设计 • 51系列单片机的定时器/计数器工作模式1是16位 计数器,其由TH0(或TH1)的高8位(0~7)和 TL0(或TL1)的低8位(0~7)组成。工作模式1 与模式0的区别在于计数的位数不同。
9.3.1 定时器/计数器工作模式1
• 在工作模式1中,定时器/计数器T1和T0的组成结 构与功能完全相同。当置寄存器TMOD的M1=0、 M0=1时,T0和T1就工作在模式1状态。这里以T0为 例进行介绍,T1的使用类似。 • 在工作模式1下,当TL0的计数溢出时,向TH0进位, 当TH0计数器溢出时,计数器清零,并向溢出控制 位TF0进位置1,同时向8051 CPU发出中断请求。 无论工作于计数方式还是定时方式,其运行原理 都是相同的。
9.4 定时器/计数器工作模式2的C51程序设计 • 51系列单片机的定时器/计数器工作模式2是8位自 动重新装入的计数器,16位计数器分成独立的2个 部分,其中TH0(或TH1)作为计数初值寄存器, 用于存放和保持初值,初值在程序中设置。
9.4.1 定时器/计数器工作模式2
• 在工作模式2中,定时器/计数器T1和T0的组成结构与功能 完全相同。当置寄存器TMOD的M1=1、M0=0时,T0和T1就工 作在模式2状态。这里以T0为ຫໍສະໝຸດ Baidu进行介绍,T1的使用类似。 • 模式2具有使8位计数器TL0(或TL1)自动重装初值的功能, 在程序初始化时,为TH0、TL0赋同样的初值,此后TL0每次 溢出都由TH0重新装入初值。在这个过程中,不会丢失计数 信号,且重新再装入也不会影响TH0中存放的初值。 • 装入初值并启动定时/计数器后,TL0按加法计数器工作, 当TL0溢出时,使溢出标志位TF0进位置1,并选通三态门, 将TH0存放的初值重新装入到TL0中,使TL0从初值开始继续 下一轮的计数,如此循环下去。作为额外的用途,溢出信 号还将送到串行通信系统,设置并产生串行通信波特率。
9.4.2 定时器/计数器模式2的程序设计
• 定时器/计数器模式2是自动重装载模式,在这种 模式下,计数器初值只需设置1次,在定时器溢出 后不用软件重新设置,硬件会自动复位。工作模 式2常作为串行口波特率发生器使用。这里假设单 片机外接11.0592MHz晶振,使用工作于模式2的定 时器/计数器T1作为串行通信的波特率发生器。
9.1.5 定时器/计数器的初始化
• 单片机的定时器/计数器是可编程控制的,在使用 之前需要先通过如下步骤进行初始化: • (1)指定定时器/计数器的工作模式,通过赋值 TMOD寄存器来实现。 • (2)装入定时器/计数器的初值,通过赋值TH0、 TL0或TH1、TL1来实现。 • (3)启动定时器/计数器中断,通过赋值IE来实 现。如果程序中不使用中断,则可以省略此步骤。 • (4)启动定时器/计数器,通过置位TR0、TR1来 实现。置位后,定时器/计数器将按规定的工作模 式和初值进行计数或开始定时。
9.5 定时器/计数器工作模式3的C51程序设计 • 51系列单片机的定时器/计数器工作模式3是将16 位计数器分成2个相互独立的8位计数器TL0和TH0。
9.5.1 定时器/计数器工作模式3
• 在工作模式0中,当置定时器/计数器T0寄存器 TMOD的M1=1、M0=1时,T0就工作在模式0状态。定 时器/计数器的工作模式3只适用于T0。对于T1, 设置为模式3时,相当于使TR1=0,使其停止计数, 没有什么实际意义。 • 在工作模式3下,TL0使用了T0的状态控制位C/、 GATE、TR0、和TF0。其操作情况与模式0和模式1 相同,即可以按计数方式工作,也可以按定时方 式工作。在定时器工作方式下,其定时时间= (28-T0初值)×时钟周期×12。
9.1.1 定时器/计数器的结构
• 定时器/计数器结构如图9.1所示,其核心是一个 16位的加1计数器。其中,16位的定时器/计数器 T0由2个8位计数器TH0和TL0构成,16位的定时器/ 计数器T1由2个8位计数器TH1和TL1构成。另外, 寄存器TMOD主要用于指定各定时器/计数器的功能 和工作模式;寄存器TCON用于控制定时器/计数器 的启动和停止计数,同时也设置定时器/计数器的 状态。