微型计算机原理及应用学习笔记 可编程并行接口
Intel8255A是一种通用的可编程序并行I/O接口芯片,又称“可编程外设接口芯片”PPI(Programmable Peripheral Interface),是为Intel 8080/8085系列微处理器设计的,也可用于其他系列的微机系统。可由程序来改变其功能,通用性强、使用灵活。通过8255A,CPU可直接同外设相连接,是应用最广的并行I/O接口芯片。
一、结构和引脚功能
(一)8255A的内部结构
8255A由4部分组成,其结构框图和引脚安排见图7-7所示。
图7-7 8255A结构框图和引脚安排
(a)结构框图; (b) 引脚安排
1. 数据总线缓冲器
数据总线缓冲器是一个三态8位双向缓冲器,用作8255A同系统数据总线相连时的缓冲部件,CPU通过执行输入/输出指令来实现对缓冲器发送或接收数据。8255A的控制字和状态字也是通过该缓冲器传送的。
2. 三个8位端口PA、PB和PC
8255A有三个8位端口PA、PB和PC,各端口都可由程序设定为各种不同的工作方式。端口A(PA口)有一个8位数据输入锁存器和一个8位数据输出锁存/缓冲器;端口B(PB口)有一个8位数据输入缓冲器和一个8位数据输入/输出、锁存/缓冲器;端口C(PC口)有一个8位数据输入缓冲器和一个8位数据输出锁存/缓冲器。
通常PA口与PB口用作输入/输出的数据端口,PC口用作控制或状态信息的端口。在方式字的控制下,PC口可以分成两个4位的端口,每个端口包含一个4位锁存器,可分别同端口A和端口B配合使用,可以用作控制信号输出,或作为状态信号输入。
3. A组和B组的控制电路
这两组控制电路根据CPU发出的方式选择控制字来控制8255A的工作方式,每个控制组都接收来自读/写控制逻辑的“命令”,接收来自内部数据总线的“控制字”,并向与其相连的端口发出适当的控制信号。
A组控制部件用来控制PA口和PC口的高4位(PC7~PC4);B组控制部件用来控制PB口和PC口的低4位(PC3~PC0)。
4. 读/写控制逻辑
用来管理数据信息、控制字和状态字的传送,它接收来自CPU地址总线的A1、A0和控制总线的有关信号(前一单元fix = v ns = "urn:schemas-microsoft-com:vml" />前一单元ferrelative="t" o:spt="75" coordsize="21600,21600"> 、 、RESET等),向8255A的A、B两组控制部件发送命令。
(二)8255A的引脚功能
8255A采用40条引脚的双列直插式(DIP,Dual Inline package)封装,其引脚信号有:
:片选信号(输入)
:读信号(输入)
:写信号(输入)
A1、A0:片内寄存器选择信号(输入)
D7~D0:与CPU侧连接的数据线(双向)
PA7~PA0:A口外设数据线(双向)
PB7~PB0:B口外设数据线(双向)
PC7~PC0:C口外设数据线(双向)
RESET:复位信号(输入)
控制信号 以及A1、A0的组合可以实现对三个数据口(PA、PB、PC)和控制口(控制寄存器)的读写操作,如表7-1所示。
表7-1 8255A端口功能选择
A1 |
A0 |
|
|
|
输入操作(读) |
0 0 1 |
0 1 0 |
0 0 0 |
1 1 1 |
0 0 0 |
端口A→数据总线 端口B→数据总线 端口C→数据总线 |
输出操作(写) | |||||
0 0 1 1 |
0 1 0 1 |
1 1 1 1 |
0 0 0 0 |
0 0 0 0 |
数据总线→端口A 数据总线→端口B 数据总线→端口C 数据总线→控制字寄存器 |
断开功能(禁止) | |||||
X 1 X |
X 1 X |
X 0 1 |
X 1 1 |
1 0 0 |
数据总线为三态(高阻) 非法状态 数据总线为三态(高阻) |
二、工作方式
(一)方式0——基本输入输出
方式0下,每一个口都作为基本的输入输出口,C口的高4位和低4位以及A口、B口都可以独立地设置为输入口或输出口。4个口的输入输出可以有16种组合方式,且都可以由方式控制字确定。
8255A在方式0工作时,CPU可以采用无条件读写方式与8255A交换数据。如果把C口的两个部分用作控制和状态口,与外设的控制和状态端相连,CPU也可以通过对C口的读写,实现A口与B口的查询方式工作。
基本输入输出下工作时,输出的数据被锁存,而输入数据是不锁存的。
(二)方式1——选通输入输出(应答式输入输出)
方式1下将三个端口分成A、B两组,A、B两个口仍作为数据输入输出口,而C口分成两部分,分别作为A口和B口的联络信号。在8255A中规定的联络信号是三位,两个数据口共用去C口的六位,剩下的两位仍可以作数据位使用。
A、B两个口的工作状态是由CPU写控制字时设定的,一旦方式已定,就把所用C口的联络信号位也确定了。
1. 方式1的输入
A、B两个口都设置为方式1输入时的情况如图7-8(a)所示。由图可见A口所用的三个联络信号占用C口的PC3、PC4、PC5三引脚,而B口则用了PC0、PC1和PC2三个引脚。联络信号的作用如下:
(1) :输入的选通信号,低电平有效。由外设提供,为低电平时,就把输入的数据信号(PA7~PA0或PB7~PB0)送入A端口(或B端口)的数据锁存器。
(2)IBF:输入缓冲器满信号,高电平有效。由8255A输出,有效时,用以通知外部设备输入的数据已写入缓冲器。
(3)INTR:中断请求信号,高电平有效。当外部设备要向CPU传送数据或请求服务时,8255A就用INTR端的高电平向CPU提出中断请求。当 、IBF和INTE都为高电平时,表明数据锁存器内已写入了数据,使INTR成为高电平输出。CPU响应中断,在 控制下从8255A中读取数据时, 的下降沿使INTR复位,它的上升沿又使IBF复位,使外设知道可以进行下一字节输入了,见图7-8(b)。
图7-8 方式1输入
(a)结构图; (b)波形图
(4)INTE:中断允许信号。A端口用PC4位的置/复位控制,B端口用PC2位的置/复位控制。只有当PC4或PC2置“1”时,才允许对应的端口送出中断请求。
PC7、PC6可以用作数据传输,用方式控制字的D3位来设置它的输入/输出。
方式1的输入过程如下(A口):
当外设准备好数据,在送出数据的同时,送出一个选通信号 。8255A的A口数据锁存器在 下降沿控制下将数据锁存。8255A向外设送出高电平的IBF,表示锁存数据已完成,暂时不要再送数据。如果PC4=1(INTEA=1),这时就会使INTR变成高电平输出,向CPU发出中断请求。CPU响应中断,执行IN指令时, 信号的下降沿清除中断请求,而 结束时的上升沿则使IBF复位到零。外设在检测到IBF为零后,可以开始输入下一个字节。
2. 方式1的输出
A,B口在方式1用作输出时,两组的联络信号如图7-9(a)所示。其联络信号的作用如下:
图7-9 方式1输出
(a)结构图; (b)波形图
(1) :输出缓冲器满信号,低电平有效。由8255A输出,当其有效时,表示CPU已经将数据输出到指定的端口,通知外设可以将数据取走。
(2) :响应信号,低电平有效。由外设送来,有效时表示8255A数据已经为外设所接收。
(3) :中断请求信号,高电平有效。当外设接收了由CPU送给8255A的数据后,8255A就用INTR端向CPU发出中断请求,请求CPU再输出后面的数据。INTR是当 , 和INTE都为高电平时,才能被置成高电平。由 的上升沿清除[见图7-9(b)]。
(4)INTE:中断允许信号。A口的INTE由PC6置/复位,B口的INTE由PC2置/复位。
PC4、PC5位可以由控制字D3的设置为输入或输出数据用。
(三)方式2——双向选通输入输出
通过8位数据线与外设进行双向通信的方式,即能发送,又能接收数据。工作时可以用中断方式,也可以用查询方式与CPU联系。
方式2只限于A组使用,它用A口的8位数据线,用C口的5位进行联络。工作时输入、输出数据都能锁存。当A组在方式2下工作时,B组可以在方式0或方式1工作。方式2的联络信号如图7-10(a)所示,其作用如下:
图7-10 方式2
(a)结构图; (b)波形图
(1)INTR:中断请求信号,高电平有效,输入输出都用这个信号向CPU申请中断。
(2) :输出缓冲器满,低电平有效。作为对外设的一种选通信号,表示CPU已经将数据送到端口A。
(3) :来自外设的响应信号,低电平有效。有效时启动口A的三态输出缓冲器送出数据;否则,输出缓冲器处于高阻态。
(4)INTE1:与 有关的中断允许触发器,由PC6置/复位。
(5) :选通输入,低电平有效。来自外设的选通信号,有效时,将输入数据选通送入锁存器。
(6)IBF:输入缓冲器满,高电平有效。有效时,表明数据已经送入锁存器。
(7)INTE2:与IBF有关的中断允许触发器,由PC4置/复位控制。
各种方式下各端口的功能如表7-2所示。
方式1和方式2时,中断允许信号INTE的操作位如表7-3所示。
表7-2 各种方式下各端口功能
端 口 |
方式0输入 |
方式0输出 |
方式1输入 |
方式1输出 |
方式2(仅A组) |
PA7~PA0 PB7~PB0 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 |
IN IN IN |
OUT OUT OUT |
IN IN INTRB IBFB INTRA IBFA I/O I/O |
OUT OUT INTRB INTRA I/O I/O |
I/O 方式0或1 I/O I/O I/O INTRA IBFA |
表7-3 对INTE的操作位
方 式 |
操作位(A口) |
操作位(B口) |
1输入 |
PC4 |
PC2 |
1输出 |
PC6 |
PC2 |
2输入 |
PC4 |
|
2输出 |
PC6 |
|
当8255A与CPU采用查询方式工作时,要求CPU读取C端口的内容,根据上述对PC各位的定义及对中断屏蔽情况可以很容易地知道读出的状态字中各位的含义,各位的定义如下:
PC7 |
PC6 |
PC5 |
PC4 |
PC3 |
PC2 |
PC1 |
PC0 |
I/O |
I/O |
IBFA |
INTEA |
INTRA |
INTEB |
IBFB |
INTRB |
方式1输入
|
INTEA |
I/O |
I/O |
INTRA |
INTEB |
|
INTRB |
方式1输出
|
INTE1 |
IBFA |
INTE2 |
INTRA |
X |
X |
X |
方式2 B组,由方式0或方式1定义
三、初始化
在使用8255A时,首先要由CPU对8255A写入控制命令字,有2种控制命令字:一个是方式选择控制字,另一个是C口按位置位/复位控制字。8255A的各种工作方式都要由控制命令来设定,这个设置过程称为“初始化”。
(一)方式选择控制字(D7=1)
方式选择控制字的格式如图7-11所示。图中D0~D2三位用来对B组的端口进行工作方式设定,其中D2设置B口的工作方式,D2=1为方式1;D2=0为方式0。D1位设定B口输入或输出,D1=1为输入;D1=0为输出。D0位设定C口的低半部,D0=1为输入;D0=0为输出。D3~D6四位用来对A组的端口进行设定。其中D6D5组合起来设定A口工作方式,D6D5=00为方式0,D6D5=01为方式1,D6D5=10和11都为方式2。D4位用来设定A口的输入或输出,D3位用来设定C口上半部的输入或输出,“1”为输入;“0”为输出。
C口低位选择(方式0时)
1=输入0=输出
B口输入输出选择
1=输入0=输出
B口工作方式选择
0=方式01=方式1
后一单元-textbox: #_x0000_s1061" inset=".5mm,.3mm,.5mm,.3mm">
B组
后一单元-textbox: #_x0000_s1062" inset=".5mm,.3mm,.5mm,.3mm">
C口高位输入输出选择
1=输入0=输出
后一单元-textbox: #_x0000_s1063" inset=".5mm,.3mm,.5mm,.3mm">
A口输入输出选择
1=输入0=输出
后一单元-textbox: #_x0000_s1064" inset=".5mm,.3mm,.5mm,.3mm">
A口工作方式选择
00=方式001=方式1
1X=方式2
后一单元-textbox: #_x0000_s1065" inset=".5mm,.3mm,.5mm,.3mm">
A组
D7=1为工作方式
控制字标志
图7-11 方式选择控制字
(二)C口按位置位/复位控制字(D7=0)
图7-12是当控制字用作C口置位/复位控制字时,各位的功能规定。
D7
D6
D5
D4
D3
D2
D1
D0
无效
后一单元-textbox: #_x0000_s1034" inset=".5mm,.3mm,.5mm,.3mm">
D7=0为
置位/复位
控制字标志
后一单元-textbox: #_x0000_s1038">
D3
D2
D1
位选择
0
0
0
PC0
0
0
1
PC1
0
1
0
PC2
0
1
1
PC3
1
0
0
PC4
1
0
1
PC5
1
1
0
PC6
1
1
1
PC7
后一单元-textbox: #_x0000_s1041" inset=".5mm,.3mm,.5mm,.3mm">
置位/复位选择
1=置位0=复位
B组
图7-12 C口按位置位/复位控制字
因为C口共有8个二进制位,要确定对其中某一位进行操作,就要在控制字中指定该位的编号。图中用了D3D2D1三位的编码与PC口的某一位相对应,对指定位进行的操作则由D确定,如D0=1时,将指定位置“1”。D0=0则将指定位置“0”。例如:
若D0=0,D3D2D1=101,则C端口的第5位PC5置“0”;
若D0=1,D3D2D1=001,则C端口的第1位PC1置“1”。
例如,用程序将PC口的第7位置“1”,第3位置“0”,设控制字的地址为0EBH。第7位的编码为D3D2D1=111,使之置1的控制字编码为:00001111B=0FH;
第3位的编码为D3D2D1=011,使之置0的控制字编码为:00000110B=06H。
程序:MOV AL,0FH ;设置PC7为“1”的控制字送AL
OUT 0EBH,AL ;将控制字送8255A控制寄存器
MOV AL,06H ;设置PC3为“0”的控制字送AL
OUT 0EBH AL ;将控制字送8255A控制寄存器。
在选通方式工作时,利用C口的按位置位/复位功能可以控制8255A能否提出中断。
四、应用举例
(一)键盘接口
键盘是微型计算机系统中最常用的一种输入设备。有两类键盘:编码键盘和非编码键盘。
编码键盘能自动提供对应于被按键的编码信息,如ASCⅡ码,并能同时产生一个选通脉冲通知微处理器,还具有处理抖动和多键串键的保护电路。这种键盘的优点是使用方便,但需要较多的硬件,价格昂贵。
非编码键盘由一组开关组成,提供行和列的键盘矩阵。其全部工作,包括按键的识别、按键代码的产生、防止串键和消去抖动等问题,都靠程序来实现。所需要的硬件较少,价格也便宜,一般用作单板机的键盘。
键盘输入信息的过程可归纳为三步:
(1)检测是否有键按下;
(2)查出按下的是哪一个键。
(3)将该键所代表的信息翻译成计算机能识别的内部代码,如ASCⅡ码或其它预先约定的编码。
在键盘输入过程中,由于按键的断开与闭合都要经过几毫秒的抖动之后才能真正接触,因而应采取措施以保证在按键稳定后才检测键的信息。
在按键时,用户可能因偶尔同时按下一个以上的键而造成编码出错,称之为串键。此时需要硬件或软件来进行处理。
第二、三步可以用硬件也可以用软件来完成。如用硬件完成,则称为编码键盘,如用软件来完成,则称为非编码键盘。
图7-13为非编码键盘和微处理器的接口电路。图中8255A端口A工作在方式0,用作输出口;端口B也工作在方式0、用作输入口。在按下一个键时,与它对应的行和列短接,形成了通路,通过查找闭合键所在的行和列的位置,程序就能决定被按下的键所代表的代码(称为“键号”,0~63)。
图7-13 非编码键盘接口
检测键盘输入过程如下:端口A送全“0”到8根行线上,CPU再从端口B读入8根列线上的信息。如果读入的信息为全“1”(高电平),则表示目前尚无键闭合;否则,表示现在已有按下的键。为进一步查找闭合键所在的行和列的编码,CPU在端口A的PA0引线上送出低电平信号,其余(PA7~PA1)引线上输出高电平信号。CPU再次通过B端口读入列线上的电平信号,并判断是否为全“1”。如果是全“1”,则表示在第0行上无键闭合;否则,表示闭合键在第0行上。再进一步找出读入的字节数据中“0”所在的位。即按下的键所在的列的位置。在第0行上无键闭合的情况下,则依次对行1,行2,…行7进行上述操作,找出被按下的键所在行和列的编号。由此,可以通过软件的办法,找到被按下的键所代表的编码。
使用行扫描方式寻找按下键的编号(键号)的程序如下:
┆
PORTA EQU 0FF8H
PORTB EQU 0FFFAH
PORTC EQU 0FFFCH
PORTCN EQU 0FFFEH
MOV DX,PORTCN ;置8255A端口A、B工作在方式0;
MOV AL,10000011B ;端口A为输出口,端口B为输入口。
OUT DX,AL
WAITK: MOV DX, PORTA ;等待键闭合
MOV AL,0 ;行码送全“0”
OUT DX,AL
MOV DX, PORTB ;读列码
IN AL,DX
CMP AL,0FFH;
JZ WAITK ;无键按下,继续等待
MOV BL,0 ;扫描键盘矩阵,送键号初值
MOV BH,11111110B ;置初始扫描模式——行码送FEH
MOV CX,8
FNDROW: MOV AL BH ;送行码
MOV DX,PORTA
OUT,DX,AL
ROL BH,1 ;修改行码
MOV DX,PORTB ;读列码
IN AL,DX
CMP AL,0FFH
JNZ FNDCOL ;有键按下,查列号
ADD BL,8 ;无键按下,指向下一行键号初值
LOOP FNDROW ;8行扫描未完,送下一行扫描码
JMP DONE ;8行扫描完,无键按下
FNDCOL: ROR AL,1 ;查哪一列有键按下
JNC RIGHT ;查到按下键的键号
INC BL ;键号加1,查下一列
JMP FNDCOL
RIGHT: : ;按下键的编号在BL中
:
DONE: : ;无键闭合
(二)七段LED显示器接口
发光二极管是一种当外加电压(阳极电压接高电位)超过额定电压时发生击穿,并因此而产生可见光的器件。这种数码显示管通常由多个发光二极管来组成7段或8段笔划显示器,当段组合发亮时,便可显示某一数码或字符。七段代码的各位(bit0—bit7)用作a~g和DP的输入。如图7-14所示的七段LED实际上包含8个LED(7段字形加上小数点DP)。图(b)结构中,左面为共阳极(各个LED管阳极相连),右面为共阴极。
图7-15为8位7段LED显示器接口电路,共有8个七段发光二极管的器件。为了减少所用器件的数量,这个电路可以和两个8位并行输出口连接。8个显示器共用同一组段代码输出线,但通过数位选择线,在任何时间内只有一个显示器能够显示其代码。例如,在图中8个显示器上显示8位十六进制数,每个显示器显示其中的一位数。为了实现这一功能,可让每个显示器接通2ms,以显示其对应的数,并且保证周而复始地逐个显示这8位数。这样,人们看上去好像8个显示器都在同时显示。
图7-14 七段LED
(a)外形图;(b)结构图
图7-15 8位数字显示器接口
现选用8255A作为8位数字显示电路和微处理器的接口芯片,端口A和B都用作方式0的输出端口,端口A的输出提供数位驱动器的选择信号——位选码,端口B的输出提供段驱动器的七段代码信息一段选码,在8个显示器上重复显示一个双字的16进制数码的程序(8255A各端口地址同上例)为:
: ;数据段
SSEGCODE DB 0C0H ;定义16进制数字符的七段代码表
DB 0F9H
DB 0 A4H
DB 0B0H
DB 99H
DB 92H
DB 82H
DB 0F8H
DB 80H
DB 98H
DB 88H
DB 83H
DB 0C6H
DB 0A1H
DB 86H
DB 8EH
FOURBYTE EQU THIS BYTE
DBL WORD DD ?
:
:
MOV AL,10000000B ;设置工作方式
MOV DX,0FFFEH
:
:
CLD
AGAIN: MOV CX,4
MOV SI,OFFSET FOURBYTE
MOV AH,11111110B
LOOPDISP: LODSB
MOV DI,AX
AND AL,0FH
MOV BX,OFFSET SSEGCODE
XLAT SSEGCODE ;送段选码
MOV DX,0FFFAH
OUT DX,AL
MOV AL,AH ;送位选码
MOV DX,0FFF8H
OUT DX,AL
PUSH CX
MOV CX,NDELAY ;延时2ms,NDELAY——延时常数
NOP
IDLE: NOP
LOOP IDLE
:
MOV AL,0FFH
OUT DX,AL ;禁止显示
MOV AX,DI
MOV CL,4
SHR AL,4
MOV BX,OFFSET SSEGCODE
XLAT SSEGCODE
MOV DX,0FFFAH
OUT DX,AL
ROL AH,1
MOV AL,AH
MOV DX,0FFF8H
OUT DX,AL
MOV DX,NDELAY ;延时2ms
IDLE2: NOP
NOP
LOOP IDIE2
ROL AH,1
MOV AL,0FFH
OUT DX,AL ;禁止显示
POP CX
LOOP LOOPDISP
JMP AGAIN
┆
【免责声明】
1、由于各方面情况的调整与变化,本网提供的考试信息仅供参考,考试信息以省考试院及院校官方发布的信息为准。
2、本网信息来源为其他媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。联系邮箱:952056566@qq.com
相关《微型计算机原理及应用学习笔记 可编程并行接口》的文章
甘肃自考便捷服务
- 微信交流群
- 微信公众号
微信扫一扫加入考生微信群
①学习交流、②考试提醒、③自考解答
④自考资料、⑤新闻通知、⑥备考指导
甘肃自考网微信公众号
随时获取甘肃省自考政策、通知、公告
以及各类学习微信公众号
- 热点文章
- 常见问题