第六章 定时 / 计数器 §6-1 mcs-51 单片机的定时 / 计数器 §6-2 mcs-51...

25
第第第 第第 / 第第第 §6-1 MCS-51 第第第第第第 / 第第第 §6-2 MCS-51 第第第第第第 / 第第第第第第

Upload: roana

Post on 18-Jan-2016

175 views

Category:

Documents


36 download

DESCRIPTION

第六章 定时 / 计数器 §6-1 MCS-51 单片机的定时 / 计数器 §6-2 MCS-51 单片机的定时 / 计数器的应用. §6-1 MCS-51 单片机的定时 / 计数器 返回. 一、定时 / 计数器的基本功能 1 、可以作为定时器也可选择为计数器; 2 、定时值和计数值在规定的范围内是可编程的; 3 、当达到设定的定时值或计数值时会有相应的信号输出,并可向 CPU 提出中断,以便实现定时或计数控制 二、 MCS-51 系列单片机内部定时 / 计数器 1 、结构框图及基本工作原理 - PowerPoint PPT Presentation

TRANSCRIPT

第六章 定时 / 计数器

§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 的启动方式,逻辑如图:

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/fo

sc ) 计数初值 =28 — 欲计数脉冲数 =28 —△T/ 机器

周期 例如:定时 500 , fosc=6MHz 时,初值 =28—500/2=6= 06H

则: TH0=TL0=06H 4 、工作方式 3 ( M1M0=11——2 个 8 位计数器(仅限于 T

0 )) 在 T0 方式 3 下, T0 、 T1 的设置和使用是不同的。 ( 1 ) T0 方式 3 TL0 :使用 T0 原有控制资源,功能与方式 0 、 1 相同。 TH0 :借用 T1 的 TR1 、 TF1 ,只能对片内机器周期脉冲计数, 作 8 位定时器

T0 方式 3 时的 T0 、 T1 电路逻辑结构,如图所示

T0 方式 3 时的 T0 初值计算完全同方式 2 ( 2 ) T0 方式 3 下的 T1 T0 方式 3 时, T1 仍然可工作于方式 0~ 方式 2 ,如上

页图所示。 C/ 控制位仍可使 T1 工作在定时器或计数器方式,只是由于其 TR1 、 TF1 被 T0 的 TH0 占用,因而没有计数溢出标志可供使用,计数溢出时只能将

输出结果送至串行口,即用作串行口波特率发生器。 T0 方式 3 下的 T1 方式 2 ,因定时初值能自动恢复,用

作波特率发生器更为合适。

一、内部定时 / 计数器的使用须知 1 、用于定时控制及外部计数 2 、与 TX 工作有关的寄存器为 TMOD 、 TH0 、 TL0 、 TH1 、 T

L1 、 TCON 及 IE ,它们的字节地址依次为 89H 、 8CH 、 8A80H 、 8BH 及 0A8H ;

3 、使用 Tx之前须对其进行初始化编程:(1)按用户的要求并根据 TMOD 的格式设定方式控制字并写入

TMOD 中 ;

(2)按用户的要求确定定时或计数的初值并写入 THX 或 TLX 中。(3)按用户的要求并根据 IE 的格式确定中断控制字并写入 IE 中。(4) 将 TCON 寄存器中的 TRx 置位 , 启动 Tx 。

§6-2 MCS-51 单片机的定时 / 计数器应用 返回

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 的翻转方法:查询方式、中断方式 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 0030HSTART : 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 、掌握定时计数器初始化编程设计方法。 重点:定时 / 计数器的四种工作方式下初始值的计

算。 难点:定时 / 计数器的初始化。