170 likes | 384 Views
第六章 MCS-51 单片机定时器 / 计数器. 概述 第一节 定时器 / 计数器结构和工作方式 第二节 定时器 / 计数器的编程应用举例. 概 述. 定时器/计数器是 MCS - 51 单片机的重要功能模块之一。在检测、控制及智能仪器等应用中,常用定时器作实时时钟,实现定时检测、定时控制。还可用定时器产生毫秒宽的脉冲,驱动步进电动机一类的电气机械。计数器主要用于外部事件的计数。 MCS - 51 单片机内有 3 个定时器/计 数器 T0 、 T1 和 T2 ;本章主要介绍 MCS - 51 的原理、结构、工作方式及应用。. 脉冲. +1 计数器. 溢出.
E N D
第六章 MCS-51单片机定时器/计数器 • 概述 • 第一节 定时器/计数器结构和工作方式 • 第二节 定时器/计数器的编程应用举例
概 述 • 定时器/计数器是MCS-51单片机的重要功能模块之一。在检测、控制及智能仪器等应用中,常用定时器作实时时钟,实现定时检测、定时控制。还可用定时器产生毫秒宽的脉冲,驱动步进电动机一类的电气机械。计数器主要用于外部事件的计数。MCS-51单片机内有3个定时器/计 • 数器T0、T1和T2;本章主要介绍MCS- • 51的原理、结构、工作方式及应用。
脉冲 +1计数器 溢出 中断 控制 开关 实质是计数器,脉冲每一次下降沿,计数寄存器数值将加1。 计数的脉冲如果来源于单片机内部的晶振,由于其周期极为准确,这时称为定时器。计数的脉冲如果来源于单片机外部的引脚,由于其周期一般不准确,这时称为计数器。 • MCS-51 计数/定时器的原理
P3.4 P3.5 第一节 定时器/计数器结构 和工作方式 • 一、定时器/计数器0,1的结构
T0 T1 • 一、定时器方式控制寄存器TMOD 1)功能选择位C/T: =0,定时功能,计数内部机器周期脉冲; =1,计数功能,计数引脚T0(T1)输入的负脉冲。 2)方式选择位M1、M0: 3)门控方式选择位GATE 计数器启动方式的选择 确定定时器工作方式指令: MOV TMOD,#方式字 例:设T0用方式2非门控定时,T1用方式1门控计数。 MOV TMOD,#0D2H ; 1101 0010 B
三.定时器/计数器控制寄存器TCON (1)定时器/计数器1运行控制位TR1(TCON.6) (2)定时器/计数器溢出中断标志TF1(TCON.7),当定时器/计数器1溢出时由硬件自动置TF1=1,在中断允许的条件下,便向CPU发出定时器/计数器1的中断请求信号,CPU响应后TF1由硬件自动清零。在中断屏蔽条件下,TF1可作查询测试用。 TF1也可以用程序置位或清零,例如执行指令SETB TF1后TF=1。这就是说,定时器/计数器1的中断请求还能用程序安排产生,这称为软件中断。 在定时器/计数器1工作时,CPU可以随时查询TF1的状态。 (3)定时器/计数器0运行控制位TR0(TCON.4) (4)定时器/计数器0溢出中断标志TF0(TCON.5)
四、工作方式 一、方式0 • 13位定时/计数器。 THx 8位和TLx低5位组成13位加1计数器,此种方式与MCS-48系列兼容,如果不是为了兼容的目的,一般不用方式0.方式0的全部功能,方式1都可以代替。
可用程序将0-8191(213-1)的某一数送入TH0、TL0作为初值。TH0、TL0从初值开始加法计数,直至溢出,所以设置的初值不同,定时时间或计数值也不同。可用程序将0-8191(213-1)的某一数送入TH0、TL0作为初值。TH0、TL0从初值开始加法计数,直至溢出,所以设置的初值不同,定时时间或计数值也不同。 • 当对外部事件计数时,外部计数脉冲的频率应小于fosc/24,且高电平与你电平的延续时间均不得小1个机器周期。计数值由式 N=8192-x 计算(x为初值) • 对内部机器周期计数即为定时,定时时间由式 • T=(8192-x)Tcy计算
二、方式1 16位定时/计数器。 THx8位和TLx8位组成16位加1计数器 最大计数脉冲个数:1~65536(216),最长定时时间(晶振12MHz T=1s):1s ~ 65536×T= 65.54ms 非门控方式:当GATE=0, 控制权由 TRx 决定 TRx=1 计数开始 TRx =0 计数停止 门控方式:当GATE=1、TRx=1 控制权由 INTx 决定 INTx=1 计数开始 INTx =0 计数停止
三、方式2 用于需要重复定时和计数的场合。 最大计数值:256 (28) 最大定时时间(晶振12MHz时 T=1s): 256s • 自动恢复初值8位定时/计数器。TLx为8位加1计数器, • THx为8位初值暂存器。
四、方式3 • T0分成2个8位定时器:TL0定时/计数器和TH0定时器 • TL0占用T0控制位:C/T,TR0,GATE;TH0占用T1控制 • 位:TR1。T1不能使用方式3工作。
第二节 定时器/计数器的编程应用举例 • 一、定时器/计数器的初始化 • 1.初始化的步骤 • (1) 确定工作方式、操作模式、启动控制方式——写入TMOD寄存器。 • (2) 设置定时器或计数器的初值——可直接将初值送入TH0、TL0或TH1、TL1中,16位计数初值必须分两次写入对应的计数器。 • (3)根据要求是否采用中断方式——直接对I E寄存器赋值。开放中断时,将对应的中断允许位置1,采用程序查询方式IE应将对应的中断允许位清0,进行中断屏蔽。 • (4)启动定时器工作——可使用SETB TR0、SETB TR1和SETB TR2指令启动。对于T0和T2而言,可根据GATE的设置有两种启动。
2.计数初值的计算 • 当计数器使用时,初值X的计算式为: • X=M-计数值 • 当定时器使用时,初值的计算式为: • X=M-计数值=M-T/TCY • 式中:TCY --为机器周期, • T --为要求定时的时间。 • M 由工作方式决定 • 例如:MCS-51的主频为6MHz,要求产生1ms的定时,试计算计数初值X。若设置定时器工作于操作模式1,定时1ms,则计数初值X等于:
3. 定时器初始化举例 • 例6-1 已知振荡器振荡频率fosc=12MHz,要求定时器/计数器0产生10ms定时,试编写初始化程序。 • 解:由于定时时间大于8192us,应选用工作方式1。 • (1)TH0、TL0初值的计算由于Tcy=1μs,故有 • T=(65536-x)Tcy=(65536-x)×1μs=10ms • 得x=55536=D8F0 即TH0=D8H,TL0=F0H • (2)方式寄存器TMOD的编程 • (3)初始化程序 • START:MOV TL0,#0F0H • MOV TH0,#0D8H • MOV TMOD,#01H • SETB TR0
1ms 二、定时器的应用举例 源程序如下: ORG 8000H MOV TL0,#06H MOV TH0,#0F8H SETB TR0 LP1:JBC TF0,LP2 ; AJMP LP1 LP2:MOV TL0,#06H MOV TH0,#0F8H CPL P1.2 SJMP LP1 • 1. 模式0的应用 • 例6-3 选用T0操作模式0,用于定时,由P1.2输出周期为1ms的方波,设晶振fosc=6MHz。采用查询方式编程。 • 解:确定用T0定时500μs。设X为时间初值 • X=213-fosc×t/12=8192-6×500/12=7942=1F06H • 由于作13位计数器使用,TL0的高3位未用,应填0,TH0占高8位,所以13位的二进制表示值应为: • X0=1111100000110B, • TL0=06H,只用到5位,TH0=F8H • 设置模式控制字 • TMOD:00000000 00H 000
例P1.7驱动LED亮1秒灭1秒地闪烁,设时钟频率为12MHz。 长定时方法:增加一个软件计数器(如R7), 记录中断 次数,计满n个中断为1秒。 ORG 0000H AJMP MAIN ORG 001BH AJMP PT1INT ORG 0030H START:MOV R7,#00H MOV TMOD,#10H MOV TL1, #0F0H MOV TH1, #0D8H SETB EA SETB ET1 SETB TR1 HERE: SJMP HERE PT1INT: MOV TL1,#0F0H MOV TH1,#0D8H INC R7 CJNE R7,#10, PEND MOV R7, #00H CPL P1.7 PEND: RETI