250 likes | 381 Views
第六章 定时 / 计数器 §6-1 MCS-51 单片机的定时 / 计数器 §6-2 MCS-51 单片机的定时 / 计数器的应用. §6-1 MCS-51 单片机的定时 / 计数器 返回. 一、定时 / 计数器的基本功能 1 、可以作为定时器也可选择为计数器; 2 、定时值和计数值在规定的范围内是可编程的; 3 、当达到设定的定时值或计数值时会有相应的信号输出,并可向 CPU 提出中断,以便实现定时或计数控制 二、 MCS-51 系列单片机内部定时 / 计数器 1 、结构框图及基本工作原理
E N D
第六章 定时/计数器§6-1 MCS-51单片机的定时/计数器§6-2 MCS-51单片机的定时/计数器的应用
§6-1 MCS-51单片机的定时/计数器 返回 一、定时/计数器的基本功能 1、可以作为定时器也可选择为计数器; 2、定时值和计数值在规定的范围内是可编程的; 3、当达到设定的定时值或计数值时会有相应的信号输出,并可向CPU提出中断,以便实现定时或计数控制 二、MCS-51系列单片机内部定时/计数器 1、结构框图及基本工作原理 基本部件是两个8位加法计数器TH及TL,结构框图如图6-1所示: (1)定时功能 当计数脉冲来自内部时钟脉冲时,即机器周期信号,此时为定时器。此时结构图中开关C与A相联。
(2)计数功能 • 作为外部计数器时,计数脉冲来自于外部输入端。此时C与B相联。 • 图6-1 定时器的基本结构
2、内部定时/计数器的控制 定时/计数器的功能、工作方式、定时(计数初)值及中断由TMOD、TCON及IE 控制。 (1)方式控制寄存器TMOD 控制和选择定时/计数器的工作方式,高四位控制T1,低四位控制T0,格式如下:
GATE:门控位,定义T1/T0的启动方式,逻辑如图:GATE:门控位,定义T1/T0的启动方式,逻辑如图: • C/:定时/计数位。 • 为“0”,作定时器用;为“1”,作计数器用。 • M1M0:工作方式选择位。 • 00 方式0 13位计数器 • 01 方式1 16位计数器 • 10 方式2 初值自动重装8位计数器 • 11 方式3 2个8位计数器,仅适用于T0
(2)、定时器控制寄存器TCON(88H) • TCON既参与定时控制又参与中断控制,有关定时控制的有4位,表示如下: • TF1/TF0:当T1/T0的计数器计数溢出时,该位置“1”。 • TR1/TR0:T1/T0运行控制位。软件将其置“1”时,启动T1/T0工作。 • 另外4位IE0、IE1、IT1、IT0为中断控制位。 • (3)、中断允许控制寄存器IE。 • 见第五章的部分。
三、定时/计数器的工作方式 • 1、工作方式0 ( M1M0=00 ——13位计数器) • (1)结构 • 由THX的全部8位和TL0的低5位构成,如下图。当TL0低5位计数满时直接向TH0进位,并当全部13位计数满溢出时,TF0置“1”。 • (2)TMOD值: • 作定时器:TMOD=00000000=00H • 作计数器:TMOD=00000100=04H
(3)计数初值 • 最大计数值为213=8192 • △T=(213 — 计数初值)× 机器周期(12/fosc) • 计数初值=213 —欲计数脉冲数=213 —△T/ 机器周期 • 2、工作方式1( M1M0=01——16位计数器) • 方式1时的电路逻辑结构如图所示
作定时器,TMOD=01H; • 作计数器,TMOD=05H; • △T=(216 — 计数初值)× 机器周期(12/fosc) • 计数初值=216 —欲计数脉冲数=216 —△T/ 机器周期 • 例如:定时500us,fosc=6MHz时, 初值=216—500/2=65536-250=65286=FF 06H • 那么:TH0=FFH,TL0=06H • 3、工作方式2 (M1M0=10——自动复位的8位计数器) • 以TL0作计数器,而TH0作为预置寄存器。当计数满溢出时,TF0置“1”,同时TH0将计数初值以硬件方法自动装入TL0。逻辑结构,如图所示:
作定时器,TMOD=02H; • 作计数器,TMOD=06H; 最大计数值为28=256,若fosc=12MHz,则方式2的最大定时时间为256us。当作为定时器用时,定时时间的计算公式: • △T=(28 — 计数初值)× 机器周期(12/fosc) • 计数初值=28 —欲计数脉冲数=28 —△T/ 机器周期 • 例如:定时500,fosc=6MHz时,初值=28—500/2=6= 06H 则:TH0=TL0=06H • 4、工作方式3 (M1M0=11——2个8位计数器(仅限于T0)) • 在T0方式3下,T0、T1的设置和使用是不同的。 • (1)T0方式3 • TL0:使用T0原有控制资源,功能与方式0、1相同。 • TH0:借用T1的TR1、TF1,只能对片内机器周期脉冲计数, • 作8位定时器
T0方式3时的T0初值计算完全同方式 2 • (2)T0方式3下的T1 • T0方式3时,T1仍然可工作于方式0~方式2,如上页图所示。C/控制位仍可使T1工作在定时器或计数器方式,只是由于其TR1、TF1被T0的TH0占用,因而没有计数溢出标志可供使用,计数溢出时只能将 • 输出结果送至串行口,即用作串行口波特率发生器。 • T0方式3下的T1方式2,因定时初值能自动恢复,用作波特率发生器更为合适。
§6-2 MCS-51单片机的定时/计数器应用 返回 • 一、内部定时/计数器的使用须知 • 1、用于定时控制及外部计数 • 2、与TX工作有关的寄存器为TMOD、TH0、TL0、TH1、TL1、TCON及IE,它们的字节地址依次为89H、8CH、8A80H、8BH及0A8H; • 3、使用Tx之前须对其进行初始化编程: (1)按用户的要求并根据TMOD的格式设定方式控制字并写入TMOD中; (2)按用户的要求确定定时或计数的初值并写入THX或TLX中。 (3)按用户的要求并根据IE的格式确定中断控制字并写入IE中。 (4)将TCON寄存器中的TRx置位,启动Tx。
4、计数器方式下的计数值及定时器方式下的定时值的扩大:4、计数器方式下的计数值及定时器方式下的定时值的扩大: (1)计数器方式下的最大计数值为216,若要将计数范围扩大,可采用一软件计数器(开如时清0)对内部计数器溢出的次数进行计数。设N为内部计数器的计数值,y为内部计数器的初始值,C1为内部计数器的当前值,Q为软件计数器的计数值。此时外部事件的计数值=N*Q+C1-y=(2n-y)*Q+C1-y; (2)定时器方式下的最大定时值为216*Tm,如采用12MHz的晶振,则Tm=1μs。最大定时值为65536 μs=65.536 μs。若要扩大定时值,可用一软件计数器(开始时清0)对内部定时器的定时时间进行计数。设Tc为内部定时器的定时值,y为内部计数器的初始值,C1为内部计数器的当前值,Q为软件计数器的计数值,此时的定时时间Tcs=Tc*Q+(C1-y)Tm。
5、计数器当前(计数)值的读取 在某些情况下,需要读取计数器当前值,可采用数据传送指令完成,读取时应先读取低字节,再读取高字节。 • 6、当内部定时工作于非方式2且采用中断方式时,则在中断服务程序中必须重新置计数器初值,以保证定时值不变。由于定时/计数器溢出后继续进行计数,在精确定时场合下,重置的初值须修改,即扣除中断响应及中断服务程序中重新装入初值之前的程序段所执行的时间,一般情况为7-8个机器周期。
二、应用实例: • 【例5-1】 已知fosc=6MHz,利用T1定时500us,在P1.0口输出周期为1ms的方波脉冲,使用方式0-方式2编程。 • 解:1)方波波形如图所示: • 2)计数初值: • 方式0:计数初值=213 —欲计数脉冲数=213 —△T/ 机器周期=213-500/2=1F06H∴ TH1=F8H,TL1=06H • 方式1:计数初值=216 —欲计数脉冲数=216 —△T/ 机器周期=216-500/2=FF06H∴ TH1=FFH,TL1=06H • 方式2:计数初值=28 —欲计数脉冲数 =28 —△T/ 机器周期=28-500/2=06H∴ TH1=TL1=06H
3)定时到达P1.0的翻转方法:查询方式、中断方式3)定时到达P1.0的翻转方法:查询方式、中断方式 • 4)流程、程序如下: • 方式0:采用查询方式 • 程序: 流程: • ORG 0030H • START:MOV TMOD,#00H • MOV TH1, #0F8H • MOV TL1, #06H • MOV IE, #00H • SETB TR1 • WT:JNB TF1, WT • CPL P1.0 • CLR TF1 • MOV TH1, #0F8H • MOV TL1, #06H • SJMP WT
方式1:采用中断方式 • ORG 0000H • LJMP START • ORG 001BH • LJMP 0100H • ORG 0030H START:MOV TMOD,#10H • MOV TH1, #0FFH • MOV TL1, #06H • MOV IE, #88H • MOV IP, #0000 1000B • SETB TR1 • SJMP $
中断服务程序: • ORG 0100H • CPL P1.0 • MOV TH1, #0FFH • MOV TL1, #06H • RETI
【例5-2】 用软件延时和定时器中断方式、查询方式定时的方法编程,试设计控制六盏LED灯的程序,设晶振fosc=12MHZ,要求: • 1)K合上后,L1 -L6轮流点亮1秒,如此循环 • 2)K断开后,全灭,等待下次启动 • 3)要求用T0定时器、软件程序延时两种方案实现 • 解:(1)硬件原理图及I/O分配,如图所示; • (2)用定时器T0方式1实现延时:
①定时器T0初值: • 定时时间:tmax=65536×1us=65.536ms,取50ms • 1秒延时实现:50ms延时20次 • T0 的 初值:=216-50000us/1us =15536 =3CB0H • TMOD =(0000 0001)B =01H • ②控制流程 • 查询方式:通过对TF0的查询,获得50ms延时,并循环20次,获得1S延时 • 中断方式:通过T0溢出中断,获得50ms延时,并循环20次,获得1S延时
(3)用软件程序延时 • ORG 0000H • LJMP START • ORG 0030H • START:MOV P3,#04H • MOV A, #01H • LOOP1:MOV P1, #00H • WT :JB P3.2,WT • LOOP2:MOV P1,A MOV R7,#10 • DL3:MOV R6,#200 • DL2:MOV R5,#125 • DL1:JNB P3.2,LOOP1 • DJNZ R5,DL1 • DJNZ R6,DL2 • DJNZ R7,DL3 • JB ACC.5,JP1
RL A • AJMP LOOP2 • JP1 :MOV A,#01H • AJMP LOOP2 • 其流程图如图所示:
本 章 小 结 • 1、了解定时/计数器的结构和原理 • 2、掌握定时/计数器的方式控制寄存器TMOD和定时控制寄存器TCON 的使用方法,熟悉定时/计数器的四种工作方式。 • 3、掌握定时计数器初始化编程设计方法。 • 重点:定时/计数器的四种工作方式下初始值的计 算。 • 难点:定时/计数器的初始化。