第6章 i/o接口和并行接口 芯片8255a - ustchome.ustc.edu.cn/~ytwang/6.pdf ·...
TRANSCRIPT
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秒 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秒 31
1) 无条件传送方式
最简单的输出口:LED的点亮和熄灭控制。
1个8位锁存器接8个LED显示器,用OUT指令将命令字送到LED,1-点亮,0-熄灭。
可随时改变LED状态。
图6.2
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秒 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秒 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秒 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秒 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秒 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秒 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中