计算机接口技术 第4章 定时器计数器接口电路_第1页
计算机接口技术 第4章 定时器计数器接口电路_第2页
计算机接口技术 第4章 定时器计数器接口电路_第3页
计算机接口技术 第4章 定时器计数器接口电路_第4页
计算机接口技术 第4章 定时器计数器接口电路_第5页
已阅读5页,还剩121页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

新k第4章定时器/计数器接口电路

第4章定时器/计数器接口电路

4.1基本概念

4.2可编程定时器/计数器

4.3ICH5中的定时器/计数器功能

4.4可编程定时器/计数器8253实验

习题4

<Back4

第4章定时器/计数器接口电路

4.1基本概念

4.1.1定时与计数

在计算机系统以及控制系统中经常需要进行定时

操作。比如,定时进行中断、定时进行数据采集或者

延迟一个固定的时间段进行某种操作等。

定时与计数问题还可以建立起与频率的关系,比

如每秒钟进行多少次数据采样的工作,这样便涉及到

采样频率的概念。

第4章定时器/计数器接口电路

4.1.2定时方法简介

常用的实现定时、延时或计数的方法有三种:软件

方法、硬件方法以及可编程硬件定时器/计数器方法。

软件方法经常通过编写软件延时程序,达到延时

的目的。这种方法不需要附加硬件设备,但是执行软

件延时程序要占用大量的CPU时间,因此降低了CPU

的利用率。

第4章定时器/计数器接口电路

在PC机中,常见的软件延时子程序如下

DELAYPROC

LOP:MOVBX,10

MOVCX,2801

WAIT:LOOPWAIT

DECBX

JNZLOP

RET

DELAYENDP

该子程序通过多次重复执行指令达到延时的目的。

力就第4章定时器/计数器接口电路_________________

硬件方法一般使用小规模集成电路和RC(电阻、电

容)电路来实现。

可编程硬件定时器/计数器在计算机系统和控制系

统中被广泛采用。这种方法灵活方便,只要通过简单

的程序设计就可以使定时器/计数器电路按定时或计数

的要求工作。

<Back4

第4章定时器/计数器接口电路

4.2可编程定时器/计数器

4.2.1Intel8253的功能与结构

Intel8253是一种常用的可编程定时器/计数器接口芯

片。8253具有三个独立的功能完全相同的16位减法计

数器,24脚DIP封装,由单一的+5V电源供电。

第4章定时器/计数器接口电路

1.主要功能

(1)每片8253上有三个独立的16位减法计数器,最大计数

范围为0〜65535o

(2)每个计数器都可按二进制或二一十进制计数。

(3)每个通道都有六种不同的工作方式。

(4)计数脉冲的频率可达2MHzo

(5)输入/输出与TTL兼容。

第4章定时器/计数器接口电路

2.8253的内部结构

8253的内部结构如图4-1所示。

滥缸第4章定时器/计数器接口电路

图4-18253的内部结构

第4章定时器/计数器接口电路

1)数据总线缓冲器

数据总线缓冲器为8位双向、三态缓冲器,经数据

线D7〜D。可连接到系统的数据总线。

2)读/写逻辑

8253读/写逻辑信号组合的功能以及各计数器通道、

控制字寄存器在PC机中的地址分配如表4-1所示。

新k第4章定时器/计数器接口电路

表4-18253读/写逻辑信号组合功能及地址分配

CSWRRDAiA)操作功能PC机口地址

00100计数初值写入计数器040H

00101计数初值写入计数器141H

0w0110计数初值写入计数器242H

0011V1-写控制字寄存器43H

010w0V0*读计数器0当前计数值40H

010w01读计数器1当前计数值41H

01010读计数器2当前计数值42H

第4章定时器/计数器接口电路

3)控制字寄存器

接收从CPU发来的控制字,控制字决定了8253的工

作方式、计数方式以及使用哪个计数器等。控制字寄

存器只能写入不能读出。

4)计数器

8253内部有三个计数器通道:计数器0、计数器1

和计数器2。各计数器独立工作,都是16位计数器。每

个计数器有3条信号线:CLK、OUT和GATE。CLK为

时钟信号输入线,CLK信号可来自于系统内部或系统

外部,计数操作实际就是计所输入的CLK脉冲的个数。

新k第4章定时器/计数器接口电路

4.2.28253的才空制字

8253的控制字用于选择哪个计数器通道工作,三

个通道可同时工作,但是要分别进行初始化;用于规

定读/写操作格式或类型,8253可以有8位的计数值或

16位的计数值,可以按二进制计数或按二一十进制计

数;用于选择工作方式,8253共有六种工作方式。

8253是由主机编程设定的,通过把一个8位的控制字写

入8253的控制字寄存器,使8253按照某种给定的方式

工作。控制字的定义如图4-2所示。

第4章定时器/计数器接口电路

1BCD计数

0二进制计数

ooo方0

oOr方1

H-

oo方2

o式3

式4

±1o。

式5

1ov

±H-

式2

1ro

±H-

式3

1rr

1H-H-

00计数器0

计数器选择01计数器1

10计数器2

11无意义,不用

图4-28253的控制字

第4章定时器/计数器接口电路

8253控制字各位的详细意义如下:

D7>D6用于选择工作的计数器。

D7D6=00:选择计数器0工作;

D7D6=01:选择计数器1工作;

D7D6=10:选择计数器2工作;

D7D6=11:无效。

D5,D4规定读/写操作格式或类型。

新k第4章定时器/计数器接口电路

D5D4=OO:计数器锁存命令,把写本命令时的当前计数值

锁存,以便以后读出;

D5D4=01:8位计数,只写低位字节,高位字节自动为0;

口5口4=10:16位计数,只写高位字节,低位字节自动为0;

口5口4=11:16位计数,先写低位字节,后写高位字节。

D3>D2>D]用于选择工作方式。

口3口2口1=000:使计数器工作于方式0;

口3口2口]=001:使计数器工作于方式1;

»3口2口1=010:使计数器工作于方式2;

第4章定时器/计数器接口电路

口3口2口1=011:使计数器工作于方式3;

口3口2口1=100:使计数器工作于方式4;

口3口2口1=101:使计数器工作于方式5。

Do使计数器按二进制计数或二一十进制(BCD码)计数o

Do=O:按二进制计数;

D0=l:按二一十进制计数。

第4章定时器/计数器接口电路

4.2.38253的工作方式

8253中的三个计数器都可独立工作,每个计数器都

有六种工作方式。工作方式由控制字设定,六种工作

方式输出的不同波形都从OUT端获得。门控信号GATE

对计数过程有影响。

1.方式0(计数到零可申请中断)

方式0的工作波形如图4-3所示。

滥缸第4章定时器/计数器接口电路

CW=10H

WR

GATE

OUT

42FE

图4-3方式0工作时序

第4章定时器/计数器接口电路

在工作方式0中计数器开始计数后只计一次数,计

数到0时,OUT保持高电平,只有重新写入计数初值后,

才开始再计数。计数过程中,如果门控信号GATE=0,

则暂停计数,GATE又变为高电平后接着计数,工作波

形见图4-4。如果在计数过程中写入新的计数值后,则

计数器将按新计数值重新开始计数,工作波形见图4-5。

滥缸第4章定时器/计数器接口电路

CW=10HLSB=4

图4-4方式0GATE信号的作用

滥缸第4章定时器/计数器接口电路

--------------------------------------------------------1-----------1----------1-----------1----------1-----------1----------1----------1----------

GATEI..................................................................................

11111111

.1111111_।_______

OUT\11!!11/1

\1__1___1___1__1___1___11

4;3;2;3;2;l;0FF

图4-5方式0计数过程改变计数初值

新k第4章定时器/计数器接口电路

设8253计数器0的端口地址为50H,采用8位计数,

只写低位字节,二进制计数,对8253计数器0进行设置,

使产生图4-3中方式0的波形,程序如下:

MOVAL,10H;控制字

OUT53H,AL;写入控制字寄存器

MOVAL,4;计数初值

OUT50H,AL;计数初值写入计数器0

第4章定时器/计数器接口电路

2.方式1(可编程单拍脉冲)

方式1的工作波形如图4-6所示。CPU写入控制字

CW(CW=12H)后,OUT保持高电平,CPU写入计数初

值(LSB=3)后,计数器并不立即开始计数,直到门控

脉冲GATE启动后的下一个CLK的下降沿才开始计数。

计数过程中OUT保持低电平,计数到零,OUT变为高

电平。

滥缸第4章定时器/计数器接口电路

CW=12HLSB=3

WR

unJJJJJunLTJJJ-

GATEji几

OUT__________/—L/L/

3210FFFE3210FF

图4-6方式1工作时序

新k第4章定时器/计数器接口电路

设8253计数器0的端口地址为50H,采用8位计数,只

写低位字节,二进制计数,对8253计数器0进行设置,

使产生图4-6中方式1的波形,程序如下:

MOVAL,12H;控制字

OUT53H,AL;写入控制字寄存器

MOVAL,3;计数初值

OUT50H,AL;计数初值写入计数器0

第4章定时器/计数器接口电路

3.方式2(N分频器)

方式2的工作波形如图4-7所示。CPU写入控制字

CW(CW=14H)后,OUT输出高电平,CPU写入计数初

值(LSB=3)后,计数器开始计数。计数过程中,OUT

保持高电平,计数到1时OUT变为低电平,OUT的低电

平保持一个CLK周期后,OUT又变为高电平,计数器又

重新开始计数。

滥缸第4章定时器/计数器接口电路

CW=14HLSB=3

WR

GATE

OUT

图4-7方式2工作时序

第4章定时器/计数器接口电路

4.方式3(方波速率发生器)

方式3的工作波形如图4-8所示。当CPU写入控制字

CW(CW=16H)后,OUT变为高电平,写入计数初值

(LSB=4)后,开始计数。在计数过程中,OUT保持高电

平;计数计到计数初值的一半值时,OUT变为低电平,

计数到0时,OUT又变为高电平,重新开始计数过程。

滥缸第4章定时器/计数器接口电路

CW=16HLSB=4

WR

CLKJWWWWWWWWL

图4-8方式3工作时序

第4章定时器/计数器接口电路

5.方式4(软件触发选通)

方式4的工作波形如图4-9所示。CPU写入控制字

CW(CW=18H),OUT变为高电平,只要GATE保持高

电平,写入计数初值(LSB=5)后,计数器就开始计数,

这相当于软件触发选通。计数到0,OUT变为低电平,

在OUT保持一个CLK周期的低电平后又变为高电平,

并停止计数。重新写入计数初值才开始下一次计数过程。

滥缸第4章定时器/计数器接口电路

CW=18HLSB=5

WR

----------1-----------1----------1----------1----------1-----------1----------1----------1--------1-

GATE1-1----------1----------1----------1----------1----------1----------1--------1

111111111

1111______1[111______1

1111|\1/111

OUT/1111)\1/111

IIII।\___r।।।

54।321'0FFFE'FD

图4-9方式4工作时序

新k第4章定时器/计数器接口电路

计数过程中,如果GATE=O,则停止计数;GATE

=1,则允许计数。为保证实现软件触发选通,GATE

应保持为高电平。计数过程中写入新计数初值,相当

于一个新的软件触发选通,按新计数初值计数。

第4章定时器/计数器接口电路

6.方式5(硬件触发选通)

方式5的工作波形如图4-10所示。CPU写入控制字

CW(CW=1AH)后,OUT保持为高电平,CPU写入计

数初值(LSB=3)后,计数器并不立即开始计数,在门

控脉冲GATE启动后的下一个CLK的下降沿才开始计数。

新k第4章定时器/计数器接口电路

若计数初值为N,经门控脉冲触发,过N+1个CLK

后才输出一个负脉冲。在计数过程中有新GATE触发,

计数器重新开始计数。在计数过程中,写入新的计数

初值,只有在有GATE脉冲触发时才按新值开始计数。

滥缸第4章定时器/计数器接口电路

CW=1AHLSB=3

sK_n_n_n_叽叽n_n_叽叽n_

图4-10方式5工作时序

第4章定时器/计数器接口电路

7.六种工作方式小结

上面已经分别介绍了Intel8253可编程定时器/计数器

接口芯片的六种工作方式,下面再对它们的共同点和不

同点进行简单总结。

1)OUT的输出波形

在六种工作方式中,只有方式0在写入控制字后,

OUT输出为低电平,其他五种方式OUT输出都为高电平。

方式2、方式4和方式5都是输出宽度为一个CLK周期的

负脉冲,输出波形都相同,但方式2是连续工作的,方

式4是由软件触发的,方式5是由硬件门控脉冲触发的。

计数初值N与输出波形的关系见表4-2。

新k第4章定时器/计数器接口电路

表4-2计数初值N与输出波形的关系

方式计数初值N与输出波形的关系:

0写入N后,经N+1个CLK,OUT变为高电平

1单扫肱迎的宽度为N念~CLK脉冲的宽度

2每N公CLK,输出一个宽度为CLK周期的脉冲

写入N后,若N为偶数,则煎N/2个CLK期间OUT为高电平,后N/2个CLK期间OUT

3为低电平;若N为奇数,则煎(N+l)/2个CLK期间OUT为高电平,后个CLK

期间OUT为低电平

4写入N后傲件触发),经过N+1个CLK后,输出宽度为1个CLK的负脉冲

5门控脉冲触发后,经过N+1念“CLK后,输出宽度为1个CLK的负脉冲

第4章定时器/计数器接口电路

2)门控信号GATE的作用

一般情况下,GATE信号为低电平时禁止计数,为

高电平时允许计数,方式1和方式5则需要有由低变高

的上升沿触发脉冲来启动计数。GATE信号对各种工作

方式的影响如表4.3所示。

第4章定时器/计数器接口电路

表4-3GATE信号作用

GATE

方式

高低或变低上升沿

0允许计数禁止计数—

1——启动计数,下一个CLK脉冲使输出为低

2允许计数禁止计数重新装入计数初值,启动计数

3允许计数禁止计数,立即使输出为高重新装入计数初值,启动计数

4允许计数禁止计数—

5——启动计数,从初值开始计数

第4章定时器/计数器接口电路

3)计数初值的设置

任何一种工作方式,只有在写入计数初值后才能

开始计数。门控信号GATE保持为高电平,方式0、方

式2、方式3和方式4在写入计数初值后,计数过程就开

始了;而方式1和方式5需要有外部GATE触发,才能开

始计数。

新k第4章定时器/计数器接口电路

4)计数过程中改变计数值的影响

8253在计数过程中写入新的计数初值,对计数过程

的影响见表4-4。

定时器/计数器接口电路

表4-4计数过程中改变计数值的影响

方式写入新的计数值

0立即有效

1外部GA1E触发后有效

2计数到1后有效

3计数到0后有效或外部GAIE触发后有效

4立即有效

5外部GATE触发后有效

力就第4章定时器/计数器接口电路_________________

4.2.48253的编程

8253没有复位信号,加电开机后,其工作方式是不

确定的。

1.8253的初始化编程

8253的初始化编程包括写入控制字和写入计数初值。

完成8253的初始化设置以后,只要门控信号GATE处于

正确的状态,8253就可以工作了。

D7D6D5D4D3D2RD°

选择计数器读写类型选择工作方式数制

第4章定时器/计数器接口电路

通过设置控制字,可以规定使用哪一个计数器;规

定读写类型,采用8位计数还是16位计数;选择六种工

作方式中的哪一种方式等;数制如果选择二进制,则

计数值的范围是0H〜OFFFFH,如果选择二一十进制或

者说BCD码计数,则计数值的范围是0-9999。

例4.1设8253的端口地址为50H〜53H,使用计数

器1,工作于方式3,二进制计数,计数初值为3000H,

请编写初始化程序。

新k第4章定时器/计数器接口电路

解(1)16位计数,先写低8位,后写高8位。

MOVAL,76H;控制字01110110B

OUT53H,AL;控制字写入控制字寄存器

MOVAL,OOH;计数初值低8位

OUT51H,AL;计数初值低8位写入计数器1

MOVAL,30H;计数初值高8位

OUT51H,AL;计数初值高8位写入计数器1

第4章定时器/计数器接口电路

(2)16位计数,只写高8位,低8位自动为0。

MOVAL,66H;控制字01100110B

OUT53H,AL;控制字写入控制字寄存器

MOVAL,30H;计数初值高8位

OUT51H,AL;计数初值高8位写入计数器1

解法(1)和解法(2)效果相同。

新k第4章定时器/计数器接口电路

例4.2设8253的端口地址为5F0H〜5F3H,使用计

数器0,工作于方式4,二进制计数;使用计数器2,工

作于方式5,二—十进制计数。计数器0和计数器2的计

数初值都等于十进制数值512,请编写初始化程序。

新k第4章定时器/计数器接口电路

解MOVAL,38H;控制字00111000B

MOVDX,5F3H;控制字寄存器端口地址

OUTDX,AL;控制字写入控制字寄存器

MOVDX,5F0H;计数器0端口地址

MOVAL,00H;计数初值低8位

OUTDX,AL;计数初值低8位写入计数器0

MOVAL,02H;计数初值高8位

新k第4章定时器/计数器接口电路

OUTDX,AL;计数初值高8位写入计数器0

MOVAL,OBBH;控制字10111011B

MOVDX,5F3H;控制字寄存器端口地址

OUTDX,AL;控制字写入控制字寄存器

MOVDX,5F2H;计数器2端口地址

MOVAL,12H;计数初值低8位

OUTDX,AL;计数初值低8位写入计数器2

MOVAL,05H;计数初值高8位

OUTDX,AL;计数初值高8位写入计数器2

第4章定时器/计数器接口电路

2.8253当前计数值的读取

有时因为某种特殊要求,需要读取8253的当前计

数值。为了读取稳定的计数值,可以设置门控信号

GATE或时钟信号CLK使计数器暂停计数,然后读取

8253的当前计数值。

另一种方法是使用计数器锁存命令(设置控制字的

D5D4位=00),把当前计数器值锁存到8253内部的专

用寄存器中,然后再读取8253的当前计数值。下面给

出具体的例子。

新k第4章定时器/计数器接口电路

例4.3设8253的端口地址为5F0H〜5F3H,请编写程序读

取计数器2的当前计数值。

MOVAL,80H;计数器2的锁存命令

MOVDX,5F3H;控制字寄存器端口地址

OUTDX,AL;计数器2的锁存命令写入控

制字寄存器

MOVDX,5F2H;计数器2端口地址

INDX,AL;读取计数初值低8位

MOVBL,AL;计数初值低8位存入BL

INDX,AL;读取计数初值高8位

MOVBH,AL;计数初值高8位存入BH

第4章定时器/计数器接口电路

4.2.58253的应用

1.应用举例

例4.4设定时器/计数器8253的计数器2的端口地址

为42H,控制字寄存器的端口地址为43H,DATE2保持

高电平,CLK2端输入的时钟频率为100kHz,要求

OUT2端输出波形的频率为10kHz,且输出波形中高电

平的占空度与低电平的占空度之比为9:lo

第4章定时器/计数器接口电路

解控制字的设定中使用十进制计数,只写低8位,

高8位自动为0,所以控制字为10010101B。实现的程序

如下:

MOVAL,95H;计数器1控制字

OUT43,AL;控制字寄存器

MOVDX,42H;计数器2

MOVAL,10;计数初值10

OUT42,AL

第4章定时器/计数器接口电路

例4.5设计算机系统中有一片8253,其中计数器0

已被系统占用,计数器1、计数器2可供用户使用,所

有GATE都保持为高电平,已知要加在8253上的输入时

钟CLK的频率为512kHz,若要使计数器2的OUT2产生

周期为1S的对称方波,采用二—十进制计数,应如何

使用8253芯片来实现。请画出电路连接的简单示意图

并编写程序。设8253的端口地址为4F0H〜4F3H。

新k第4章定时器/计数器接口电路

分析:要使8253产生周期为1s的对称方波,可使

8253的计数器通道工作于方式3。对于8253的每个计数

器通道有

FoulFcJn

式中,F°ut为计数器通道OUT端输出波形的频率,

Ek为计数器通道CLK输入的频率,n为计数初值。

TournXTclk

式中,丁而为计数器通道OUT端输出波形的周期,

Tdk为计数器通道输入的CLK的周期,n为计数初值。

第4章定时器/计数器接口电路

根据题目要求有

n=I^=TlltXFr1,=1X512000=512000

,I,CzLILLlx.

Aclk

8253有三个计数器通道,每个计数器通道计数值的范

围是0〜65535(二进制计数)或0〜9999(二一十进制计数)。

如果实际需求超过计数器通道允许的最大计数值时,应

如何进行处理呢?

定时器/计数器接口电路

图4-118253计数器通道的串联使用

新k第4章定时器/计数器接口电路

解计数器通道串联使用的简图如图4-11所示,实现的程序

如下:

MOVDX,4F3H;控制字寄存器

MOVAL,77H;计数器1控制字

OUTDX,AL

MOVDX,4F1H;计数器1

MOVAL,0;计数初值1000

OUTDX,AL

新k第4章定时器/计数器接口电路

MOVAL,10H

OUTDX,AL

MOVDX,4F3H

MOVAL,B7H;计数器2控制字

OUTDX,AL

MOVDX,4F2H;计数器2

MOVAL,12H;计数初值512

OUTDX,AL

MOVAL,5H

OUTDX,AL

第4章定时器/计数器接口电路

例4.6设计算机系统中有一片8253,要求利用计数

器0每隔10ms从OUT。端输出宽度为1个CLK的脉冲信

号。该脉冲信号作为计数器1的门控信号GATE],用于

触发计数器1,使计数器1每隔10ms就在OUT1端产生

一个宽度为2ms的单拍脉冲。已知要加在8253上的输

入时钟CLK的频率为1kHz,设8253的端口地址为

4F0H~4F3Ho请1H出电路的简单不意图并编写程序。

第4章定时器/计数器接口电路

分析:要使计数器0每隔10ms从OUT。端连续输出

宽度为1个CLK的脉冲信号,可以使计数器0工作于方

式2。计数器0输出波形的周期T°ut=10ms=0.01s,所以

计数初值&(参照例4.5)可以根据下式计算:

T

&=-ToutXFclk=0.01X1000=10

1elk

新k第4章定时器/计数器接口电路

根据工作于方式2输出波形可知,工作于方式2产

生的宽度为1个CLK的输出脉冲信号是低电平,把它作

为计数器1的GATE信号时需要加上反向器电路。

第4章定时器/计数器接口电路

要求计数器1用GATE信号触发,计数器1只可能使

用工作方式1或方式5。由题目要求:使计数器1每隔10

ms就在OUT[端产生一个宽度为2ms的单拍脉冲,可使

计数器1工作于方式1,并且可知计数器1输出波形的周

期T0ut=10ms。要使计数器1的OU.端产生的单拍脉冲

的宽度为2ms,计数初值叫可以根据下式计算:

第4章定时器/计数器接口电路

单拍脉冲的宽度=叫义输入时钟CLK的周期=

ni><Tdk=n]X(l/Fdk)

叫=单拍脉冲的宽度/输入时钟CLK的周期=

0.002/(1/1000)

%=2

注意这里的计数初值要根据单拍脉冲的宽度来计算。

第4章定时器/计数器接口电路

解按题目要求编写的程序如下:

MOVDX,4F3H;控制字寄存器的端口地址

MOVAL,53H;计数器1控制字,BCD计数

OUTDX,AL

MOVDX,4F1H;计数器1的端口地址

MOVAL,2;计数初值

OUTDX,AL

MOVDX,4F3H

MOVAL,15H;计数器0控制字,BCD计数

第4章定时器/计数器接口电路

OUTDX,AL

MOVDX,4F0H;计数器0的端口地址

MOVAL,10H;计数初值10

OUTDX,AL

根据题目要求画出8253的连接电路图如图4-12所示。

新k第4章定时器/计数器接口电路

图4-12例4.6的8253连接电路图

第4章定时器/计数器接口电路

例4.6的程序执行时的时序图如图4-13所示。其中

GATE1是由OUT。经过反向器后产生的波形。

第4章定时器/计数器接口电路

CWLSB

6

FPFKFF

oIT

图4-13例4.6的8253计数器的时序图

第4章定时器/计数器接口电路

2.8253在PC机中的应用

IBMPC/XT机系统板上使用了一片8253,其连接

如图4-14所示。三个计数器通道分别用于日时钟计时、

动态RAM定时刷新和扬声器发声。

滥缸第4章定时器/计数器接口电路

P%PB]来自8255A

图4-14PC/XT中的8253

第4章定时器/计数器接口电路

1)计数器0——日时钟中断请求

计数器0工作于方式3,门控信号线GATE接+5Vo

OUT。接到8259A的IRQ。,每隔55ms向8259A提出一次

作为XT机的日时钟的中断请求。计数初值为65536(实

际写入值为0),因此输出信号的频率为1.19318

MHz/65536=18.206Hz,即每秒产生18.2次中断请求。

初始化程序如下:

新k第4章定时器/计数器接口电路

MOVAL,36H

;控制字,计数器0,方式3,二进制计数,16位计数

OUT43H,AL;写入控制字

MOVAL,0;计数初值65536

OUT40H,AL;写入计数初值低8位

OUT40H,AL;写入计数初值高8位

第4章定时器/计数器接口电路

2)计数器1-----定时DMA请求

计数器1工作于方式2,门控信号线GATE接+5Vo

OUT1连往DMA请求电路,每隔15.12然向DMA的0通

道请求一次DMA操作,作为动态内存刷新的DMA请求

信号。初始化程序如下:

第4章定时器/计数器接口电路

MOVAL,54H

;计数器1,方式2,只写低8位,二进制计数

OUT43H,AL;写入控制字

MOVAL,12H;计数初值

OUT41H,AL;写入计数初值

第4章定时器/计数器接口电路

3)计数器2——发声程序

计数器2的输出送往扬声器发声电路。门控信号

GATE2接8255并行接口电路的PB。,因此计数器2的计

数过程将受到PB。的控制,而PB°又受I/O端口61H的D0

位的控制,当PB°=1时,OUT2才能输出方波。OUT2和

PB]经过一个与门接至扬声器驱动电路。因此OUT?也

将受到PB】的控制,而PB】又受I/O端口61H的D1位的控

制。ROM-BIOS中的发声子程序BEEP使计数器2工作

于方式3,产生约为1kHz的方波,程序如下:

高丫第4章定时器/计数器接口电路

BEEPPROC

MOVAL,10110110B

;计数器2,方式3,16位计数,二进制计数

OUT43H,AL;写入控制字

MOVAX,0533H

;计数初值为0533H=1331(1.19318MHz/1331=896Hz)

OUT42H,AL;写入计数初值低8位

MOVAL,AH

OUT42H,AL;写入计数初值高8位

INAL,61H;读8255端口B的原值

新k第4章定时器/计数器接口电路

MOVAH,AL;暂存AH

ORAL,03H;使PB°=1、PB[=1

OUT61H,AL;输出,使扬声器发声

SUBCX,CX

LOP:LOOPLOP;延时

DECBL;BL值由入口参数提供,决定发声长短

JNZLOP;BL=6发长声,BL=1发短声

第4章定时器/计数器接口电路

MOVAL,AH

OUT61H,AL

;恢复8255端口B的原值,停止发声

RET;返回

BEEPENDP

新k第4章定时器/计数器接口电路

例4.7利用PC机中的8253的计数器2连续发出26个

频率不同的声音。要求第一个发出声音的频率为896

Hz,其后发出声音的频率逐次降低,使最后一个发出

声音的频率约为407Hzo

第4章定时器/计数器接口电路

解要使8253发出声音的频率为896Hz,计数初值

应为1331(见例4.6)。要使8253发出声音的频率逐次降

低,只要逐次增大8253的计数初值即可。程序中每次

循环使计数初值都增加64,最后一次发出声音时的计

数初值为初31+(25X64)=2931,声音频率为1.19318

MHz/2931=407Hz。程序如下:

滥缸第4章定时器/计数器接口电路

CSEGSEGMENT

ASSUMECS:CSEG

GENSOUNDPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAL,0B6H;计数器2,方式3,16位计数,二进制计数

OUT43H,AL

MOVDX,26

MOVAX,1331;计数初值为1331(1.19318MHz/1331=896

Hz)

滥缸第4章定时器/计数器接口电路

AGAIN:PUSHAX

OUT42H,AL;写入计数初值低8位

MOVAL,AH

OUT42H,AL;写入计数初值高8位

INAL,61H

MOVAH,AL

ORAL,3

OUT61H,AL;输出,使扬声器发声

MOVBX,0FFFFH

新k第4章定时器/计数器接口电路

WAIT1:MOVCX,2801

DELAY:LOOPDELAY;延时

DECBX

JNZWAIT1

MOVAL,AH

OUT61H,AL

POPAX

ADDAX,64;使计数初值加64

DECDX

力就第4章定时器/计数器接口电路_________________

JNZAGAIN;判断循环是否结束

RET

GENSOUNDENDP

CSEGENDS

ENDGENSOUND

力就第4章定时器/计数器接口电路_________________

3.用8253演奏简单乐曲

利用PC机中的定时器/计数器电路8253可以使扬声器

发声并且还可以用来演奏简单的乐曲。

1)声音的产生

在PC机中产生声音可以通过使用8253的计数器2,

工作于方式3来实现。设置控制字的指令为

MOVAL,0B6H

;计数器2,方式3,16位计数,二进制计数

OUT43H,AL

新k第4章定时器/计数器接口电路

设置好控制字后要根据声音的频率对计数器2(也就

是42H端口),设定对应的计数初值。指令如下:

MOVAL,计数初值低8位

OUT42H,AL

MOVAL,计数初值高8位

OUT42H,AL

新k第4章定时器/计数器接口电路

然后通过设定PC机中的并行接口电路8255的PB。、

PBr打开扬声器的门电路,就可以发出该频率的声音

了。实现该功能的指令如下:

INAL,61H;读取8255端口B的值

MOVAH,AL;暂存AH

ORAL,03H;使PBO=1、PB1=1

OUT61H,AL;输出,使扬声器发声

第4章定时器/计数器接口电路

2)音符与频率

在音乐中声音的频率就是音高。图4-15中画出了部

分钢琴键盘,图中C、D、E等是音符的音名,数字表

示乐音的频率,单位为Hz。

不包括钢琴键盘的黑键,用简^表示的C大调音符

与频率近似值的对应关系如下:

音符123456712345671

频率131147165175196220247262294330

349392440494523

力就第4章定时器/计数器接口电路_________________

8253计数器的计数初值与发出声音的频率之间的关

系如下式所示:

计数初值=时钟频率

发出声音的频率

第4章定时器/计数器接口电路

如果提供给8253计数器2的CLK的时钟频率为1193

180Hz,即1234DCH,并把要求发出的声音的频率值

放入DI中,使AX获得对应的计数初值的指令为

MOVDX,12H

MOVAX,34DCH

DIVDI

上述指令执行后计数初值在AX中,然后可以分别按

低字节和高字节输出至42H端口,使计数器产生所需频

率的声音(音符)。在实际应用中,计数初值要根据实际

系统中的时钟频率来计算。

第4章定时器/计数器接口电路

(中音)

图4-15钢琴键盘音符与频率的关系

第4章定时器/计数器接口电路

3)延时程序及其作用

当时钟为1193180Hz时,延时10ms可用如下延时

程序实现:

DELAY:MOVCX,2801

LOPIO:LOOPLOP10

如果实际应用环境中的时钟频率较高,则应重新计

算并设置延时时间。

滥缸第4章定时器/计数器接口电路

例4.8利用PC机中的8253的计数器2,演奏“音乐

之声”中的乐曲《孤独的牧羊人》中的一部分。要演

奏的部分曲谱如下:

图4-16《孤独的牧羊人》部分曲谱

第4章定时器/计数器接口电路

解编写演奏乐曲《孤独的牧羊人》,需要把与音

符所对应的频率放在FREQ表中,把与音符所对应的节

拍(延时次数值)放在TIME表中。然后由主程序控制,

逐一按音符的频率和节拍值,使扬声器发出声音。当

与音符对应的频率值为0时,停止演奏。

新k第4章定时器/计数器接口电路

子程序PLAY的功能是使扬声器发出声音,演奏乐曲。

由DI指定音符的频率,BX指定与音符对应的节拍。SI

指向频率表FREQ,BP指向节拍表TIME。频率表以0结

尾,用于作为程序结束的条件:如果取来的频率值为0,

则程序结束。

高丫第4章定时器/计数器接口电路

DATASEGMENT

FREQDW196,392,392,392,196,196

DW196,349,349,330

DW2DUP(196,392,196,196)

DW196,440,392,0;与音符对应的频率表

TIMEDW25,12,12,25,12,12

DW4DUP(25)

DW8DUP(12)

DW25,25,50;与音符对应的节拍表

新k第4章定时器/计数器接口电路

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:MOVAX,DATA

MOVDS,AX

LEASI,FREQ

LEABP,TIME

第4章定时器/计数器接口电路

LOP:MOVDI,[SI];取频率值

CMPDI,0

JZEXIT;若取来的频率值为0,则转程序退出

MOVBX,DS:[BP];取节拍值

CALLPLAY

INCSI

INCSI

INCBP

INCBP

JMPLOP

第4章定时器/计数器接口电路

EXIT:MOVAH,4CH

INT21H

PLAYPROC

PUSHAX

PUSHBX

PUSHCX

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论