第 8 章 计数器 / 定时器

36
微微微微微微微 微 8 微 微微微 / 微微微 微微 微微微 微微微 微微微微微微 / 微微微 8253 微微微 / 微微微 8253 微微微微 8253 微微微微 8253 微微微微 8253 微微微微微 8253 微微微微 8253 微微微微

description

第 8 章 计数器 / 定时器. 计数 器 与定时 器概述 可编程计数器 / 定时器 8253 定时器 / 计数器 8253 内部结构 8253 的 引脚功能 8253 的控制字 8253 的工作方式 8253 编程举例 8253 应用举例. 8.1 计数 器 与定时 器概述. 1. 计数功能 对事件的个数进行计数。 正计数:关心记录事件的次数。 倒计数:关心预先设定事件次数发生完的时刻。 可由硬件计数器实现,事件作为计数器的时钟,此时事件的出现频率不一定一成不变。. 2. 定时功能. 取得给定的时间间隔。 - PowerPoint PPT Presentation

Transcript of 第 8 章 计数器 / 定时器

Page 1: 第 8 章  计数器 / 定时器

微型计算机技术

第 8 章 计数器 / 定时器

计数器与定时器概述

可编程计数器/定时器8253• 定时器/计数器8253内部结构• 8253的引脚功能• 8253的控制字• 8253的工作方式• 8253编程举例• 8253应用举例

Page 2: 第 8 章  计数器 / 定时器

微型计算机技术

8.1 计数器与定时器概述• 1. 计数功能

对事件的个数进行计数。•正计数:关心记录事件的次数。•倒计数:关心预先设定事件次数发生完的时刻。

可由硬件计数器实现,事件作为计数器的时钟,此时事件的出现频率不一定一成不变。

Page 3: 第 8 章  计数器 / 定时器

微型计算机技术

2. 定时功能取得给定的时间间隔。

•延时:某事件发生后间隔一定时间的时刻。•时标:给定时间间隔的连续脉冲。

可由硬件计数器来实现,一定频率的信号作为计数器的时钟,如果只计数到就终止,即为延时。如果连续不断的计数即可输出时标。

Page 4: 第 8 章  计数器 / 定时器

微型计算机技术

3. 计数器 / 定时器的用途

计数功能作为计数个数到中断信号。记录外部特定事件发生的个数。

定时功能作为周期性定时中断信号。

用于分时性操作系统。用作系统时钟基准。

作为一个可编程波特率发生器。用于异步串行通讯。作为 I/O 设备输出定时信号。实现外设与 CPU 的同步。节约 CPU 的时间延时。作为音源。

Page 5: 第 8 章  计数器 / 定时器

微型计算机技术

8.2 8.2 可编程计数器可编程计数器 // 定时器定时器 8253 8.2.1  可编程计数器 / 定时器工作原理 1 、计数功能

设置计数初值,按减 1 或加 1 计数,减到 0 或加到溢出时输出一个信号,标志预置的计数值到。此时输入的计数脉冲的间隔不一定是固定的。

计数功能关心的是计数脉冲的个数,而非脉冲的时间间隔。 2 、定时功能

设定时常数(计数初值),对输入的周期性脉冲进行减 1 或加 1 计数,计数为 0 时输出定时到脉冲,若连续计数便可按定时常数输出时钟周期整数倍的定时间隔信号。

定时功能关心的是计数初值的写入时间与脉冲输出的时间间隔,要求输入的脉冲具有固定的频率。

Page 6: 第 8 章  计数器 / 定时器

微型计算机技术

8.2.28.2.2 定时器 / 计数器 8253 内部结构内部结构 Intel 8253 是具有三个通道的 16 位定时器 / 计数器,可由

软件设定 6 种工作方式。8253 内部有三个独立的计数器通道:计数器 0 、 1 、 2 ,

结构完全相同。每个通道有 6 种工作方式,由控制寄存器选择。控制寄存器为 8 位,计数初值计数器 CR—16 位,计数

执行部件 CE—16 位,计数输出锁存器 OL—16 位。计数执行部件为 16 位的减法计数器,但 16 位寄存器都

可用于 8 位,便于与 8 位数据总线相连。每个通道可对外部输入 CLK 进行二进制或十进制减 1

计数。计数由引脚 GATE 控制。计数器归 0 时由 OUT 引脚输出信号。

Page 7: 第 8 章  计数器 / 定时器

微型计算机技术

82538253 的内部结构的内部结构

D7 ~ D0缓冲器

RDWRA0A1CS

读写控制逻辑

数据

控制寄存器

计数器 0CLK0GATE0OUT0

CLK1GATE1OUT1

CLK2GATE2OUT2

计数器 1

计数器 2

8253 内部结构

Page 8: 第 8 章  计数器 / 定时器

微型计算机技术

8253 内部每个计数器通道的结构图

8 位控制寄存器

高 8 位 低 8 位

高 8 位 低 8 位

高 8 位 低 8 位

计数器 1 计数器 2

计数初值寄存器

(CR)

计数执行部件 (CE)

计数输出锁存器 (OL)

CLK0

GATE0

OUT0

D7~D0

RD

WR

CS

A1A0

计数器 0

Page 9: 第 8 章  计数器 / 定时器

微型计算机技术

8.2.3 8.2.3    82538253 的的引脚功能• 8253 具有 24 个引脚,各引脚功能如下:

D7~D0 数据总线,双向三态,可直接与计算机系统数据总线相连。

RD 读信号,输入,低电平有效,若有效则 CPU从 8253 内部读取数据 .

WR 写信号,输入,低电平有效,若有效则 CPU将数据写入 8253 内部寄存器。

CS 片选信号,输入,低电平有效,与计算机连接时分配有效地址。

A1 A0 内部计数器选择信号。 8253 内部有三个计数通道,使用 4 个端口地址。

Page 10: 第 8 章  计数器 / 定时器

微型计算机技术

8253 引脚功能

CLK0 、 CLK1 、 CLK2 通道 0 、通道 1 和通道 2 的计数时钟输入端,下降沿使通道减 1 。

GATE0 、 GATE1 、 GATE2 门控制,输入,高电平有效或上升沿有效,有效时才允许计数器对输入时钟进行计数。

OUT0 、 OUT1 、 OUT2 通道输出信号,当计数器计数到“ 0”时由此引脚输出一信号。

0 1 0 0 00 1 0 0 10 1 0 1 00 1 0 1 10 0 1 0 00 0 1 0 10 0 1 1 0

功 能对计数器 0设置计数初值

CS RD WR A1 A0

对计数器 1设置计数初值对计数器 2设置计数初值设置控制字从计数器 0读出计数值从计数器 1读出计数值从计数器 2读出计数值

Page 11: 第 8 章  计数器 / 定时器

微型计算机技术

8.2.4 8253 的控制字及工作方式 1. 8253 控制字

控制字必须写入控制口,说明如下:① SC1 SC0 计数器通道选择

0 0 通道 00 1 通道 11 0 通道 21 1 非法

D0

SC1

D7

SC0 BCDRW1 RW0 M2 M1 M0

Page 12: 第 8 章  计数器 / 定时器

微型计算机技术

8253 控制字② RW1 RW0 计数器读写选择 0 0 计数器锁存

0 1 只读写低 8 位1 0 只读写高 8 位1 1 先低 8 位,再高 8 位

③ M2 M1 M0 计数器工作方式选择0 0 0 方式 00 0 1 方式 1x 1 0 方式 2x 1 1 方式 31 0 0 方式 41 0 1 方式 5

④ BCD 计数器计数模式选择 0 二进制计数器

1 BCD码计数器

Page 13: 第 8 章  计数器 / 定时器

微型计算机技术

2. 8253 编程命令• 因各计数器有自己的端口地址,所以没有太多顺序

要求,但必须遵守两条规定:① 设置计数初值前必须先写控制字② 设置计数初值时要与控制字中的 D5 D4 位规定的读写指示一致。

• 命令字共 4 个: 写控制字命令 设置计数初值(时间常数)命令 读出命令,读出当前计数值 锁存命令,配合读出命令,先锁住,再读出。

Page 14: 第 8 章  计数器 / 定时器

微型计算机技术

3. 8253 工作方式 模式 0 — 计数结束产生中断

• 控制字写入后 OUT 即变为低电平,当计数器为 0 时,输出 OUT 变为高电平,并停止现行操作。

• 计数初值写入后在下一个 CLK 下降沿才送入计数器,因此 OUT 要在 CPU 写入计数初值后经 N+1 个 CLK之后才变高。

• 当 GATE 变为低电平时计数停止,再变为高电平时计数继续进行。

• 若计数过程中重新送入初值,则按新值重新计数。

CLK

OUT4 3 2 1 0 FF

方式 0 时序图

CW N=4WR

Page 15: 第 8 章  计数器 / 定时器

微型计算机技术

模式 1 — 可重新触发单稳态触发器• 写入控制字后 OUT 变为高电平, GATE 上升沿后,下一

个 CLK 的下降沿使得 OUT 为低电平并开始计数,回零时OUT 变为高电平。

• GATE 再来一次上升沿后会再次使 OUT 变为低电平,计数器以初值重新计数。

• 再次给通道写入时间常数,不影响现行操作过程, GATE再次触发后才按新的时间常数操作。

方式 1 时序图OUT

3 2 1 0

CLK

CW N=3WR

FFFE3 2

GATE

Page 16: 第 8 章  计数器 / 定时器

微型计算机技术

模式 2 — 分频器• 写入控制字后 OUT 为高电平,输入时间常数后,下一时钟开始计数,

减到 1 时输出变为低电平,经过一个 CLK 输出变为高电平,计数重新开始。

• GATE=1 计数进行, GATE=0 计数停止,且下一个 CLK 下降沿计数器重新赋初值, GATE 变为高电平,计数重新开始。

• 计数期间送入新值, GATE 若维持高电平,本周期继续进行,下一个周期按新值计数操作。

• 在计数计到 1之前,若写入新值,而 GATE又出现上升沿,则在下一个 CLK 下降沿,以新值重新计数。

方式 2 时序图OUT

3 2 1

CLK

CW N=3WR

GATE

3 2 1 3 2 1

Page 17: 第 8 章  计数器 / 定时器

微型计算机技术

模式 3 — 方波发生器• 写入控制字后 OUT 为高电平 , 输入时间常数后,下一时钟开始计数,

计到一半时输出变为低电平,计到终值时变为高电平,并开始下一次计数过程。

• 若 N 为偶数,高低电平持续时间相等;若为奇数,则高电平持续时间为( N+1 ) /2 ,低电平持续时间为( N-1 ) /2 。

• GATE=1 计数进行, GATE=0 计数停止, OUT 立即为高,计数器重新赋初值, GATE 变高,在下一个 CLK 下降沿计数重新开始。

• 计数期间送入新值,本周期继续进行,下一个周期按新值计数。

OUT3 2 1方式 3 时序图

CLK

CW N=4WR

3 2

GATE

4 4 1

Page 18: 第 8 章  计数器 / 定时器

微型计算机技术

模式 4 — 软件触发选通信号发生器 • 计数器主要是靠写入初始值这个软件操作来触发计数器工作的,每次

通过写入新的初始值使计数器重新开始工作。• OUT 平时为高电平,计数到 0 时,输出 OUT 变低,一个时钟周期

后又变高。即只有在计数到 0 时,才输出负脉冲作为选通信号。• GATE=1 允许计数, GATE=0禁止计数, GATE 不影响OUT 电

平输出。• 计数期间送入新的时间常数,则下一个时钟按新值重新计数。

OUT3 2 1方式 4 时序图

CLK

CW N=3WR

GATE

0 FF FEFDFC

Page 19: 第 8 章  计数器 / 定时器

微型计算机技术

模式 5——硬件触发选通信号发生器 • 写入控制字后 OUT 变为高电平,输入时间常数后由

GATE 上升沿启动计数。计数为 0 时输出一个时钟的负脉冲,并停止现行操作。

• 计数过程中,若 GATE又来一个上升沿,则下一个时钟计数器重新赋值计数。

• 计数过程中写入时间常数,当前周期不受影响,只有下一个 GATE 上升沿才启动新值计数。

OUT3 2 1 0方式 5 时序图

CLK

CW N=3WR

FF FE 3 2

GATE

1 0

Page 20: 第 8 章  计数器 / 定时器

微型计算机技术

8.2.5 8253 编程编程举例• 使用 8253 时,必须首先进行初始化编程,其步骤为:

先向控制口写入控制字;再向每个通道端口地址写入计数初值:若规定只写

低 8 位,则高 8 位自动置 0;若规定只写高 8 位,则低 8 位自动置 0;若规定写 16 位,则先写低 8位,再写高 8 位。

• 最大计数初值 0 :二进制: 216 =65536BCD码: 104 =10000

Page 21: 第 8 章  计数器 / 定时器

微型计算机技术

例 1 : 8253 计数器工作于模式 3 ,计数器初值 15 ,时钟脉冲频率为 2MHz ,确定 OUT 端输出方波的特性。解: TCLK=1/2 s =500ns

计数器初值 15 为奇数,输出分频波高电平宽度: TCLK(N+1)/2=4s

输出分频波低电平宽度: TCLK(N-1)/2=3.5s

Page 22: 第 8 章  计数器 / 定时器

微型计算机技术

例 2 :设 8253 的口地址为 40H ~ 43H ,如要求 8253 的通道1 工作于方式 3 ,按 BCD码计数,计数值为十进制 6000;通道 2 工作于方式 2 ,按二进制计数,计数初值为 390 ,试编程初始化 8253 。MOV AL , 67H ;控制字 01,10,011,1 通道 1 ,只装高 8 位,方式 1 ,BCD码

OUT 43H, AL ;送通道 1 控制字MOV AL , 60H ;计数初值为 6000 ,只装高 8 位,低 8 位自动赋 0

OUT 41H, AL MOV AL , 0B4H; 10 , 11 , 010 , 0 通道 2 , 16 位,方式 2 ,

二进制OUT 43H, AL;送通道 2 控制字MOV AX, 390;OUT 42H, AL;先写计数初值低 8 位MOV AL , AH;OUT 42H, AL;后写计数初值高 8 位

Page 23: 第 8 章  计数器 / 定时器

微型计算机技术

8253 的读操作方法及编程举例

• 为了对计数器的计数值进行显示或实时处理,常需要读取计数通道的当前计数值,它是由 CPU访问每个通道的计数值锁存器 OL 实现的。读当前计数值的端口地址和写入计数初值的端口地址是相同的。读操作必须严格按控制字 D5 D4 位确定的格式进行:如果是 8 位计数,则 只 需 读一次;若是 16 位计数,则同一端口地址要读两次,第一次读入低 8 位计数值,第二次读入高 8 位计数值。

• 8253 有以下两种读当前计数值的方法

Page 24: 第 8 章  计数器 / 定时器

微型计算机技术

①读之前先停止计数:可以在读之前用 GATE 信号控制计数器暂停计数,或由外部逻辑禁止所要读入的计数通道的 CLK 脉冲输入。如果不先停止计数,那么,分先后两次读入的高低字节的值可能不属于同一个 16 位计数值,所以最好先从外部禁止计数,然后执行类似如下程序读入(设 8253 的端口地址为 E0H ~ E3H ):

IN AL , 0E0H;读入通道 0 的低 8 位 MOV BL , AL IN AL , 0E0H ;读入通道 0 的高 8 位

MOV BH, AL ;读入的 16 位计数值存入 BX中。

Page 25: 第 8 章  计数器 / 定时器

微型计算机技术

②读之前先送计数值锁存命令:计数值锁存命令是控制字的一种特殊形式,需写入控制寄存器的端口地址。锁存命令的 D7 D6 位的编码决定所要锁存的计数通道,锁存命令的 D5 D4 必须为“ 00” (锁存命令标志)。锁存命令的低 4 位可以是全“ 0” 。因此,三个计数器的锁存命令分别为:通道 0 是 00H,通道 1 是40H,通道 2 是 80H。

例如,要读取通道 2 的计数值,程序如下: MOV AL , 80H; 10 00 0000B 向通道 2 发锁存命令 OUT 0E3H, AL;锁存命令写入控制寄存器(锁住通道 2 的计数值)

IN AL , 0E2H;读通道 2 的 OL 的低 8 位 MOV BL , AL IN AL , 0E2H;读通道 2 的 OL 的高 8 位

MOV BH, AL

Page 26: 第 8 章  计数器 / 定时器

微型计算机技术

8.2.6 IBM PC/XTIBM PC/XT 中的中的 82538253 应用举例

D7~D0

D7~D0

RDWRA1A0

CS

IORIOW

A13

A15A14

A10

A12A11

74LS30

74LS04A9

+5V

A8A7A6A5

+5V

CBA

74LS138

Y2G2AG2B

G1

8253

A1A0

GATE0GATE1GATE2

OUT0OUT1OUT2CLK0CLK1CLK2

PB1 ( 8255 )

+5V

PB0 ( 8255 )IRQ0 ( 8259 )刷新电路

CPCLK

DQQ

74LS175

驱动器

8253 的接口电路

Page 27: 第 8 章  计数器 / 定时器

微型计算机技术

8253 与 8088 计算机连接说明

A15 ~ A8

0 ~ 0

端口

0 00 11 01 1控制口

A7 A6 A5 A4 A3 A2A1 地址

040H

A0

0 1 0 X X X

通道 0通道 1通道 2

041H042H043H

8253 三个通道的时钟由 PCLK经D触发器二分频得到,频率为: 2.38636/2=1.1931816MHz

8253 数据线 D7~D0 接系统数据总线的低 8 位。 8253 的 A1 和 A0 分别接系统的 A1 和 A0 由 74LS138 , 74LS30 和 74LS04译码选中 8253

Page 28: 第 8 章  计数器 / 定时器

微型计算机技术

通道 0 定时 OUT0 接 8259A 的 IR0 ,通道 1刷新动态存储器,通道 2 控制扬声器发声。

通道 0 :为系统电子钟提供基准时间和软驱马达定时。计数器0 为模式 3 (方波发生器) GATE0 固定高电平, OUT0 作为中断请求接 8259A 中断控制器的 IRQ0 , OUT0 输出时钟频率为 1.19MHz/216 =18.2Hz,即每秒产生 18.2 次输出信号,输出一个定时脉冲,产生一个中断请求(周期约 55ms),计时软件据此计时。控制字为 36H。

通道 1 :作为 DRAM刷新的定时信号。工作于模式 2 ,计数值为 12H=18 ( 1.19MHZ/18 分频 ),每隔 15.12μS产生一次刷新请求,此信号送到 DMA 8237A-5 的通道 0 ,作为 DMA请求信号。由 8237A-5 执行 DMA 操作完成 DRAM一行的刷新。

通道 2 :输出信号接扬声器,工作于模式 3 (方波发生器),初值为 533H,方波频率为 1.19MHz/1331=894Hz

Page 29: 第 8 章  计数器 / 定时器

微型计算机技术

BIOS 对 8253 的初始化程序

通道 0 :MOV AL , 36H ;控制字: 00110110— 通道 0 , 16 位,方式 3 ,

二进制OUT 43H, AL ;写入控制寄存器MOV AL , 0;初值为 0000H,计数 65536 次(最大)OUT 40H, AL;写入 CR0 的低 8 位计数值OUT 40H, AL;写入 CR0 的高 8 位计数值 ① 计数器 0 工作于方波发生器方式,对 CLK ( 1.1931816MHz)进行 65

536 分频。时钟周期 Tc=1/1.19×103 ≈840ns② 计数器 0 的输出端 OUT0 接 8259的 IR0 ,每次归 0产生一次中断请求,

中断类型码由 BIOS 设置为 8 。③ OUT0 端输出周期为 T0=840ns×65536≈55ms,即每隔 55ms定时时

间发出一次中断请求。通道 0 的时间间隔是计算机系统时钟基础。④ OUT0 端输出方波频率 f0=1/T0 ≈ 18.2 ,即每秒钟来 18.2 次中断。

Page 30: 第 8 章  计数器 / 定时器

微型计算机技术

通道 1 :MOV AL , 54H ;控制字 01010100 通道 1 ,低 8 位,方式 2 ,二

进制

OUT 43H, AL ;写入控制寄存器

MOV AL , 12H ;初值为 18OUT 41H, AL ;写入计数值低 8 位,高 8 位自动为 0 ,① 通道 1 给 DMA 控制器提供时钟,用于定时(约 15μs)

向 DMA请求 DRAM刷新,计数初值为 12H。② OUT1 输出周期为: T1=840ns×18≈15.12μs,于是,

2ms内可有 132 次刷新,大于 IBM-PC/XT 要求的 DRAM刷新在 2ms内应有 128 次的规定。

③ OUT1 输出频率为 f1=1/T1=66.1KHz的连续负脉冲。

Page 31: 第 8 章  计数器 / 定时器

微型计算机技术

通道 2 :MOV AL , 0B6H ;控制字 10110110 通道 2 , 16 位,方式 3 ,二进制计

数OUT 43H, AL ;写入控制寄存器MOV AX, 533H ;初值为 533HOUT 42H, AL ;写入计数值低 8 位MOV AL , AH ;OUT 42H, AL ;写入计数值高 8 位。IN AL , 62H ;读入 8255 的 B 口数据MOV AH, AL ;保护B 口原值OR AL , 03H ;置 1 PB1 和 PB0OUT 62H, AL ;输出

① 通道 2 :控制字为 B6H,计数初值为 533H=1331 。② OUT2 输出方波周期 T2= 840ns×1331≈1.12ms,频率 f2=1/T2=

894Hz, 894Hz的方波送至扬声器,驱动扬声器发声。③ 扬声器发声还受 8255 的 PB0 和 PB1 控制。

Page 32: 第 8 章  计数器 / 定时器

微型计算机技术

82538253 应用举例例:由 8253 的计数器 0 定时 55ms 控制扬声器变调

发声,响 5.5秒后停止。※ 说明① 8253 计数器 0 的 OUT0 接 8259A 的 IR0 ,

由 BIOS 初始化,中断类型码为 08H ,并在完全嵌套方式下工作。

② 8253 计数器 0 由 BIOS 设置为模式 3 ,定时时间为 55ms 。

③ 扬声器由 8253 的计数器 2 控制发声频率,发声允许由 8255 的 PB0 和 PB1 控制。

Page 33: 第 8 章  计数器 / 定时器

微型计算机技术

④ DOS 功能调用 25H号子功能为设置中断向量。 入口参数

AH=25H, AL=中断类型码DS:DX 中断服务程序入口地址

返回参数:无⑤ DOS 功能调用 35H号子功能为取中断向量

入口参数AH=35H, AL=中断类型码

返回参数ES:BX 中断服务程序入口地址

⑥ 中断服务程序为 INT_08H 保护现场和恢复现场; 中断返回前要开中断并发 EOI; 中断返回 IRET 。

⑦ 每次定时器 0 中断使扬声器的发声频率的分频常数增加 100 ,并使计数变量 count增 1 。

⑧ 主程序查询 count 到 100 后停止扬声器发声,恢复中断向量,程序退出。

Page 34: 第 8 章  计数器 / 定时器

微型计算机技术

8253 应用程序data segment

old_int08h dd ?

count dw 0

constant dw 60

state db ?

data ends

st_seg segment stack

db 256 dup (?)

st_seg ends

code segment

assume cs:code,ds:data

Int_08h proc far ; 中断服务子程序 push ax push ds

mov ax, data

mov ds, ax

mov al, 0b6h

out 43h, al

mov ax, constant

add ax, 100

mov constant, ax

out 42h, al

mov al, ah

out 42h, al

inc countmov al, 20h ; 发 EOIout 20h, al

Page 35: 第 8 章  计数器 / 定时器

微型计算机技术

pop dspop axsti iret

Int_08h endp;主程序main proc far mov ax, data

mov ds, ax cli ; 关中断 mov ah, 35h ; 取中断向量 mov al, 08h int 21h mov word ptr old_int08h, b

xmov word ptr old_int08h[2],

es

push cs ; 设置新中断向量 pop ds

mov ah, 25h

mov dx, offset int_08h

mov al, 08h

int 21h

mov ax, data mov ds, ax

; 打开 8255 控制in al, 61h

mov state, al or al, 3

out 61h, al

sti ;开中断

Page 36: 第 8 章  计数器 / 定时器

微型计算机技术

; 判断 5.5S 是否到main1: mov ax, count cmp ax, 100

jc main1 mov al, state ;恢复 8255状态 out 61h, al mov ah, 25h ;恢复原中断向量 lds dx, old_int08h mov al, 08h int 21h mov ax, 4c00h ;返回操作系统 int 21h

main endpcode ends end main