8.4 8253 可编程定时计数器

48
8.4 8253 8.4 8253 可可可可可可可可 可可可可可可可可

description

8.4 8253 可编程定时计数器. 概述. 实现定时和计数有两种方法:硬件定时和软件定时。 软件定时是利用 CPU 每执行一条指令都需要几个固定的指令周期的原理,运用软件编程的方式进行定时。 硬件定时,是利用专门的定时电路实现精确定时。这种定时方式又可分为简单硬件定时和利用可编程接口芯片实现定时。. CLK. 0. D. -D. GATE. 7. 0. 0. OUT. 0. RD. WR. CLK. 1. A. 0. GATE. A. 1. 1. OUT. 1. CLK. 2. GATE. 2. OUT. 2. - PowerPoint PPT Presentation

Transcript of 8.4 8253 可编程定时计数器

Page 1: 8.4  8253 可编程定时计数器

8.4 82538.4 8253 可编程定时计数器可编程定时计数器

Page 2: 8.4  8253 可编程定时计数器

概述概述

实现定时和计数有两种方法:硬件定时和软实现定时和计数有两种方法:硬件定时和软件定时。件定时。

软件定时是利用软件定时是利用 CPUCPU 每执行一条指令都需每执行一条指令都需要几个固定的指令周期的原理,运用软件编要几个固定的指令周期的原理,运用软件编程的方式进行定时。程的方式进行定时。

硬件定时,是利用专门的定时电路实现精确硬件定时,是利用专门的定时电路实现精确定时。这种定时方式又可分为简单硬件定时定时。这种定时方式又可分为简单硬件定时和利用可编程接口芯片实现定时。 和利用可编程接口芯片实现定时。

Page 3: 8.4  8253 可编程定时计数器

1. 82531. 8253 的组成与功能的组成与功能

82538253 内部结构框图内部结构框图

8D7 -D0计数器0 号

控制字寄存器

计数器1 号

计数器2 号

内部数据总线

数据总线缓冲器

读 / 写逻辑A0

A1

RDWR

CS

CLK0

GATE 0

OUT0

CLK1

GATE 1

OUT1

CLK2

GATE 2

OUT2

Page 4: 8.4  8253 可编程定时计数器

结构特点 结构特点 减法计数器减法计数器

计数器计数器

控制寄存器控制寄存器

控制逻辑控制逻辑

16位初值寄存器

16位计数寄存器 存放控制命令字

Page 5: 8.4  8253 可编程定时计数器

8253的引脚配置

D0

D1

D2

D3

D4

D5

D6

D7

RDWR

A0

A1

CSVcc

地电源线

控制线

数据线

CLK0

GATE0

OUT0

CLK1

GATE1

OUT1

CLK2

GATE2

OUT2

计数器0 号

计数器1 号

计数器2 号

91110

151413

181617

876543212223192212412

Page 6: 8.4  8253 可编程定时计数器

连接系统端的主要引线:连接系统端的主要引线:

D0----D7D0----D7

CSCS

RDRD

WRWR

A0A0 ,, A1A1

A1 A0

0 0 CNT0

0 1 CNT1

1 0 CNT2

1 1 控制寄存器

Page 7: 8.4  8253 可编程定时计数器

连接外设端的主要引线:连接外设端的主要引线:

CLK ----------- CLK ----------- 时钟脉冲输入时钟脉冲输入GATE ---------- GATE ---------- 门控信号输入门控信号输入OUT ------------ OUT ------------ 定时输出 定时输出

Page 8: 8.4  8253 可编程定时计数器

8253 计数器内部逻辑

三个独立的三个独立的 1616 位计数器 位计数器 控制字寄存器 控制字寄存器 读读 // 写逻辑 写逻辑

Page 9: 8.4  8253 可编程定时计数器

由控制字格式中由控制字格式中 SCSC11 ,, SCSC

00

位决定属于哪个计数器位决定属于哪个计数器选中控制寄存器选中控制寄存器1100111100

读输出锁存器读输出锁存器 OLOL当前值当前值0011

对计数器寄存器对计数器寄存器 CRCR送初值送初值选中计数器选中计数器 22##

1100001100

读输出锁存器读输出锁存器 OLOL当前值当前值0011

对计数器寄存器对计数器寄存器 CRCR送初值送初值选中计数器选中计数器 11##

1100110000

读输出锁存器读输出锁存器 OLOL当前值当前值0011

对计数器寄存器对计数器寄存器 CRCR送初值送初值选中计数器选中计数器 00##

1100000000

功 能 功 能AA00AA11CSCS WRWR RDRD

82538253 端口地址及操作功能 端口地址及操作功能

Page 10: 8.4  8253 可编程定时计数器

2. 82532. 8253 的控制字、写的控制字、写 //读操作及初始化编程读操作及初始化编程82538253的控制字格式的控制字格式

D7 D6 D5 D4 D3 D2 D1 D0

0=二进制1=二—十进制

工作方式选择000=方式0

001=方式1

010=方式2

011=方式3

100=方式4

101=方式5

通道控制字寻址00=通道 0 控制寄存器01=通道 1 控制寄存器10=通道 2 控制寄存器11=不用

读写操作00=锁定当前计数值01=读/写计数器低8 位10=读写计数器高8 位11=先读/写计数器低 8 位再 读/写计数器高8 位

Page 11: 8.4  8253 可编程定时计数器

82538253 的写的写 // 读操作及初始化编程读操作及初始化编程 --82538253 的写操作的写操作 • 写入计数器的控制字,规定其工作方式及相应功能;写入计数器的控制字,规定其工作方式及相应功能;• 写入计数初值。写入计数初值。例如,选择例如,选择 0#0# 计数器,工作于方式计数器,工作于方式 33 ,计数初值为,计数初值为 1234H1234H ,, BCDBCD 计数方式;计数方式; 2#2# 计数器,计数器,

工作方式工作方式 22 ,计数初值为,计数初值为 61H61H ,采用二进制计数方式,设,采用二进制计数方式,设 82538253 的端口地址为的端口地址为 40~43H40~43H 。。其初始化编程如下:其初始化编程如下:

MOVMOV ALAL ,, 00110111B00110111B ;对;对 0#0# 计数器送工作方式字计数器送工作方式字OUTOUT 43H43H ,, ALAL

MOVMOV AXAX ,, 1234H1234H ;送计数初值;送计数初值OUTOUT 40H40H ,, ALAL ;先送低;先送低 88 位位MOVMOV ALAL ,, AHAH ;再送高;再送高 88 位位OUTOUT 40H, AL40H, AL

MOVMOV ALAL ,, 10010100B10010100B ;对;对 2#2# 计数器送工作方式字计数器送工作方式字OUTOUT 42H42H ,, ALAL

MOVMOV ALAL ,, 61H61H ;送计数初值;送计数初值OUTOUT 42H42H ,, AL AL

Page 12: 8.4  8253 可编程定时计数器

82538253 的写的写 // 读操作及初始化编程读操作及初始化编程 --82538253 的读操作的读操作 • 直接读操作 直接读操作 • 锁存后读计数值 锁存后读计数值 例如,要求读出并检查例如,要求读出并检查 2#2# 计数器的计数值是否为“计数器的计数值是否为“ 55AAH”55AAH” 若非“若非“ 55AAH”55AAH” 则等待再读,则等待再读,

当为“当为“ 55AAH”55AAH” 后程序可继续执行,则程序片断如下:后程序可继续执行,则程序片断如下:COUNT COUNT EQV 040HEQV 040H ;设;设 0#0# 计数器的符号地址为计数器的符号地址为 040H040H

┆ ┆LPCNLPCN :: MOVMOV ALAL ,, 10000100B10000100B ;对;对 2#2# 计数器送锁存命令,仅使计数器送锁存命令,仅使 RL1RL1 ,, RLRL

0=000=00

OUTOUT COUNT+3COUNT+3 ,, ALAL

ININ ALAL ,, COUNT+2COUNT+2 ;读;读 2#2# 计数器当前计数值计数器当前计数值 MOVMOV AHAH ,, ALAL ;低;低 88 位暂存位暂存 AHAH 中中 IN IN ALAL ,, COUNT+2COUNT+2 ;读高;读高 88 位位 XCHG XCHG AHAH ,, ALAL ;; 1616 位计数值存位计数值存 AXAX 中中 CMPCMP AXAX ,, 55AAH55AAH ;计数值写;计数值写 55AAH55AAH 相比较相比较 JNEJNE LPCNLPCN ;若不相等则继续等待;若不相等则继续等待

Page 13: 8.4  8253 可编程定时计数器

计数启动方式计数启动方式

软件启动软件启动

硬件启动硬件启动

GATE端为高电平

置入计数初值后的第 2个CLK脉冲的下降沿

GATE端有一个上升沿

对应 CLK脉冲的下降沿

Page 14: 8.4  8253 可编程定时计数器

3. 82533. 8253 的工作方式和时序的工作方式和时序 方式方式 0——0——计数结束产生中断方式计数结束产生中断方式

82538253 方式方式 00 的波形 的波形

(设计数初值为 3 )

写计数值写CW

CLK

GATE(允许计数高电平)

OUT 0123

2 223 1OUT 0

WR

GATE

Page 15: 8.4  8253 可编程定时计数器

软件启动,不自动重复计数。装入初值后输出端变低电平,计数结束输出高电平

Page 16: 8.4  8253 可编程定时计数器

例:设例:设 82538253 计数器通道计数器通道 00 工作于方式工作于方式 00 ,用,用 88位二进制计数,其计数值为位二进制计数,其计数值为 5050 ,二—十进制,,二—十进制,则它的初始化程序段如下:则它的初始化程序段如下:

MOVMOV ALAL ,, 11H 11H ;设置控制字;设置控制字

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

MOV MOV ALAL ,, 50 50 ;设置计数初值;设置计数初值

OUT OUT 40H40H ,, AL AL ;写入计数初值寄存器;写入计数初值寄存器

Page 17: 8.4  8253 可编程定时计数器

3. 82533. 8253 的工作方式和时序的工作方式和时序 方式方式 1——1——外触发的单稳脉冲方式外触发的单稳脉冲方式

方式方式 11 的波形的波形

CLK

WR

GATE

OUT

GATE

OUT

开始计数

3 2 1 3 2 1 0

3 2 1 0

重新开始计数不停计数

CW LSB

Page 18: 8.4  8253 可编程定时计数器

硬件启动,不自动重复计数装入初值后输出端变高电平,计数开始输出低电平,结束后又变高

Page 19: 8.4  8253 可编程定时计数器

例:设计数器通道例:设计数器通道 11 工作于方式工作于方式 11 ,按二进制,按二进制计数,计数初值为计数,计数初值为 40H40H ,它的初始化程序段为:,它的初始化程序段为:

MOVMOV ALAL ,, 62H 62H ;工作方式控制字;工作方式控制字

OUT OUT 43H43H ,, ALAL

MOVMOV ALAL ,, 40H40H ;送计数初值;送计数初值

OUT OUT 41H41H ,, ALAL

Page 20: 8.4  8253 可编程定时计数器

3. 82533. 8253 的工作方式和时序的工作方式和时序 方式方式 2——2——计数分频工作方式计数分频工作方式

方式方式 22 的工作波形的工作波形

3 2 1

3

高电平1

CW LSB

自动重复计数3 2 1

禁止计数

3 2 1

重新开始计数

CLK

GATE

OUT

GATE

OUT

WR

Page 21: 8.4  8253 可编程定时计数器

软、硬件启动,自动重复计数。装入初值后输出端变高电平,计数到最后一个脉冲时输出低电平

Page 22: 8.4  8253 可编程定时计数器

例:设例:设 82538253 计数器计数器 00 工作于方式工作于方式 22 ,按二进制计,按二进制计数,计数初值为数,计数初值为 0304H0304H 。。

MOVMOV ALAL ,, 00110100B00110100B ;设控制字,通道;设控制字,通道 00 ,,先读先读 // 写高写高 88 位位 ;再读写低;再读写低 88 位,方式位,方式 22 ,,二进制。二进制。

OUTOUT 43H43H ,, ALAL

MOV MOV ALAL ,, 04H 04H ;送计数值低字节;送计数值低字节

OUT OUT 40H40H ,, AL AL

MOV MOV ALAL ,, 03H03H

OUT OUT 40H40H ,, AL AL ;送计数值高字节;送计数值高字节

Page 23: 8.4  8253 可编程定时计数器

3. 82533. 8253 的工作方式和时序的工作方式和时序 方式方式 3——3——方波发生器工作方式方波发生器工作方式

方式方式 33 的工作波形的工作波形

CLK

WR

GATE

OUT(N=奇数)

OUT(N=偶数)

高电平1

5 4 3

自动重复计数

2 1 5 4 3

CW LSB

4 3 2 1 4 3 2 1

Page 24: 8.4  8253 可编程定时计数器

软、硬件启动,自动重复计数装入初值后输出端变高电平,输出对称方波

Page 25: 8.4  8253 可编程定时计数器

例:设例:设 82538253 计数器计数器 22 工作在方式工作在方式 33 ,按二—十进,按二—十进制计数,计数初值为制计数,计数初值为 44 ,则它的初始化程序段如下:,则它的初始化程序段如下:

MOV ALMOV AL ,, 10010111B10010111B ;计数器;计数器 22 ,只读,只读 //写低写低 88 位,工作方式位,工作方式 33 ,二,二 ~~ 十进制十进制

OUT 43HOUT 43H ,, ALAL ;控制字送控制字寄存器;控制字送控制字寄存器

MOV ALMOV AL ,, 44 ;送计数初值;送计数初值

OUT 42HOUT 42H ,, ALAL

Page 26: 8.4  8253 可编程定时计数器

3. 82533. 8253 的工作方式和时序的工作方式和时序 方式方式 4——4——软件触发选通方式软件触发选通方式

方式方式 44 的工作波形的工作波形

高电平 1

CW LSB

3 2 1 0 CLK 1

禁止计数

3 2 1 3 2 1 0

重新开始计数

CLK

GATE

OUT

GATE

OUT

WR

Page 27: 8.4  8253 可编程定时计数器

软件启动,不自动重复计数。装入初值后输出端变高电平,计数结束输出一个 CLK宽度的低电平

Page 28: 8.4  8253 可编程定时计数器

例:设例:设 82538253 计数器计数器 11 工作于方式工作于方式 44 ,按二进,按二进制计数,计数初值为制计数,计数初值为 33 ,则初始化程序段为:,则初始化程序段为:

MOVMOV ALAL ,, 058H058H;设置控制字寄存器;设置控制字寄存器

OUTOUT 43H43H ,, ALAL ;送控制字;送控制字

MOVMOV ALAL ,, 33 ;置计数初值;置计数初值

OUTOUT 41H41H ,, ALAL ;送计数初值;送计数初值

Page 29: 8.4  8253 可编程定时计数器

3. 82533. 8253 的工作方式和时序的工作方式和时序 方式方式 5——5——硬件触发选通方式硬件触发选通方式

方式方式 55 的工作波形 的工作波形

CLK

GATE

OUT

GATE

OUT

WR

3 2 1 3 2 1 0

重新开始计数

CW LSB

3 2 1 0 1

开始计数

不停计数

Page 30: 8.4  8253 可编程定时计数器

硬件启动,不自动重复计数

波形与方式 4相同

Page 31: 8.4  8253 可编程定时计数器

例:设例:设 82538253 的通道的通道 11 工作于方式工作于方式 55 ,按二进制计,按二进制计数,计数初值为数,计数初值为 4000H4000H ,则它的初始化程序段为:,则它的初始化程序段为:

MOV ALMOV AL ,, 01101010B01101010B ;通道;通道 11 ,只读写,只读写高字节,方式高字节,方式 55 ,二进制计数。,二进制计数。

OUT 43HOUT 43H ,, ALAL

MOV ALMOV AL ,, 40H40H

OUT 41HOUT 41H ,, AL AL ;送计数初值;送计数初值

Page 32: 8.4  8253 可编程定时计数器

—开始计数5

允许计数—禁止计数4

允许计数开始计数( 1)禁止计数( 2)输出立即为高电平3

允许计数开始计数( 1)禁止计数( 2)输出立即为高电平2

—( 1)开始计数( 2)下一个时钟后,输出为低电平

—1

允许计数—禁止计数0

高电平上升沿低电平或高电平变为低电平

GATE信号状态及影响工作方式

Page 33: 8.4  8253 可编程定时计数器

4. 4. 82548254与与 82538253的区别的区别 允许计数脉冲(允许计数脉冲( CLKCLK )频率范围不同 )频率范围不同 内部结构有所不同内部结构有所不同 82548254 提供了同时锁存三个计数器的当前计数提供了同时锁存三个计数器的当前计数

值和状态信息的操作值和状态信息的操作

Page 34: 8.4  8253 可编程定时计数器

5. 82535. 8253 的应用的应用

与系统的连接与系统的连接

芯片初始化芯片初始化

置计数初值置计数初值编程

Page 35: 8.4  8253 可编程定时计数器

与系统的连接示意与系统的连接示意

CLK

GATE

OUT

D0~D7

WR

RD

A1

A0

CS

DB

IOW

IOR

A1

A0

译码器

高位地址

外设

8253

Page 36: 8.4  8253 可编程定时计数器

初始化程序流程初始化程序流程

写控制字

写计数值低 8位

写计数值高 8位

写入顺序:

可以计数器为单位,也可先写所有计数器控制字,再写入初值

Page 37: 8.4  8253 可编程定时计数器

82538253 应用例应用例

采用采用 82538253 作定时作定时 // 计数器,其接口地址为计数器,其接口地址为 012012

0H~0123H0H~0123H 。。要求计数器要求计数器 00 每每 10ms10ms 输出一个输出一个 CLKCLK 脉冲宽的脉冲宽的负脉冲;用计数器负脉冲;用计数器 11 产生产生 10KHz10KHz 的连续方波的连续方波信号,计数器信号,计数器 22 在定时在定时 5ms5ms 后产生输出高电平。后产生输出高电平。输入输入 82538253 的时钟频率为的时钟频率为 2MH2MH 。。画线路连接图,并编写初始化程序。 画线路连接图,并编写初始化程序。

Page 38: 8.4  8253 可编程定时计数器

82538253 应用例应用例

计算计数初值:计算计数初值: CNT0CNT0 :: 10ms/0.5us=2000010ms/0.5us=20000

CNT1CNT1 :: 2 MHz/10KHz=2002 MHz/10KHz=200

CNT2CNT2 : : 5ms/0.5us=100005ms/0.5us=10000

确定控制字:确定控制字: CNT0CNT0 :方式:方式 22 ,, 1616 位计数值位计数值 CNT1CNT1 :方式:方式 33 ,低,低 88 位计数值位计数值 CNT2CNT2 :方式:方式 00 , , 1616 位计数值位计数值

Page 39: 8.4  8253 可编程定时计数器

82538253 应用例应用例

CLK0

GATE0

OUT1

D0~D7

WR

RD

A1

A0

CS

DB

IOW

IOR

A1

A0

译码器

8253

CLK2

GATE1

GATE2

+5V

CLK1

2MHz

OUT0

OUT2

Page 40: 8.4  8253 可编程定时计数器

82538253 应用例 应用例 初始化程序初始化程序

CNT0CNT0 ::MOV DXMOV DX ,, 0123H0123H

MOV ALMOV AL ,, 34H34H

OUT DXOUT DX ,, ALAL

MOV DXMOV DX ,, 0120H0120H

MOV AXMOV AX ,, 2000020000

OUT DXOUT DX ,, ALAL

MOV AL, AH

OUT DX, AL

CNT1: ……

CNT2: ……

Page 41: 8.4  8253 可编程定时计数器

在在 IMB PC/XTIMB PC/XT 机中采用机中采用 8088CPU8088CPU ,系统板上使用,系统板上使用了一片了一片 82538253 计数计数 // 定时器。定时器。 82538253 的片选信号是由系的片选信号是由系统板上统板上 I/OI/O 译码电路译码电路 LS74138LS74138 中产生,与片内地址线中产生,与片内地址线AA11 ,, AA00 相配合。相配合。 82538253 四个端口的地址范围为四个端口的地址范围为 040H~040H~

05FH05FH 。编程时采用。编程时采用 40H~43H40H~43H 作为四个端口(作为四个端口( 00## 、、 11## 、、22## 计数器及控制寄存器)的地址。其中计数器及控制寄存器)的地址。其中 11## 计数器(计数器( CCNTNT

11 )用于)用于 DRAMDRAM 的定时刷新之用,不能再作它用。的定时刷新之用,不能再作它用。00## 计数器用于为系统的电子钟提供时间基准,它的输计数器用于为系统的电子钟提供时间基准,它的输出端作为中断源,接至出端作为中断源,接至 82598259 的的 IRIR

00 中断申请端。中断申请端。 22##

计数器(计数器( CNTCNT22 )主要用来作为机内扬声器的音频信)主要用来作为机内扬声器的音频信

号源,可输出不同频率的方波信号。三个计数器的输号源,可输出不同频率的方波信号。三个计数器的输入时钟脉冲频率均为入时钟脉冲频率均为 1.19MHz1.19MHz 。下面介绍三个计数器。下面介绍三个计数器与系统的关系及其初始化程序。与系统的关系及其初始化程序。

Page 42: 8.4  8253 可编程定时计数器

11 .. 00## 计数器(计数器( CNTCNT00 ) 用作系统时钟,端口地址) 用作系统时钟,端口地址 40H40H

GATEGATE00 端接端接 +5V+5V ,处于常启状态。该计数器向系统日时钟提供定时中断。计数,处于常启状态。该计数器向系统日时钟提供定时中断。计数

初值预置为初值预置为 00 ,以方式,以方式 33 工作。这样一来,工作。这样一来, OUTOUT00 以以 1.1931815MHz/65536=18.2H1.1931815MHz/65536=18.2H

zz 的频率输出一方波序列。它直接连到系统的中断控制器的频率输出一方波序列。它直接连到系统的中断控制器 8259A8259A 的中断请求端的中断请求端 IRIRQQ00 。换言之,。换言之, 00级中断每次间隔级中断每次间隔 55ms55ms或每秒中断或每秒中断 18.218.2次,此中断请求用于维护次,此中断请求用于维护系统的日历时钟。系统的日历时钟。

系统上电时,系统上电时, BIOSBIOS 中对中对 00## 计数器产生计数器产生 55ms55ms 方波定时中断的初始化程序如下:方波定时中断的初始化程序如下:

MOV ALMOV AL ,, 00110110B00110110B ;选;选 00## 计数器,方式计数器,方式 33 ,写高低字节二进制计数,写高低字节二进制计数

OUT 43HOUT 43H ,, ALAL

MOV ALMOV AL ,, 00 ;预置计数初值;预置计数初值 =65536=65536

OUT 40HOUT 40H ,, ALAL ;写低字节;写低字节

OUT 40HOUT 40H ,, ALAL ;写高字节;写高字节

Page 43: 8.4  8253 可编程定时计数器

22 .. 1#1# 计数器计数器

用于对动态用于对动态 RAMRAM 的刷新控制,端口地址为的刷新控制,端口地址为 41H41H 。。

GATEGATE11 端始终接端始终接 +5V+5V ,处于常启状态。该计数器向,处于常启状态。该计数器向 DMADMA 控制器定时提出动态控制器定时提出动态

存储器刷新请求。它选用方式存储器刷新请求。它选用方式 22 工作。计数初值预置为工作。计数初值预置为 1818 。这样,。这样, OUTOUT11 以(以( 1.1.

1931816MHz/18=66.2878kHz1931816MHz/18=66.2878kHz )的频率输出一负脉冲序列,即)的频率输出一负脉冲序列,即 OUTOUT11 每隔每隔 15.085715.0857

μsμs 向向 DMADMA 提出一次提出一次 DMADMA 请求请求 DRQDRQ00 ,由,由 DMADMA 的通道的通道 00 完成存储器一行的刷完成存储器一行的刷

新。系统上电时,新。系统上电时, BIOSBIOS 对对 11## 计数器产生计数器产生 1515μμs DMAs DMA 请求信号的初始化程序为:请求信号的初始化程序为:

MOV ALMOV AL ,, 01010100B01010100B ;选;选 11## 计数器,方式计数器,方式 22 ,写低字节,二进,写低字节,二进制制

OUT 43HOUT 43H ,, ALAL ;写控制字;写控制字

MOV ALMOV AL ,, 1818 ;预置计数初值;预置计数初值 =18=12H=18=12H

OUT 41HOUT 41H ,, ALAL ;写低字节;写低字节

Page 44: 8.4  8253 可编程定时计数器

33 .. 2#2# 计数器计数器

22## 计数器端口地址为计数器端口地址为 42H42H ,该计数器用于控制发声。其输出,该计数器用于控制发声。其输出 OUTOUT22 通过与门和与通过与门和与

非驱动器连接到扬声器。扬声器主要用于提示诊断机器错误和用户操作失误。但非驱动器连接到扬声器。扬声器主要用于提示诊断机器错误和用户操作失误。但由于由于 82538253 的可编程性以及发声的可控制性,利用这些特性可以编程控制的可编程性以及发声的可控制性,利用这些特性可以编程控制 PCPC 扬声扬声器唱出美妙的音乐。器唱出美妙的音乐。

发声系统受发声系统受 8255A8255A 的端口的端口 BB 的的 PBPB11 和和 PBPB

00 控制,控制, PBPB00 控制控制 22## 计数器计数器 GATEGATE 端,端,

高电平允许减高电平允许减 11 计数工作,计数工作, PBPB11 与与 OUTOUT

22 共同接到与门的输入端,与门输出接到共同接到与门的输入端,与门输出接到与非驱动器控制驱动扬声器,这样就可以用与非驱动器控制驱动扬声器,这样就可以用 PBPB

11 、、 PBPB00 (即端口(即端口 61H61H 的的 DD11 、、 DD

00 )控制发声系统。现利用)控制发声系统。现利用 22## 计数器产生计数器产生 1kHz1kHz 方波,并驱动扬声器发声,程序方波,并驱动扬声器发声,程序编制如下:编制如下:

Page 45: 8.4  8253 可编程定时计数器

BEEPBEEP :: PROCPROC NEARNEAR

MOVMOV ALAL ,, 10110110B10110110B ;; 22## 计数器、方式计数器、方式 33 、、 1616 位二进制计数;位二进制计数;

OUTOUT 4343 ,, ALAL

MOVMOV AXAX ,, 11901190 ;产生;产生 1kHz1kHz 方波的初值;方波的初值;

OUTOUT 42H42H ,, ALAL ;写入低位字节;写入低位字节

MOVMOV ALAL ,, AHAH

OUTOUT 42H42H ,, ALAL ;写入高位字节;写入高位字节

ININ ALAL ,, 61H61H

;从;从 82558255 的的 BB 口(地址号口(地址号 =61H=61H )读数据)读数据

MOVMOV AHAH ,, ALAL ;暂存;暂存 AHAH 中中

OROR ALAL ,, 00000011B00000011B

;使;使 BB 口中口中 PBPB00 、、 PBPB

11 置置 11 ,其余位不变,打开,其余位不变,打开 GATE2GATE2 和与门控制端输出,使扬声器发声和与门控制端输出,使扬声器发声

OUTOUT 61H61H ,, ALAL

SUBSUB CXCX ,, CXCX

;; CXCX 初值清初值清 00 ,作为最大延时循环程序的次数,(,作为最大延时循环程序的次数,( 10000H=6553610000H=65536 ))

Page 46: 8.4  8253 可编程定时计数器

LP1LP1 :: LOOPLOOP LP1LP1 ;延时程序;延时程序

DECDEC BLBL ;; BLBL 中内容为发声持续时间的多少中内容为发声持续时间的多少

JNZJNZ LP1LP1 ;; BL=1BL=1 发短音(约发短音(约 0.5s0.5s ),), BL=6BL=6 发长音(约发长音(约 3s3s ))

MOVMOV ALAL ,, AHAH ;取回;取回 82558255 状态状态

OUTOUT 61H61H ,, ALAL ;恢复;恢复 82558255 的的 BB 口值,停止发音(关扬声器)口值,停止发音(关扬声器)

RETRET ;过程结束,返回;过程结束,返回

Page 47: 8.4  8253 可编程定时计数器

6. 82536. 8253 的读操作的读操作(( 11 )读之前先停止计数)读之前先停止计数(( 22 )读之前先送计数值锁存命令)读之前先送计数值锁存命令

Page 48: 8.4  8253 可编程定时计数器

7. PC/XT7. PC/XT 机中机中 82538253 的应用的应用(( 11 )计数器)计数器 00 :用于产生实时时钟信号:用于产生实时时钟信号(( 22 )计数器)计数器 11 :用于产生动态存储器刷新:用于产生动态存储器刷新

的地址更新信号的地址更新信号(( 33 )计数器)计数器 22 :产生扬生器的发音驱动信:产生扬生器的发音驱动信

号号