第6章 i/o接口和并行接口 芯片8255a - ustchome.ustc.edu.cn/~ytwang/6.pdf ·...

130
2015518日星期一841321 6I/O接口和并行接口 芯片8255A

Upload: others

Post on 17-May-2020

18 views

Category:

Documents


0 download

TRANSCRIPT

2015年5月18日星期一8时41分32秒 1

第6章 I/O接口和并行接口芯片8255A

2015年5月18日星期一8时41分32秒 2

本章主要内容:

6.1 I/O接口

6.2 8255A的工作原理

6.3 8255A的应用举例

2015年5月18日星期一8时41分32秒 3

本章作业

pp230-231

1、2、5、8、10、11、16

2015年5月18日星期一8时41分32秒 4

6.1 I/O接口6.1.1 I/O接口的功能

6.1.2 I/O端口及其寻址方式

6.1.3 CPU与外设间的数据传送方式

6.1.4 PC机的I/O地址分配

2015年5月18日星期一8时41分32秒 5

什么是I/O接口?

把外设连接到总线上的一组逻辑电路的

总称。实现外设与主机之间的信息交换。

2015年5月18日星期一8时41分32秒 6

6.1.1 I/O接口的功能

1.采用I/O接口的必要性

计算机与外设间交换数据、状态和控制命令的的过程统称为通信(Communication)。

CPU与外设交换信息的过程,和它与存储器交换数据那样,也是在控制信号的作用下通过数据总线来完成的。

存储器芯片的存取速度与CPU的时钟频率在同一数量级,存储器本身又具有数据缓冲能力,所以CPU与存储器可以很方便地交换数据,但与外设交换数据的过程要复杂得多。

2015年5月18日星期一8时41分32秒 7

计算机与外设间的信息交换存在的问题

速度不匹配(Buffer)

信号电平不匹配和驱动能力(电平转换器、驱动器)

信息格式不匹配(字节流、块、数据包、帧)

信号形式不匹配(A/D、D/A)

时序不匹配(定时关系)

总线隔离(三态门)

2015年5月18日星期一8时41分33秒 8

2.接口的功能1) 设置数据缓冲解决速度不匹配问题

事先把要传送的数据准备好,在需要的时刻完成传送。经常使用锁存器和缓冲器,并配以适当的联络信号来实现这种功能。

2) 设置电平转换电路解决电平不一致问题

如计算机和外设间进行串行通信时,可采用MAX232和MAX233等芯片来实现电平转换,在第9章讨论。

3) 设置信息转换逻辑满足各自格式要求

将外设传送的模拟量,经A/D转换成数字量,送到计算机去处理。计算机送出的数字信号经D/A转换成模拟信号,驱动某些外设工作。

2015年5月18日星期一8时41分33秒 9

2. 接口的功能

4) 设置时序控制电路同步CPU和外设的工作接口电路接收CPU送来的命令或控制信号、定时信号,实施对外设的控制与管理,外设的工作状态和应答信号也通过接口及时返回CPU,以握手联络(handshaking)信号来保证主机和外部I/O操作实现同步。

5) 提供地址译码电路计算机中存在多个外设,每个外设需要与CPU交换几种信息,因此接口电路中常含若干端口,其I/O地址由接口电路中的地址译码电路提供。

6)提供I/O控制、读/写控制及中断控制等逻辑。

2015年5月18日星期一8时41分33秒 10

CPU与外设之间信息交换的通道

信息缓冲、信息变换、电平转换、联络控制

分类:

8086系统中最常用的数字接口电路芯片:

LS244/245、LS373(273/374)、8253A、8255A、8251A

功能 传送方式 传送的信息类型

输入接口 并行接口 数字量的输入/输出接口

输出接口 串行接口 模拟量的输入/输出接口

2015年5月18日星期一8时41分33秒 11

总之,I/O接口的功能:

提供I/O地址译码与设备选择

把选中的外设与总线相接,未选中的与总线隔离(高阻态)

设置数据的缓冲与暂存

协调接口与CPU工作速度的差异

设置时序控制,同步CPU与外设

对外设进行监测、控制与管理,中断处理

设置信号转换逻辑,满足格式要求

格式、码制

设置信号电平转换

电平、功率等

2015年5月18日星期一8时41分34秒 12

6.1.2 I/O端口及其寻址方式

1. I/O端口

端口:信息存放的寄存器及其控制逻辑统称为端口。

CPU与外设通信时,主要传送数据信息、状态信息和控制信息。

在接口电路中,这些信息分别进入不同的寄存器,CPU可对端口中的信息直接进行读写。

2015年5月18日星期一8时41分34秒 13

1. I/O端口

在一般接口电路中都要设置以下几种端口:

1)数据端口

数据端口(Data Port)或数据口,用来存放外设送往CPU的数据,或者CPU要输出到外设去的数据,长度一般为1~2字节。

作用:

数据口主要起数据缓冲作用。

2015年5月18日星期一8时41分34秒 14

1. I/O端口

2)状态端口

状态端口(Status Port)指示外设的当前状态。每个外设具有几个状态位,它们可由CPU读取,以测试或检查外设的状态,决定程序的流程。

2015年5月18日星期一8时41分34秒 15

1. I/O端口

状态口中常用的状态位:

准备就绪位(Ready):输入、输出端口

忙碌位(Busy):输出设备

错误位(Error):指示传送过程出现了问题

2015年5月18日星期一8时41分34秒 16

1. I/O端口

准备就绪位(Ready)

如果是输入端口,该位为1表明端口的数据寄存器已准备好数据,等待CPU来读取;当数据被取走后,该位清0。

若是输出端口,该位为1表明端口中的输出数据寄存器已空,可以接收CPU的下个数据了;当新数据到达后,该位清0。

2015年5月18日星期一8时41分34秒 17

1. I/O端口

忙碌位(Busy)

表明输出设备是否能接受数据。

若该位为1,表示外设正在进行I/O传送操作,暂时不允许CPU送新的数据过来。

本次数据传送完毕,该位清0,表示外设已处于空闲状态,又允许CPU将下一个数据送到输出口。

错误位(Error)

如果在数据传送过程中产生了某种错误,可将错误状态位置1,以便CPU进行相应的处理。

系统中可以设置若干错误状态位,表明不同性质的错误,如奇偶校验错、溢出错等。

2015年5月18日星期一8时41分34秒 18

1. I/O端口

3)命令端口

命令端口(Command Port)也称为控制端口(ControlPort),用来存放CPU向接口发出的各种命令和控制字,控制接口或设备的动作。

常见的命令信息位有启动位、停止位、允许中断位等。

接口芯片不同,控制字的格式和内容是各不相同的,常见的控制字有方式选择控制字,操作命令字等。

2015年5月18日星期一8时41分34秒 19

1. I/O端口

总结:

通常,CPU与外设交换的数据以字节为单位,因此一个外设的数据端口含有8位。

状态口和命令口可以只包含1位或几位信息,所以不同外设的状态口允许共用一个端口,命令口也可共用。D触发器和三态缓冲器常用来构成这两种端口。

由于微型计算机体系的要求,端口的信息作为数据传输。

2015年5月18日星期一8时41分34秒 20

2. I/O端口的寻址方法

不同外设具有的端口数各不相同,计算机中为每一个端口都赋予一个唯一编号——称为端口地址(或端口号)。

端口有两种编址方式:存储器映象寻址方式(统一编址)和单独编址。

2015年5月18日星期一8时41分34秒 21

2. I/O端口的寻址方法

1) 存储器映象寻址方式(Memory

Mapped I/O)

把外设接口与内存统一进行编址。各占据统一地址空间的不同部分。

优点

指令统一,灵活;

访问控制信号统一,使用同一组的地址/控制信号。

缺点

内存可用的地址空间减小。

0

地址空间(共1MB)

内存地址(960KB)

I/O地址(64KB)

0FFFFFH

0EFFFFH0 F0 000 H

如Motorola公司的MC6800、MC68000、MC 6805,MOS科技公司的6502等CPU

2015年5月18日星期一8时41分35秒 22

2. I/O端口的寻址方法

2) I/O单独编址方式

外设地址空间和内存地址空间相互独立,对端口的访问用专门指令(IN、OUT)。

优点:内存地址空间不受I/O编址的影响,指令易区分

缺点:I/O指令功能较弱,使用不同的读写控制信号(M/#IO)

00000H

内存地址空间

内存空间(1MB)

I/O空间(64KB)

0FFFFH

0FFFFFH

I/O地址空间0000H

8086系统,采用I/O寻址方式

2015年5月18日星期一8时41分35秒 23

2. I/O端口的寻址方法

8088/8086 CPU的I/O编址方式采用I/O单独编址方式(但地址线与存储器共用)

地址线上的地址信号用M/#IO来区分:

M/#IO=0时为I/O地址

I/O操作只使用20根地址线中的16根: A15~A0

可寻址的I/O端口数为64K(65536)个

I/O地址范围为0~0FFFFH

IBM PC只使用了1024个I/O地址(0~3FFH)

2015年5月18日星期一8时41分35秒 24

2. I/O端口的寻址方法

I/O端口地址的译码

#IOW、IOR、A15~A0

OUT指令将使总线的#IOW信号有效

IN指令将使总线的IOR信号有效

当接口只有一个端口时,16位地址线一般应全部参与译码,译码输出直接选择该端口;当接口具有多个端口时,则16位地址线的高位参与译码(决定接口的基地址),而低位则用于确定要访问哪一个端口。

例如:某外设接口有4个端口,地址为2F0H~2F3H,则其基地址为2F0H,由A15~A2译码得到,而A1、A0用来确定4个端口中的某一个。

2015年5月18日星期一8时41分35秒 25

6.1.3 CPU与外设间的数据传送方式

并行

一个数据单位(通常为字节)的各位同时传送

速度快、距离短、成本高

例:PC机的并行接口(通常用于连接打印机)

串行

数据按位进行传送

速度慢、距离远、成本低

例: PC机的串行接口(通常用于串行通信)

2015年5月18日星期一8时41分35秒 26

6.1.3 CPU与外设间的数据传送方式

1. 程序控制方式(软件)数据传送在程序控制下完成,又可分为:

无条件传送条件传送

2. 中断方式(软件)外设发中断请求,CPU响应后完成数据传送。

3. DMA方式(硬件)DMA控制器临时接管CPU的地址、数据和控制总线,实现批量数据的传送。

2015年5月18日星期一8时41分35秒 27

1. 程序控制方式1)无条件传送方式

也称同步传送方式,主要用于对简单外设进行操作,所需的硬件和软件都较少。

对于这类外设,任何时刻在输入时均已准备好数据,输出时已处于接收数据状态,程序可不必检查外设的状态。

在需要进行输入或输出操作时,可以直接执行输入输出指令,I/O指令执行后,立即进行数据传送操作。

以下外设可采用无条件传送方式:

开关

发光器件(如发光二极管、7段数码管、灯泡等)

继电器

步进电机

优点:软件及接口硬件简单

缺点:只适用于简单外设,适应范围较窄。

2015年5月18日星期一8时41分36秒 28

1) 无条件传送方式

图6.1

最简单的输入端口:按键开关的状态输入口。

开关经1个8位三态缓冲器接到数据总线,用IN指令将开关状态读入缓冲器。

1-断开,0-闭合。

无需锁存,可随时读取开关状态。

2015年5月18日星期一8时41分36秒 29

1) 无条件传送方式

缓冲器74LS244

1G'=0,传送,即Y=A

1G'=1,高阻,即Y=Z

244

2015年5月18日星期一8时41分36秒 30

1) 无条件传送方式74LS245#G=0,传送;#G=0时:

DIR=0,B→ADIR=1,A→B

#G=1,三态门高阻。

245

2015年5月18日星期一8时41分36秒 31

1) 无条件传送方式

最简单的输出口:LED的点亮和熄灭控制。

1个8位锁存器接8个LED显示器,用OUT指令将命令字送到LED,1-点亮,0-熄灭。

可随时改变LED状态。

图6.2

2015年5月18日星期一8时41分36秒 32

1) 无条件传送方式

74LS273

#CLR=1时,

CLK上升沿将D端数据锁存到Q端(清除端CLEAR保持高电平)。

2015年5月18日星期一8时41分36秒 33

1. 程序控制方式

2) 条件传送查询式传送方式

适用于外设并不总是准备好,而且对传送速率、传送效率要求不高的场合。

CPU在与外设交换数据前必须反复询问外设状态,“准备好没有?”

对外设的要求:应提供设备状态信息

对接口的要求:需要提供状态端口

优点:软件比较简单

缺点:CPU效率低,数据传送的实时性差,速度较慢。

2015年5月18日星期一8时41分36秒 34

查询式输入接口电路

包括输入数据口和状态口。状态口( #CS1有效)由1个D触发器和1个三态门构成,输入数据口(#CS2有效)由1个8位锁存器和1个8位缓冲器构成。

执行IN指令选中状态口时,读取状态信息READY;执行IN指令选中数据口时,从缓冲器读取数据信息。

图6.3

2015年5月18日星期一8时41分37秒 35

工作过程:

① 输入设备准备好数据后,向接口电路发选通信号,将数据打入锁存器,

并使D触发器的Q端置1。

② 执行IN指令读状态口, #CS1和#RD有效。Q端高电平经缓冲器送到数据

线,作为READY信号读入累加器。

③ CPU查READY=1, 执行IN指令读数据口, #CS2和#RD有效使数据缓冲器

开启,锁存数据经缓冲器送上数据总线并进入累加器,同时将D触发器

清0,一次数据传送完毕。

④ 接着开始下个数据的传送,直至全部数据传送完毕。

图6.3

2015年5月18日星期一8时41分37秒 36

查询式输入数据的程序段:

MOV BX,0 ;初始化地址指针

MOV CX,COUNT_1;传送字节数

READ_S1:

IN AL,PORT_S1 ;读入状态位

TEST AL,01H ;数据准备好?

JZ READ_S1 ;否,循环检测

IN AL,PORT_IN ;准备好,读数据

MOV [BX],AL ;存入内存缓冲区

INC BX ;修改地址指针

LOOP READ_S1 ;未完,继续

… ;已传送完

2015年5月18日星期一8时41分37秒 37

查询式输出电路和工作过程① CPU准备输出数据时先执行IN指令,它使状态口三态门开启,从数据总线D1位读入BUSY状态。BUSY=1,外设忙;BUSY=0,CPU可向外设输出数据。

② 外设不忙时, 执行OUT指令选中数据口。#CS2和#WR有效, 门2输出低电平选通信号,锁存器选通,将数据送向外设。同时,其后沿还使D触发器翻转,置Q为高电平,即把状态口的BUSY位置成1,表示忙碌。

③ 输出设备取走数据后,送回一个应答信号#ACK ,将D触发器Q端清 0,即置BUSY=0,允许CPU送出下个数据。

图6.5

2015年5月18日星期一8时41分37秒 38

2) 条件传送

查询式输出数据的程序段:

MOV CX,COUNT_2 ;传送的字节数

READ_S2:

IN AL,PORT_S2 ;读入状态位

TEST AL,02H ;忙否?

JNZ READ_S2 ;忙,循环检测

MOV AL,待输出数据 ;不忙

OUT PORT_OUT,AL ;输出数据

LOOP READ_S2 ;未传送完,循环

…;已传送完

2015年5月18日星期一8时41分37秒 39

2) 条件传送

例如

外设状态端口地址为3FBH,第5位(bit5)为状态标志BUSY(=1忙,=0准备好)

外设数据端口地址为3F8H,写入数据会使状态标志置1 ;外设把数据读走后又把它置0。

试画出其电路图。(电路图下页)

2015年5月18日星期一8时41分37秒 40

程序段如何编写?

D5

D7-D0

A9|

A3

≥1

&

A15|

A10

≥1

WR

D7-D0

3F8H

外设

D7

D6

D5

D4

D3

D2

D1

D0

BUSY

G

Q7

Q6

Q5

Q4

Q3

Q2

Q1

Q0

状态端口

G1

G2A

G2B

CBA

A2

A1

A0

74LS138

Y0

≥1

RD

Y3

OE

74LS 374

CLK

Q

Q

DS

STROBE

3FBH

M/IO

M/IO

图 查询式输出举例

2015年5月18日星期一8时41分38秒 41

2. 中断方式

多个外设,如何利用查询方式实现输入/输出呢?采用轮流查询法对各个外设依次进行查询,

并进行信息交换。缺点查询式数据传送,CPU会花费许多时间去等待数据或外设准备就绪,效率很低。无论无条件或者条件传送,都不能发现和处理预先无法估计的错误和异常情况。

例如,若一个操作员每秒可从键盘输入5个字符,平均每个字符占200,000μs,而计算机只要用10μs就能从键盘读入1个字符,这样就有999,950μs花在检测键盘状态和等待上,即99.99%的时间因等待而浪费了。

2015年5月18日星期一8时41分38秒 42

2. 中断方式

采用中断方式后,CPU平时可以执行主程序。只有当输入设备将数据准备好了,或者输出端口的数据缓冲器已空时,才向CPU发中断请求。

CPU响应中断后,暂停执行当前的程序,转去执行管理外设的中断服务程序。在中断服务程序中,用输入或输出指令在CPU和外设之间进行一次数据交换。等输入或输出操作完成之后,CPU又回去执行原来的程序。

2015年5月18日星期一8时41分38秒 43

2. 中断方式

与条件传送方式比较:CPU无需循环查询外设状态,而是外部设备在

需要进行数据传送时才中断CPU正在进行的工作,让CPU来为其服务。

即CPU在没有外设请求时可以去做更重要的事情,有请求时才去传输数据,从而大大提高CPU的利用率。

优点:CPU效率高,实时性好,速度快。缺点:程序编制较为复杂。

有关中断的概念,将在第8章中详细介绍。

2015年5月18日星期一8时41分38秒 44

3. DMA方式

前面两种I/O方式都需要CPU作为中介:

外设 CPU 内存

两个含义:

1)软件:外设与内存之间的数据传送是通过CPU执行程序来完成的(PIO方式);

2)硬件:I/O接口和存储器的读写控制信号、地址信号都是由CPU发出的(总线由CPU控制)。

缺点:程序的执行速度限定了传送的最大速度(约为几十KB/秒),故一般适合于少量的数据传送。

解决:DMA。

2015年5月18日星期一8时41分38秒 45

3. DMA方式

1)DMA方式的提出

当CPU与高速I/O设备交换数据,或者与外设进行成组数据交换时,中断方式仍显得太慢。

DMA(Direct Memory Access)传送方式,也就是直接存储器存取方式,可以在不受CPU干预的情况下,实现存储器与外设间的高速交换数据。

外设 内存优点:数据传输由DMA硬件来控制,数据直接在内存和外设之间交换,可以达到很高的传输速率。

2015年5月18日星期一8时41分38秒 46

3. DMA方式

DMA方式也要利用系统的数据总线、地址总线和控制

总线来传送数据。

平时总线由CPU管理,当外设需用DMA方式传送数据

时,可请求CPU让出总线控制权,用专用硬件接口电路

(DMA控制器)来取代CPU,临时接管总线,控制外设

和存储器之间直接进行成批、高速的数据传送,不用

CPU干预。

DMA控制器功能:能给出访问内存所需的地址信息,

并能自动修改地址指针;能设定和修改传送的字节数,

还能向存储器和外设发出相应的读/写控制信号;DMA

传送结束后,能释放总线,把总线控制权交还给CPU。

2015年5月18日星期一8时41分38秒 47

3. DMA方式

DMA传送原理示意图①

系统总线

CPU DMAC

存储器

外设接口

AE

N

IOW

ME

MW

ME

MR

IOR

ME

MW

ME

MR

IOW

IOR

AE

N

HOLD

HLDA

DREQ

DACK

③ ④

AE

N

IOW

IOR

ME

MW

ME

MR

DMA步骤:①外设发出DMA请求DREQ;② DMAC向CPU申请总线HOLD;③ CPU完成当前总线周期后响应,发HLDA,并释放总线控制权;④ DMAC得到总线控制权,并发出DMA响应信号DACK;⑤由DMAC发出各种控制信号,控制外设与存储器之间的数据传送;⑥数据传送完后,DMAC撤销HOLD信号;⑦ CPU释放HLDA信号,并重新控制总线。

× ×

2015年5月18日星期一8时41分39秒 48

3. DMA方式

DMA的三种传输方式:连续传送(块传送)

DMAC申请到总线后,将一块数据传送完后才释放总线,而不管中间DREQ是否有效。

单次传送(每次传送一个字节)

每个DMA周期只传送一个字节就立即释放总线。

按需传送(猝发传送)

只要I/O接口的数据缓冲可用,就进行传送。

(注:I/O接口需要有一定大小的FIFO缓冲)

2015年5月18日星期一8时41分39秒 49

3. DMA方式

Y

N

允许DMA

DMA请求?

DMAC请求总线

CPU响应, DMAC获总线控制权

DMA传送一个字节

块结束?

地址增量,计数器减量

DMAC释放总线

Y

DMA数据块传送

N

2015年5月18日星期一8时41分39秒 50

3. DMA方式

每次传送一个字节

N

Y

N

允许DMA

DMAC请求总线

CPU响应, DMAC获总线控制权

DMA传送一个数据

块结束?

释放总线至少一个总线周期

地址增量,计数器减量

DMAC释放总线

Y

测试I/O的DREQ DMA请求?

2015年5月18日星期一8时41分39秒 51

3. DMA方式

按需传送N

Y

CPU响应, DMAC获总线控制权

DMA传送一个字节

块结束?

测试I/O的DREQ 有效?

地址增量,计数器减量

释放总线,请求中断无效,释放总线

允许DMA

DMA请求?

DMAC请求总线

Y

N

Y

N

2015年5月18日星期一8时41分39秒 52

3. DMA方式

一个总线周期

T

DMAC控制总线,共传送n个数据

DMA1 DMA2 DMAn

CPU重新控制总线CPU对总线控制

连续传送

T

DMA共传送n个数据

DMA1 DMA2 DMAn

单次传送

DMA3

T按需传送

DMA传送k个数据 DMA传送n-k个数据

FIFO可用 FIFO满 FIFO可用 FIFO满

图例:

DMA传输方式示意图

2015年5月18日星期一8时41分40秒 53

2) DMA控制器的连线和操作

如图6.7,设外设为磁盘驱动器,在DMA控制器8237A控制下,可实现它与内存间的DMA数据传输。CPU与8237A分时使用地址、数据和控制总线。图中3个开关打在上方表示CPU控制总线,下方为8237A控制系统总线。

图 6.7

2015年5月18日星期一8时41分40秒 54

用DMA方式读磁盘的过程

每个时钟周期结束后,CPU都检测HOLD脚,看是否有DMA请求。若有,便中止正在执行的程序,进入DMA周期。

(1)系统启动时开关打向上方,总线由CPU控制。DMA传输前,对DMA控制器初始化编程,设定要传送的字节数和内存块起始地址,选定DMA通道和所用的传送方式等。

(2)CPU向磁盘控制器发读盘命令,由磁盘控制器找到要读取的数据位置,并开始读出数据。

2015年5月18日星期一8时41分40秒 55

(3)磁盘准备好1个字节后,就向8237A发DMA请求信号DREQ。如通道没被屏蔽,8237A就送保持请求信号HRQ到CPU的HOLD脚。CPU完成当前的总线操作后,就中止程序的运行,将总线浮空,并发回保持响应信号HLDA给8237A;8237A送出控制信号,使3个开关打向下方,让总线和8237A相连,而与CPU脱开,8237A接管总线。

图 6.7

2015年5月18日星期一8时41分40秒 56

(4)8237A获得总线控制权后,便通过地址总线向存储器发送要写入的第一个数据的地址信号。随后又向磁盘发DMA确认信号DACK,通知磁盘准备好要输出的字节。

(5)8237A使控制总线上的I/O读信号和存储器写信号有效。使磁盘能向数据总线输出数据,使所寻址的存储单元能接受从数据总线上写入的数据。

图 6.7

2015年5月18日星期一8时41分40秒 57

(6)完成1字节传送后,DMA控制器自动修改地址,指向下个字节,并将字计数器减1,之后再重复上述传送过程。这批数据传送完毕,DMA过程结束。

(7)传送结束后,DMA控制器撤销保持信号HRQ,并释放总线。3个开关又拨回上方,总线与CPU相连,CPU恢复对它的控制权,继续执行后续程序。

图 6.7

2015年5月18日星期一8时41分40秒 58

课堂作业

一、8086一般采用I/O单独编址,请问能否采用存储器映像寻址方式实现I/O端口的编址?为什么?

二、系统中有八个开关,当其中一路开关闭合时,相应的开关状态传送给CPU,由CPU对状态取反后输出控制发光二极管点亮,请给出接口电路原理图。

(提示:

1.开关状态采用无条件传送方式,LED发光在CPU读取开关状态之前一直保持原状态。

2.端口地址自设。)

2015年5月18日星期一8时41分40秒 59

6.1.4 PC机的I/O地址分配1. PC/XT机的I/O端口分配

PC机中,中断控制、DMA控制、动态RAM刷新、系统配置识别、

键盘代码读取及扬声器发声等都是由可编程I/O接口芯片控制的。

接口芯片包括:中断控制器8259A、DMA控制器8237A-5、并行

接口芯片8255A-5、计数器/定时器8253-5等,都要使用I/O端口地

址。

除键盘、显示器、打印机、磁盘驱动器等常规外设,在系统板上

还有8个I/O扩展槽,可在槽中插入I/O适配器,即扩展卡,提供数

据采集卡、通信卡等其它外设接口,它们也需用I/O端口地址。系

统统一安排这些端口的地址。

2015年5月18日星期一8时41分41秒 60

端口地址分配

PC/XT机系统中,使用低10位地址(A9~A0)寻址I/O端口,I/O地址空间占1K。当A9=0时,寻址系统板上的512个端口;当A9=1时,寻址I/O通道上的512个端口。

系统板和I/O通道上的I/O端口地址分配见表6.1。表中,系统板地址含两部分,前面是译码电路生成的地址,而括号( )中是I/O接口芯片实际使用的地址。

2015年5月18日星期一8时41分41秒 61

2015年5月18日星期一8时41分41秒 62

系统板上I/O端口译码电路

各接口芯片的片选信号由74LS138译码电路产生,在CPU控制系统总线时,#AEN'=1,这时若A9A8=00,则译码器选通,对输入A7A6A5译码,在 #Y0-#Y7中产生一个低电平输出信号,接到相应接口芯片的#CS端或控制端。

图6.8

2015年5月18日星期一8时41分41秒 63

电路在I/O读写命令控制下工作。I/O地址的低4位A3-A0用作控制芯片内部寄存器的选择信号,这样每个译码输出端都包含24=16个端口地址。

有些接口芯片内部有16个寄存器,例如8237ADMA控制器,使用00-0FH共16个端口地址。

多数接口芯片内部没有16个寄存器,如8259A只有2个寄存器,8253-5和8255A各有4个寄存器,较高位地址可以不用,仅用A1和A0等低位地址选择端口。

8259A占用的端口地址范围为020H-03FH,但实际只用到最低2个端口地址20H和21H,而NMI屏蔽寄存器仅用了1个I/O地址A0H。

2015年5月18日星期一8时41分41秒 64

2. PC/AT机端口地址

以80286为CPU的PC /AT机中,也只使用低10位地址进行I/O端口地址的译码。

地址范围000~3FFH, 但使用两片8237A-5 DMA控制器, 两片8259A中断控制器,定时器使用8254-2。

PC/AT及其兼容机的I/O端口地址分配如表6.2。

2015年5月18日星期一8时41分42秒 65

6.2 8255A的工作原理6.2.1 8255A的结构和功能

6.2.2 8255A的控制字

6.2.3 8255A的工作方式和C口状态字

2015年5月18日星期一8时41分42秒 66

6.2 8255A的工作原理

8255A是一种通用可编程并行 I/O接口芯片(Programmable Peripherial Interface,PPI)。

它是Intel系列CPU的配套电路,也可用于其它微处理器系统中。

通过编程,它可工作于3种不同的数据传输方式。

2015年5月18日星期一8时41分42秒 67

6.2.1 8255A的结构和功能

WR

D0D1D2D3D4D5D6D7VCCPB7

RDCSGNDA1A0

PA4PA5PA6PA7

PB5PB6

PB4PB3

RESET

PB1PB2

PB0PC3PC2PC1PC0PC4PC5PC6PC7

PA3PA2PA1PA0

5

1

10

15

35

40

30

25

21

引脚

连接系统端的主要引线:

D0~D7:数据#CS:片选#RD:读#WR:写A0,A1:端口选择RESET:复位信号,接系统总线的RESET

A1 A0 选择

0 0 端口A

0 1 端口B

1 0 端口C

1 1 控制寄存器

2015年5月18日星期一8时41分42秒 68

WR

D0D1D2D3D4D5D6D7VCCPB7

RDCSGNDA1A0

PA4PA5PA6PA7

PB5PB6

PB4PB3

RESET

PB1PB2

PB0PC3PC2PC1PC0PC4PC5PC6PC7

PA3PA2PA1PA0

5

1

10

15

35

40

30

25

21

连接外设端的引脚:

PA0~PA7

PB0~PB7

PC0~PC7

分别对应A、B、C三个

8位输入/输出端口

引脚

2015年5月18日星期一8时41分42秒 69

内部包含:

数据端口A、B、C。其中,C口分成C口上半部(C高)和C口下半部分(C低)。

A组和B组控制逻辑

数据总线缓冲器

读/写控制逻辑。

内部结构

2015年5月18日星期一8时41分42秒 70

1.数据端口A、B和C端口A包含1个8位的数据输出锁存器/缓冲器,1个8位的数据输入锁存器。A口作输入或输出时数据均能锁存。端口B包含1个8位的数据输入/输出锁存器/缓冲器,1个8位的数据输入缓冲器。端口C

包含1个8位的数据输出锁存器/缓冲器,1个8位的数据输入缓冲器,无输入锁存功能,分成两个4位端口时,每个端口有1个4位的输出锁存器。C口还可配合A口和B口工作,用来产生A口和B口的输出控制信号、输入到A口和B口的端口状态信号。

2015年5月18日星期一8时41分42秒 71

2. A组和B组控制逻辑

A组:管理A口和 C口高,通过 PA7~PA0以及PC7~PC4引脚与外部联络。

B组:管理 B口和 C口低,通过 PB7~PB0以及PC3~PC0引脚与外部联络。

内部控制寄存器,能接收CPU送来的命令字,决定A组和B组的工作方式,或对C口的每1位执行置位/复位操作。

2015年5月18日星期一8时41分42秒 72

3. 数据总线缓冲器

双向三态的8位缓冲器,用作8255A和系统数据总线间的接口。

通过这个缓冲器和8位数据总线D7~D0,接收CPU送来的数据信息或控制字,外设传送给CPU的数据或状态信息,也要通过数据总线缓冲器和D7~D0送给CPU。

2015年5月18日星期一8时41分43秒 73

4. 读/写控制逻辑有关信号:

RESET,系统复位。高电平时使控制字寄存器清0,各端口工作于输

入方式。

#CS,片选。译码电路产生,低电平时芯片才选中。

#RD,读。有效时,可读取8255A的数据或状态信息。

#WR ,写。有效时,可向8255A写入数据或控制字。

A1A0,端口选择。

A1A0=00,A口; A1A0=01,B口;

A1A0=10,C口; A1A0=11,控制口。

在8位系统中,常将A1A0与地址总线A1A0相连。若8255A端口基地址

为60H,则A口、B口、C口和控制口分别为60H,61H,62H和63H。

2015年5月18日星期一8时41分43秒 74

#CS=0,8255A可进行读/写操作。

#RD=0,可从A口、B口、C口读出数据。#WR=0,可向这3个端口写入数据。口地址由A1A0选择,

但当A1A0=11时,只能向控制口写入控制字,否则为非法操作。

#RD和#WR不能同时为0。

2015年5月18日星期一8时41分43秒 75

设计电路时要注意:

在16位数据总线的8086系统中,可将地址总线的A2A1连

到8255A的A1A0端。若它的数据线D7~D0接在CPU数据总

线的低8位上,则要用偶端口地址来寻址8255A;而当

D7~D0接在数据总线的高8位上时,要用奇地址口。

例如:若8255A的基地址为F0H,则

A2A1=00,选A口,即口地址F0H;

A2A1=01,选B口,口地址F2H;

A2A1=10。选C口,口地址F4H;

A2A1=11,选控制字寄存器,口地址F6H。

2015年5月18日星期一8时41分43秒 76

6.2.2 8255A的控制字

方式选择控制字(D7=1):

定义端口的工作方式

端口C的复位、置位控制字(D7=0):

控制端口C的各位状态或或用于设置INTE

位(方式1,2)

均写向控制字寄存器(A1A0=11)。

2015年5月18日星期一8时41分43秒 77

6.2.2 8255A的控制字

8255A工作方式

基本输入/输出方式(方式0)(A、B、C口)

选通输入输出工作方式(方式1)(A、B口)

双向总线方式(方式2)(仅A口)

2015年5月18日星期一8时41分43秒 78

1.方式选择控制字

A1 A0 D7 D6 D5 D4 D3 D2 D1 D01 1 1 A口方式 A I/O C高 B方式 B I/O C低

A口方式D6 D50 0方式00 1方式11 ×方式2

A I/O1输入0输出

C高(4位)1输入0输出

B方式0方式01方式1

B I/O1输入0输出

C低(4位)1输入0输出

2015年5月18日星期一8时41分43秒 79

2. 置位/复位控制字可使C口任一引脚的输出单独置1或清0,格式:

例如:设8255A口地址为60H~63H,PC5平时为低电平,要求从PC5输出

一个正脉冲,程序段:

MOV AL,00001011BOUT 63H,AL ;置PC5为高电平MOV AL,00001010BOUT 63H,AL ;置PC5为低电平

A1 A0 D7 D6 D5 D4 D3 D2 D1 D01 1 0 × × × 位 选 择 位控

位选择D3 D2 D10 0 0 PC00 0 1 PC1...1 1 1 PC7

位控0复位1置位

2015年5月18日星期一8时41分44秒 80

8255A可工作于3种方式:

方式0—基本输入输出方式

方式1—选通输入输出方式

方式2—双向总线I/O方式

2015年5月18日星期一8时41分44秒 81

1. 方式0基本输入输出(Basic Input/Output)方式,适用于不

要用应答信号的简单I/O。

8255A相当于三个独立的8位简单接口。

各端口既可设置为输入口,也可设置为输出口,但不能同时

实现输入及输出。

C端口可以是一个8位的简单接口,也可以分为两个独立的4

位端口。

设置为输出口时有锁存能力,设置为输入口时无锁存能力。

2015年5月18日星期一8时41分44秒 82

图6.13 各端口均工作于方式0时的控制字

在方式0下,A口、C高、B口、C低可分别设置为输入、输出,故构成16种不同组态。

例如,设8255A的控制字寄存器的口地址为63H,若要求A口和B口工作于方式0,

A口、B口和C口高4位作输入,C口低4位为输出,可用下列指令来设置:

MOV AL,10011010B

OUT 63H,AL

2015年5月18日星期一8时41分44秒 83

工作方式0时序

数据输入 数据有效

数据输出 数据有效

数据有效

数据有效

至少300ns

输入时序

输出时序

输出给外设的数据进行锁存

2015年5月18日星期一8时41分44秒 84

方式0的应用

用于连接简单外设。

适用于:

无条件输入输出方式(同步)

8255A的三个数据端口可以实现三路数据传输

查询输入输出方式

比如,A、B口作为8位数据的输入或输出口,C口的

高/低4位分别定义为A、B口的控制位和状态位。

2015年5月18日星期一8时41分44秒 85

2. 方式1选通输入/输出(Strobe Input/Output)方式

分为:选通输入、选通输出

分3种情况:

1)选通输入方式

2)选通输出方式

3)选通I/O方式组合

利用一组选通控制信号控制A端口和B端口的数据输入输出。

A、B口作输入或输出口,C口的部分位固定用作A、B口的选通控制信号。

A口、B口在作为输入和输出时的选通信号不同。

该方式下,输入、输出数据均可锁存。

2015年5月18日星期一8时41分44秒 86

1)选通输入方式

A口和B口都工作于选通输入方式时 ,PC0-PC2, PC3-PC5用作联络信号,PC6,7 还可作输入输出用。

A口为输入, PC3-5作联络信号。控制字的D3位为C高I/O:D3=1,PC6,7为输入D3=0,PC6,7为输出

B口为输入,PC0-2作联络信号。

2015年5月18日星期一8时41分45秒 87

选通输入联络信号

#STB(Strobe),选通信号,输入信号

低电平时,将外部输入数据通过PA7PA0(A口)或PB7PB0(B

口)打入所选端口的输入缓冲器中。

#STBA:A口选通,从PC4引入;

#STBB:B口选通,从PC2引入。

IBF(Input Buffer Full),输入缓冲器满信号,输

高电平时,表示输入设备送来的数据已送到输入缓冲器中,

通知外设不要送新数据来。

IBFA:A口缓冲器满,从PC5输出;

IBFB:B口缓冲器满,从PC1输出。

2015年5月18日星期一8时41分45秒 88

选通输入联络信号

INTE(Interrupt Enable),内置的中断允许信号,

无引脚。

在A组和B组控制逻辑中,设有中断请求触发器INTE A、

INTE B。只有用软件才能使其置1或清0。

用置位复位字使PC4置1时,允许A口中断;使PC2置1时,

允许B口中断。

2015年5月18日星期一8时41分45秒 89

选通输入联络信号

INTR(Interrupt Request),是8255A向CPU发

中断请求的引脚信号,输出。

只有当#STB、IBF、INTR都高时,才能将INTR置为有效

高电平。表示选通信号已结束,缓冲器中已有数据,中断是

允许的,8255A可向CPU发中断请求信号INTR,要求CPU

读取外设送到缓冲器中的数据。

2015年5月18日星期一8时41分45秒 90

方式1选通输入时序①外设把1个数据送到A口或B口后,向8255A发选通信号,数据被8255A锁存。

②随后IBF变高,指示输入缓冲器已满,外设不要送新数据来。

③#STB回复高电平后, 若IBF和INTE也同时为高,INTR就会变高, 请求中断,CPU响应中断后执行IN指令读取数据(#RD变低)。

④ #RD有效后,经tRIT时间INTR变低,清除中断。

⑤ 读信号结束,数据读入累加器; 之后IBF变低,缓冲器已空,外设可再送新的数据来。

A:PC4

B:PC2

2015年5月18日星期一8时41分45秒 91

2)选通输出方式

A口输出

PC3,PC6和PC7作A口的联络信号

B口输出

PC0,PC1和PC2作B口的联络信号

PC4、PC5可作输入或输出

D3=1,输入

D3=0,输出

2015年5月18日星期一8时41分45秒 92

选通输出联络信号

#OBF(Output Buffer Full) ,输出缓冲器满,输出#OBF=0,表示数据已写到输出口,并已出现在PA和PB线上,通知外设取走。PC7用作#OBFA

PC1用作#OBFB

#ACK(Acknowledge) ,外设回答信号,输入#ACK=0,CPU输出到A口或B口的数据已被外设接收。PC6用作#ACKA

PC2用作#ACKB

2015年5月18日星期一8时41分46秒 93

选通输出联络信号

INTE,内置中断允许信号

INTE=1,端口允许中断,置0时被屏蔽。

INTE A由PC6控制,INTE B由PC2控制,它们由置位/复

位字进行设置。

INTR,中断请求信号,输出

输出设备收到CPU输出的数据后,INTR变高,向CPU提

出中断请求,要求再输出1个数据到外设。

当#ACK、#OBF、INTE均=1时,才能使INTR变高。

INTRA从 PC3引脚输出,INTRB从PC0输出。

2015年5月18日星期一8时41分46秒 94

方式1选通输出时序①CPU响应中断后,执行OUT指令输出数据,#WR变低

②经tWIT时间后,清除中断请求信号,使INTR=0

③#WR的后沿使#OBF=0 , 通知外设从输出缓冲器中取走数据

④外设收到数据后,发回应答信号,#ACK=0

⑤应答后再经tAOB,#OBF无效,指示缓冲器已空

⑥#ACK回到高电平后,经tAIT时间,INTR变高,向CPU发中断请求,让CPU再送一个新数据过来

2015年5月18日星期一8时41分46秒 95

A口输入,B口输出 A口输出,B口输入PC0~PC5作控制线 PC0~PC3和PC6、PC7作控制

D3=1, PC6、7 为输入 D3=1,PC4、5为输入

D3=0, PC6、7 为输出 D3=0,PC4、5 为输出

3)选通输入/输出方式组合A口、B口也可单独定义

2015年5月18日星期一8时41分46秒 96

方式1的应用

主要用于中断控制方式下的输入输出。

C口除部分位用作选通信号外,其余位可工作在方式0下,作

为输入或输出线。

特别是A、B均为方式1时使用了C口的6条线,余下(高四

位中的)二条线可作为单独的(方式0)输入输出线,用程

序指定其数据传送方向。

2015年5月18日星期一8时41分46秒 97

如何理解方式1?

1、和方式0相比,最重要的差别:A口和B口可分别用方式1进行输入和输出传输,但要利用C口提供选通和应答信号,且这些信号与C中的数位间为固定关系;

2、采用方式0,进行查询方式工作,需要自行定义状态信号;

3、方式1,因提供中断申请信号,可提高数据传输效率。

2015年5月18日星期一8时41分46秒 98

3. 方式2

严格地说是选通双向总线方式。

双向方式——既是输入口,又是输出口。

双向数据都能被锁存。

利用C口的5条线提供传输联络信号。

类似于A口方式1下输入和输出的组合。

只有A口可工作在方式2下。

INTE1为PC6,INTE2为PC4。

2015年5月18日星期一8时41分46秒 99

PC3~PC7作A口的联络信号:

输入:#STBA,#ACKA

输出:#OBFA, IBFA,INTRA

原理与方式1的A口选通输入、A口选通输出类同

2015年5月18日星期一8时41分47秒 100

方式2的应用

可用于中断控制输入输出方式。

当A口工作于方式2时,B口可工作于方式1(此时C口的剩余位

都用作B口选通控制线);B口也可工作于方式0(此时C口的

剩余位也只能用作方式0下的输入输出线)。

方式2的数据输出过程与方式1不同:

数据输出时8255A不是在#OBF有效时向外设输出数据,而是

在外设提供响应信号#ACK时才送出数据。

2015年5月18日星期一8时41分47秒 101

4. C口状态字

方式1和2时,C口用作联络信号。用IN指令读取C口内容可检测外设状态,这样,就可采用查询方式而不用中断方式实现数据交换。

2015年5月18日星期一8时41分47秒 102

4. C口状态字1)方式1(输入或输出)状态字

D7~D3位:A组状态字

D2~D0位为B组状态字。

2015年5月18日星期一8时41分47秒 103

2)方式2状态字

D7~D3位:A组状态字

D2~D0位:

当B口为方式1,B口状态字

当B口为方式0,用作I/O,不是状态位。

2015年5月18日星期一8时41分47秒 104

6.3 8255A的应用举例

芯片与系统(CPU、外设)的连接(电路设计)

相应的控制程序

芯片的初始化

2015年5月18日星期一8时41分47秒 105

6.3 8255A的应用举例

举例说明8255A在开关电路、键盘及PC/XT机中的应用。

此外,8255A还可用于扬声器和CRT控制接口电路、A/D和D/A接口电路等许多场合。

由于选通方式比较复杂,这里仅介绍方式0的几个应用实例。

2015年5月18日星期一8时41分47秒 106

6.3.1 基本输入输出应用举例

在工业控制等实际应用场合,经常需要检测开关状态,并用LED等显示出来。在交通灯控制方面,也有类似的应用。

例1 某检测系统中有8个开关K7~K0,要求不断检测它们的通断状态,并显示在发光二极管LED7~LED0上。开关断开,相应的LED点亮;开关合上,LED熄灭。试设计硬件电路,并编写有关的控制程序。

2015年5月18日星期一8时41分47秒 107

1)硬件电路设计

用8086 CPU、8255A和74LS138译码器等芯片及开关、显示器等构

成如下硬件电路,来实现上述功能。

图6.21

0F0H

0F0H~0F6H

2015年5月18日星期一8时41分48秒 108

A口输入,PA7~PA0接8个开关K7~K0,B口输出,PB7~PB0

接显示器LED7~LED0。

8255A的#RD、#WR和RESET脚接CPU相应引脚,D7~D0与

低8位数据线D7~D0相连,8255A的4个口地址都应为偶地址,

A0总为0,用A2A1来选择4个端口。

当A7A6A5=111,A4A3A0=100时,译码器输出#Y4=0,

选中8255A。

4个端口地址为F0H、F2H、F4H和F6H,对应于8255A

的A口、B口、C口、控制口。

2015年5月18日星期一8时41分48秒 109

2)控制程序段设计

确定方式选择控制字

A口方式0输入,B口方式0输出,C口未用,相应位清0,

控制字=10010000。

控制字写入控制口F6H

将开关状态从PA引脚读入AL。若开关合上,AL中的相应

位为0,断开则为1。

把AL中的内容从PB引脚输出

0-LED熄灭,表示相应的开关合上;

1-LED点亮,表示相应的开关断开。

不断循环,反复检测开关状态并显示

计算机速度很快,每次操作后要延迟一定时间。

2015年5月18日星期一8时41分48秒 110

编程控制;初始化8255A芯片,向0F6H端口写方式选择控制字

MOV DX,0F6H ;控制字寄存器

MOV AL,10010000B ;控制字,

OUT DX,AL ;写入控制字

;初始化程序结束

;以下为控制程序

TEST_IT:

MOV DX,0F0H ;指向A口

IN AL,DX ;读入开关状态

MOV DX,0F2H ;指向B口

OUT DX,AL ;B口控制LED

CALL DELAY_20S ;调延时20s子程序

JMP TEST_IT ;延时20s再检测

DELAY_20S: … ;延时20s子程序

2015年5月18日星期一8时41分48秒 111

例2 读开关并用七段LED显示器显示开关状态

A口接4个开关K3~K0,PB的7位输出经74LS04反相驱动后,接到1个七段LED显示器上。

4个开关,共有16种状态,对应于16进制数字0~F。

2015年5月18日星期一8时41分48秒 112

8255A的A口工作于方式0,输入;B口方式0,输出。七段LED共阴极接法。PB0~PB6接LED的a~g段,当PBi=0时,经反相后使显示器正极为高电平,相应段点亮;PBi=1时,相应段熄灭。

图6.22

2015年5月18日星期一8时41分49秒 113

因为是反相驱动,故点亮的段为“0”

如要显示数字0,g段应熄灭,其余段点亮,即向B口输出代码0100 0000B=40H。最高位不用,清0(也可用作小数点);

如要显示数字1,则点亮b、c段,其余段熄灭,代码为01111001B=79H。

七段LED显示原理

显示数字0 显示数字1

2015年5月18日星期一8时41分49秒 114

符号 形状 7段码.gfedcba 符号 形状 7段码

.gfedcba

0 0100 0000 8 0000 0000

1 0111 1001 9 0001 1000

2 0010 0100 A 1000 0000

3 0011 0000 B 0000 0011

4 0001 1001 C 0100 0011

5 0001 0010 D 0010 0001

6 0000 0010 E 0000 0110

7 0111 1000 F 0000 1110

七段LED显示原理

2015年5月18日星期一8时41分49秒 115

DATA SEGMENT

TABLE DB 40H,79H,24H,30H,19H,12H,02H,78H

DB 00H,18H,80H,03H,43H,21H,06H,0EH

;0~F的七段代码编码表定义

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

… ;数据段初始化,本处省略

MOV AL,90H ; A口方式0输入, B口方式0输出

OUT 63H,AL ;输出控制字

IN_PA: IN AL,60H ;读A口

AND AL,0FH ;取低4位

MOV BX,OFFSET TABLE ;BX←七段代码表首地址

XLAT ;查表,AL←(BX+AL)

OUT 61H,AL ;输出到B口

CALL DELAY ;调用延时程序

JMP IN_PA ;继续读开关,显示

DELAY: … ;延时

MOV AH,4CH

INT 21H ;返回DOS

CODE ENDS

2015年5月18日星期一8时41分50秒 116

6.3.2 键盘接口

构成键盘的开关有机械式、薄膜式、电容式和霍尔效应式等,PC上的键盘多用机械式开关。

非编码键盘结构:简单按键的线性键盘和矩阵键盘。

为减少输入线,开关被排列成行、列矩阵,构成矩阵键盘。

检测是否有键压下前,先要确定键是否都松开。

检测到有压键后,应消抖动 (Debance),即延长20ms,再查看该键是否仍被压下。

2015年5月18日星期一8时41分50秒 117

• 4行×4列键盘矩阵

• PA3~0输出到4行线

• 4行线输入到PB7~4

• 4列线输入到PB3~0

•键未压下的列=1

•压键的行列会接通

•若置压键行为0,

则对应列也为0。图6.23

电路连接形式和特点:

2015年5月18日星期一8时41分50秒 118

1.键盘(行)扫描

1)是否所有键均松开?向所有行输出0再读列,应都为1;表明所有键释放;

2)是,查有键压下?向每行输出0后,读,列为0;

3)有键压下,延时消抖动;4)分别向每行输出0,读取列值。根据输出0和读得0的位置,获得该键的代码。图6.23

2015年5月18日星期一8时41分50秒 119

键代码形成:

键0在3行3列,压下后从B口可读得D7=0和D3=0,其余位=1,故其编码为01110111B= 77H;

键6在2行1列,压下时D6=0、D1=0,其余位=1,故其编码为10111101B=BDH。

然后查表确定压下的键。

键扫描的程序见课本(pp225-227)。

2015年5月18日星期一8时41分50秒 120

2.行列反转法,读取按键

原理:对于矩阵键盘,首先,将行线作为输出线,列线作为输入线,行线输出全“0”信号,读入列线的值,那么在闭合键所在的列线上的值必为0;

然后从列线输出全“0”信号,再读取行线的输入值,闭合键所在的行线值必为 0。

这样,当一个键被按下时,必定可读到一对唯一的行列值。

再由这一对行列值可以求出闭合键所在的位置。

2015年5月18日星期一8时41分50秒 121

课堂作业

4×4矩阵键盘,采用行列反转法读取键值,请设计8255与矩阵键盘的接口电路,给出读取键值软件的详细流程。

2015年5月18日星期一8时41分50秒 122

6.3.3 8255A在PC/XT机中的应用

PC/XT机中用8255A-5(功能与8255A同)为接口芯片,来读取键盘输入的扫描码和系统配置DIP开关的设置状态,同时还可以控制扬声器发声及奇偶校验电路的工作。

2015年5月18日星期一8时41分50秒 123

1. 8255A-5在PC/XT机中的连接

图6.24

A,B,C口均为方式0

左侧为控制信号

口地址:

A口-60H

B口-61H

C口-62H

控制口-63H

上电时A口输出,检测部件标志,正常为输入,读取键盘扫描码

B口输出控制信号

C口读取系统内部状态。

2015年5月18日星期一8时41分51秒 124

PB输出控制信号:PB0 输出扬声器发声控制信号到8253的GATE2端,PB0=1,允许8253计数器2产生音调信号。

PB1 输出控制扬声器发声信号。PB1=1允许8253输出的音调信号加到扬声器驱动电路。

PB2 保留,可输出键盘检测数据 KBD DATA。

PB3读入配置DIP开关状态。

PB3=1封锁U41,开关高4位SW8~5读入PC3~0;

PB3=0, U41选通,SW4~1读入PC3~0。开关合上时状态为0,断开为1。

PB4=0允许系统板RAM奇偶校验电路工作。

PB5=0允许I/O扩展板RAM奇偶校验电路工作。

PB6和PB7 输出到键盘接口电路。

2015年5月18日星期一8时41分51秒 125

PC读取系统状态:PC3~ PC0 配置开关DIP的设置状态。

PC4 加到扬声器上的驱动信号SPK。

PC5 扬声器的音调信号状态T/C 2OUT,即从8253-5的OUT2输出的信号。

PC6 I/O通道奇偶校验结果I/O CHCK。

若为1则产生NMI中断请求。

只有PB5=0才允许送出I/O CHCK信号。

PC7系统板奇偶校验结果PCK。

若为1便产生NMI中断请求。

只有PB4=0才允许发出PCK信号。

2015年5月18日星期一8时41分51秒 126

2. 端口编程

加电时系统处于自检方式,8255A-5的3个端口均置为方式0,A口和B口输出,C口输入,方式选择字应置成10001001B,即

MOV AL, 10001001B

OUT 63H,AL

正常工作时,再置A口为输入,B口和C口同上,方式选择字应为10011001B,即

MOV AL,10011001B

OUT 63H,AL

2015年5月18日星期一8时41分51秒 127

对B口编程可实现不同的控制功能

例如,禁止系统板和I/O扩展板的RAM奇偶校验的程序段:

IN AL,61H ;读入B口状态

OR AL,00110000B ;PB4PB5置1, 禁止奇偶校验

OUT 61H,AL ;将新状态字送回B口

问题:B口已被设为输出方式,为何能用IN指令读取B口的状态?

答案:因为B口的结构特殊。B口既有1个8位输入缓冲器,还有1个I/O锁存器/缓冲器。从PB输出时数据会被锁存在那里,能随时用IN指令读回锁存的输出状态。因B口被编程为输出,因而读到的是锁存数据而不是从外设输入到B口的数据。

2015年5月18日星期一8时41分51秒 128

PC为输入方式,读入各位数值来了解系统状态。例如,检查DIP开关状态的程序段:

IN AL,61H ;读B口状态

AND AL,11110111B ;PB3置0,其余位不变

OUT 61H,AL ;送回B口

IN AL,62H ;读C口状态

AND AL,0FH ;取低4位开关状态

MOV AH,AL ;存入AH

IN AL,61H ;读B口状态

OR AL,00001000B ;PB3置1,其余位不变

OUT 61H,AL ;送回B口

IN AL,62H ;读高4位开关状态进AL低4位

MOV CL,4

ROL AL,CL ;左移4次后送到D7~D4位

AND AL,0F0H ;截取高4位开关量

OR AL,AH ;8位开关状态组合在AL中

2015年5月18日星期一8时41分51秒 129

第6章小结

接口与接口功能

端口的寻址方式

CPU与外设之间数据传送方式

8255A的工作方式

8255A的应用

CPU 接口 外设×

2015年5月18日星期一8时41分51秒 130

本章结束

pp230-231

1、2、5、8、10、11、16