第二部分 微机原理 第8章 单片机的 定时/计数器 主讲教师:喻红
主要内容 概述 8.1 定时/计数器的结构和工作原理 8.2 定时/计数器的寄存器 8.3 定时/计数器的工作方式 8.4 定时/计数器的应用程序设计
概述 实现定时一般有三种方法: 利用软件实现(延时程序); 优点:简单,控制方便;缺点:CPU效率低。 硬件实现,专门设计一个单稳态定时器 利用计数器实现 1us 8位 256us 计数器 输入脉冲 溢出 预置数 计算机一般利用第三种方法实现
8051内部设有两个16位的定时器/计数器,可用软件控制。 定时器:对机器周期计数,每过一个机器周期,计数器内容加1 ; 计数器:对外来脉冲进行计数,T0、T1引脚上从高电平到低电平跳变时,计数器内容加1。 片内计数器 单片机 机器周期 外来脉冲 T0
8.1 定时/计数器的结构和工作原理 一、定时/计数器的结构
二、定时/计数器工作原理 1.定时方式 C/T=0 最短的定时周期=12/fosc
2.计数方式 C/T=1 要求:计数频率≤fosc/24,输入脉冲的高电平与低电平的持续时间在一个机器周期以上。
8.2 定时/计数器的寄存器 1.定时/计数器方式寄存器TMOD TMOD 89H 7 6 5 4 3 2 1 GATE C/T* M1 8.2 定时/计数器的寄存器 1.定时/计数器方式寄存器TMOD TMOD 89H 7 6 5 4 3 2 1 GATE C/T* M1 M0 M2 T1控制 T0控制 GATE:门控信号。GATE=0,TR0=1时刻启动定时/计数器工作,是自启动方式;GATE=1,TR0=1,/INTO=1时才可启动定时/计数器工作,使外启动方式。 C/T*:定时、计数选择位。 C/T*=1,计数工作方式; C/T*=0,定时工作方式。
TMOD 89H 7 6 5 4 3 2 1 GATE C/T* M1 M0 M2 T1控制 T0控制 M1M0:工作方式选择位。定时/计数器的4种工作方式由M1M2设定。 M1M0=00 工作方式0(13位方式) M1M0=01 工作方式1(16位方式) M1M0=10 工作方式2(8位自动装入计数初值方式) M1M0=11 工作方式3(T0为2个8位方式)
2.定时器控制寄存器TCON T1溢出中断标志 T1起/停控制位 TCON A8H 7 6 5 4 3 2 1 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 外部中断INT1触发方式控制位 外部中断INT1中断标志位
8.3 定时/计数器的工作方式 一、工作方式0 T0和T1工作在13位的定时/计数器方式,由TH的高 8 位和TL的低 5 位组成。
方式0的计数长度:M = 213 方式0的初值:13位二进制数(高8位赋值给TH0,低5位前面补足3个0凑成8位赋给TL0)。 例如,如要求计数值为1000,则初值为 x=M-1000=8192-1000 =1C18H=1 1100 000 1 1000B 则赋初值时,TH0=0E0H,TL0=18H。
二、工作方式1 方式1和方式0的工作原理基本相同,唯一不同是T0和T1工作在方式1时是16位的计数/定时器。 方式1时的计数长度M是2的16次方。16位的初值直接拆成高低字节,分别送入TH和TL即可。
三、工作方式2 工作方式2具有自动重装载功能,它将16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器。初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,由预置寄存器TH0以硬件方法自动给计数器TL0重新加载。
四、工作方式3 在工作方式3模式下,定时/计数器0被拆成两个独立的8位计数器TL0和TH0。
TL0既可以作计数器使用,也可以作为定时器使用,定时/计数器0的各控制位和引脚信号全归它使用。其功能和操作与方式0或方式1完全相同。 TH0只能作为简单的定时器使用,借用定时/计数器1的控制位TR1和TF1。 定时/计数器1只能工作在方式0、方式1或方式2下,如果设置T1工作在方式3,则T1停止工作,相当于其他方式时令TR1=0。 T0处于方式3时, T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合。
(1)T1工作在方式0 (2)T1工作在方式1
(3)T1工作在方式2
8.4 定时/计数器的应用程序设计 一、计算定时/计数初值 计数方式: 定时方式: 其中: N与工作方式有关: 方式0时,N=13; 8.4 定时/计数器的应用程序设计 一、计算定时/计数初值 计数方式: 定时方式: 其中: N与工作方式有关: 方式0时,N=13; 方式1时,N=16; 方式2、3时,N=8。 机器周期与主振频率有关:机周时间=12/fosc fosc=12MHZ时,1机周=1S; fosc=6MHZ 时,1机周=2S。
【例】 已知晶振6MHz,要求定时0.5ms,试分别求出T0工作于方式0、方式1、方式2、方式3时的定时初值。 解:(1)工作方式0: 213–500S/2S=8192-250=7942=1F06H 1F06H化成二进制: 1F06H=0001 1111 0000 0110B =000 11111000 00110 B 其中:低5位00110前添加3位000送入TL0 TL0=000 00110B=06H; 高8位11111000B送入TH0 TH0=11111000B=F8H。
(2)工作方式1: T0初值 =216-500s/2s=65536–250=65286=FF06H TH0=FFH;TL0=06H。 (3)工作方式2: T0初值 =28-500s/2s=256-250=6 TH0=06H;TL0=06H。 (4)工作方式3: T0方式3时,被拆成两个8位定时器,定时初值可分别计算,计算方法同方式2。两个定时初值一个装入TL0,另一个装入TH0。因此: TH0=06H;TL0=06H。 从上例中看到,方式0时计算定时初值比较麻烦,根据公式计算出数值后,还要变换一下,容易出错,不如直接用方式1,且方式0计数范围比方式1小,方式0完全可以用方式1代替,方式0与方式1相比,无任何优点。
二、定时/计数器应用步骤 (1)合理选择定时/计数器工作方式 (2)计算定时/计数器定时初值(按上述公式计算) (3)编制应用程序 ①定时/计数器的初始化 包括定义TMOD、写入定时初值、设置中断系统、启动定时/计数器运行等。 ②正确编制定时/计数器中断服务程序 注意是否需要重装定时初值,若需要连续反复使用原定时时间,且未工作在方式2,则应在中断服务程序中重装定时初值。
如图所示,P1中接有八个发光二极管,编程使八个管轮流点亮,每个管亮100ms,设晶振为6MHz。
分析 利用T1完成100ms的定时,当P1口线输出“1” MC=2μs 100ms/2μs =50000=C350H (C350H)补 =10000H-C350H=3CB0H
①查询方式如下: ORG 0030H MOV A,#01H:置第一个LED亮 NEXT:MOV P1,A MOV TMOD,#10H ;T1工作于定时方式1 MOV TH1,#3CH MOV TL1,#0B0H; 定时100ms SETB TR1 AGAI:JBC TF1,SHI; 100ms到转SHI,并清TF1 SJMP AGAI SHI:RL A SJMP NEXT
AJMP MAIN ;单片机复位后从0000H开始执行 ②中断方式 ORG 0000H AJMP MAIN ;单片机复位后从0000H开始执行 ORG 001BH AJMP IV1 ;转移到IV1 ORG 0030H ;主程序 MAIN:MOV A,#01H MOV P1,A ;置第一个LED亮 MOV TMOD,#10H ;T1工作于定时方式1 MOV TH1,#3CH MOV TL1,#0B0H ;定时100ms SETB TR1 ;启动T1工作 SETB ET1 ;允许T1中断 WAIT:SJMP WAIT ;等待中断
IV1:RL A ;中断服务程序,左移一位 MOV P1,A ;下一个发光二极管亮 MOV TH1,#3CH MOV TL1,#0B0H ;重装计数初值 RETI ;中断返回 以上程序进入循环执行,八个LED一直循环轮流点亮。
本章结束