8255A的功能与结构

8255A可编程外围设备接口(programmable perphheral interface,PPI)是一种通用的可编程并行I/O接口器件。它可以作为Intel系列微处理器或其它系列微处理器的接口器件,可以将任何与TTL兼容的I/O设备与微处理器连接。在与主频不高于8MHz的微处理器一起工作时,不需要插入等待周期。

它有24个可编程I/O引脚,分为两组,每组12个,可以以3种不同的操作方式工作。它的每个I/O引脚可以提供2.5mA的吸入电流,最大4mA。8255A常常用作键盘和打印机端口。它的价格低廉,使用方便,得到了广泛的应用。

8255A的功能结构

由图可得:

(1)数据总线缓冲器

D7~D0与系统数据总线相连,负责与CPU进行数据交换。包括输入输出数据、控制字和状态字。

(2)读/写控制逻辑

接收来自CPU的地址信息和控制信息。

(3)A组控制和B组控制

这两组控制逻辑电路接收来自CPU的控制字,控制两组端口的工作方式及读/写操作。A组控制端口A和端口C的高4位,B组控制端口B和端口C的低4位。

(4)端口A、B、C

8255A有3个8位数据输入/输出端口:端口A、端口B和端口C,分别简称为A口、B口和C口。它们对外的引线分别是PA7~PA0、PB7~PB0和PC7~PC0。C口可分成两个4位的端口:C口高4位(PC7~PC4)和C口低4位(PC3~PC0)。

三个端口按组编程

端口A和端口B都有一个8位数据输入锁存器和一个8位数据输出锁存/缓冲器。端口C有一个8位数据输入缓冲器和一个8位数据输出锁存/缓冲器。

端口C可以按位操作。

8255A的引脚功能

双列直插,40根引脚

D7~D0:数据信号线

CS:片选信号输入引脚,低电平有效

RD:读信号输入引脚,低电平有效

WR:写信号输入引脚,低电平有效

RESET:复位信号输入引脚,高电平有效。用于将8255A控制字寄存器清“0”,并将A、B、C口置成输入状态

A1、A0:端口选择信号输入引脚

8255A的工作方式

8255A可以无条件方式、查询方式和中断方式完成CPU与外设的数据交换。

以无条件方式工作时,端口A、B和C都可以作为数据输入/输出端口。

以查询或中断方式工作时,A口与B口可以作为数据输入/输出端口,C口作为握手联络信号,负责输出控制信息或输入状态信息。

8255有三种工作方式:方式0、方式1、方式2;

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

  • 适合于三个端口;
  • A口、C口的高4位、B口、C口的低四位可分别定义为输入或输出,共有四个部分,故共有16种组合。
  • C口可以按位进行置位(置0)和复位(置1)。

方式0最适用于无条件传送方式

也能用于查询工作方式,比较勉强,这时可以把C口的高4位定义为输入口,输入外设的状态信号,而将C口的低四位定义为输出口,输出控制信息;这时可用A、B口传送数据;

方式0不能工作在中断方式

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

A口、B口作为数据的输入口或输出口,但数据的输入输出要在控制信号的控制下,控制信号由C口的某些位来提供;

方式1适用于程序查询和中断控制方式,它不能工作在无条件传送方式下;

选通输出

在方式1下,A口、B口都可以选通输出数据,C口的6条线作为选通控制信号:PC3、PC6、PC7配合A口,PC0、PC1、PC2配合B口;

OBF:输出缓冲器满信号,低电平有效,当A口/B口有数据时,OBF就会变成低电平,高电平时,CPU可往A口/B口放送数据

ACK:外设收到数据的应答信号

INTE:中断允许状态

INTR:中断请求信号,高电平有效

总结:

  • 查询方式

    查询端口C的BIT7,如果是0则等待;如果不是0,则CPU发送数据。

    WAIT:  IN  AL,PORTC  # 从端口C读取数据
    
           TEST AL,BIT7
    
           JZ  WAIT
    
           MOV  AL,[SI]
    
           OUT PORTA,AL
    
  • 中断方式

    1. PC3置1,请求中断
    2. 置位PC6,允许中断
    3. 数据从端口输出,导致OBF变成高电平,证明端口数据被取走,CPU就会往端口放送数据
    4. INTE与PC7构成一个与门,导致PC3再次置1

选通输入

A口、B口都可以选通输入数据,C口的6条线作为选通控制信号:PC3、PC4、PC5配合A口,PC0、PC1、PC2配合B口;

方式1:

STB:输入选通信号,外设用它将数据锁存于输入数据缓冲器中

IBF:数据输入缓冲器满,STB的应答信号,高电平有效

INTE:中断允许状态

INTR:中断请求信号,高电平有效

方式2:双向传输方式

只有A口可以工作在这种方式下。既能发送数据,又能接收数据;它还要利用C口的5条线作为控制信号线; A口的输入输出均具有数据锁存能力,数据的输入输出均可以引起中断;

方式2适用于程序查询和中断控制方式。它不能工作在无条件传送方式下。

这时B口可以工作在方式0或方式1,C口剩余的3条线可以作为输入输出线或方式1下的控制线。

8255的控制字

  1. 方式选择控制字

【例题】

​ 设8255的端口地址为FBC0~FBC3H,A口设置方式0输入,B口方式0输出,C口高4位方式0输出,C口低4位方式0输入。

控制字为:10010001B => 91H

8255初始化程序为:

# 由8255的端口地址为FBC0~FBC3H可知,控制端口为FBC3H
MOV  DX, 0FBC3H # 以字母F开头,须在前面加一个0

MOV  AL, 91H
 
OUT  DX, AL
  1. 按位操作控制字

    设置PC0为置位,则:00000001

    设置PC4为复位,则:00001000

【例题】

​ 设8255的端口地址为FBC0~FBC3H,A口设置方式0输出,B口方式0输入,C口高4位方式0输出,C口低4位方式0输入,利用C口PC5产生连续的方波信号,信号的高、低电平宽度可调用延时子程序DELAY实现。

控制字为:10000011B =>83H

8255初始化程序为:

     MOV  DX, 0FBC3H

     MOV  AL, 83H

     OUT  DX, AL

FB : MOV  AL, 0BH   #00001011B 高电平

     OUT  DX, AL     ;PC5置位

     CALL  DELAY   ;维持高电平

     MOV  AL, 0AH

     OUT  DX, AL     ;PC5=0

     CALL  DELAY    ;维持低电平

     JMP   FB      ;连续输出方波信号

8255与微处理器的连接

  1. 8255A的D7~D0分别与系统总线的D7~D0相连;

  2. RD、WR分别与系统总线的RD、WR信号或者IOR和IOW﷯信号相连;

  3. A1、A0分别与系统地址线A1、A0相连;

  4. CS由系统地址总线A2~A15译码生成。

    在PC机中,8255A的I/O端口地址为60H63H和端口378H37BH。端口60H63H用于键盘、扬声器和定时器,端口378H37BH用于并行打印机(LPT1)端口。

端口地址

8255A包含A口、B口、C口三个独立的数据端口,及一个控制端口。各端口地址如下:

A1A0=00 A口

A1A0=01 B口

A1A0=10 C口

A1A0=11 控制端口

  1. 该图表示8255A有四个地址,因为这里有两根线 A1 A0,这两根线决定了8255有四个地址

  2. 8255要正常工作,必须CS为有效,而CS与Y2相连,也就是Y2必须输出有效信号

  3. 如果Y2要有效,必须让74LS138译码器有效,而要74LS138译码器有效,必须使得:G1为高电平,G2A为低电平,G2B为低电平这三个一定要满足

  4. C B A 决定Y2是否有效 (不一定是Y2,所以C B A 的值根据下面的值变化)

    C  B  A

    0   0   0  Y0有效

    0   0   1  Y1有效

    0   1   0  Y2有效

    0   1   1  Y3有效

    1   0   0  Y4有效

    1   0   1  Y5有效

    1   1   0  Y6有效

    1   1   1  Y7有效

  5. 把图中CPU的所以地址线A7~A0列出来计算得出地址值

8255A初始化

​ 8255A初始化,设定端口的工作方式和输入/输出方向,即将方式控制字写入控制端口。

初始化程序段如下:

MOV  DX, PORT-Ctrl       ;8255A的控制口地址送DX

MOV  AL, mode          ;将方式选择控制字内容送AL

OUT  DX, AL            ;写入控制口,完成初始化

键盘接口

利用8255A可以很方便地连接线性键盘和矩阵键盘。

  • 按键数量大的键盘通常采用矩阵结构,如计算机键盘,利用一片8255A的A口和C口的高4位作为行线,B口和C口的低4位作为列线,可以构成12X12=144的矩阵键盘。
  • 识别键盘上哪个键被压下的过程称为键盘扫描。
  • 键盘扫描有两种方法:行扫描法和反转法。

行扫描法

  1. PC7~PC4 输出全 0(所有行置0),从 PC3~PC0 读入,若读入的数据不是 0FH,表明某一列有键按下;
  2. 延时 20ms 去抖动(按键按下时的讯号不稳定),重复第一步动作,若还有键闭合,则认为确实有键闭合;否则返 回第一步;
  3. 查找被确认的键;从第 0 行开始逐行输出 0,其他行输出1(每次只有扫描到的行为0,其他的都为1),然后读入列的值,检测是否为0FH,如果是0FH则检测下一行,如果不是则已经找到按键所在的行,输出所在的行;
  4. 将输出的行值数据与第 1 步输入的数据组成一个字节,查表(键的位置码表),确定键值。(如上图的键值8,其位置码位BE)

反转法

图上每行每列比行扫描法都多了一个电阻

  1. 将 PC7~PC4 设定为输出,PC3~PC0 设定为输入。然后 PC7~PC4 输出全 0,从 PC3~PC0 读入列值,若读入的数据有一位为 0,表明该列有键按下,保存列值;
  2. 延时 20ms 去抖动,重复第一步动作,若还有键闭合,则认为确实有键闭合;否则返 回第一步;
  3. 将 PC7~PC4 设定为输入,PC3~PC0 设定为输出。把保存的列值从 PC3~PC0 输出, 从 PC7~PC4 读入行值,读入的数据必有一位为 0,保存行值。将行值和列值组合在 一起,用查表的方法得到按键的键值。

猜你喜欢

转载自www.cnblogs.com/Hhhighway/p/12813664.html