微机原理学习笔记(六)

目录

六、I/O接口和并行接口芯片8255A

6.1 I/O接口

6.1.1 定义

6.1.2 组成

6.1.3 功能

6.2 I/O端口

6.2.1 定义

6.2.2 组成

6.2.3 寻址方式

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

6.3.1程序控制方式

6.3.2 DMA方式

6.4 8255A的工作原理

6.4.1 内部结构和引脚功能

6.4.2 8255A的控制字

6.4.3 8255A的工作方式

6.5 8255A的应用

6.5.1 基本输入输出的应用举例

6.5.2 键盘接口

六、I/O接口和并行接口芯片8255A

6.1 I/O接口

6.1.1 定义

计算机和外设之间需要一种交接部件,来协调外设和计算机之间的信息传递过程。

6.1.2 组成

根据功能而定,可以是缓冲器,电平转换电路等。

6.1.3 功能

1) 设置数据缓冲解决速度不匹配问题

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

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

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

3) 设置时序控制电路同步CPU和外设的工作

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

4) 提供地址译码电路

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

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

6.2 I/O端口

6.2.1 定义

        CPU与外设通信时,主要传送数据信息、状态信息和控制信息。在接口电路中,这些信息分别进入不同的寄存器,通常将这些寄存器和它们的控制逻辑统称为I/O端口CPU可对端口中的信息直接进行读写。

6.2.2 组成

1) 数据端口
         数据端口(Data Port)或数据口,用来存放外设送往CPU的数据,或者CPU要输出到外设去的数据,长度一般为1~2字节。数据口主要起数据缓冲作用。
 
2) 状态端口
         状态端口(Status Port)指示外设的当前状态。每个外设具有几个状态位,它们可由CPU读取,以测试或检查外设的状态,决定程序的流程。
状态口中常用的状态位:

  • 准备就绪位(Ready)

        如果是输入端口,该位为1表明端口的数据寄存器已准备好数据,等待CPU来读取;当数据被取走后,该位清0。若是输出端口,该位为1表明端口中的输出数据寄存器已空,可以接收CPU的下个数据了;当新数据到达后,这位便清0。

  • 忙碌位(Busy)表明输出设备是否能接受数据。

        该位为1,表示外设正在进行I/O传送操作,暂时不允许CPU送新的数据过来。本次数据传送完毕,该位清0,表示外设已处于空闲状态,又允许CPU将下一个数据送到输出口。

  • 错误位(Error)

        如果在数据传送过程中产生了某种错误,可将错误状态位置1,以便CPU进行相应的处理。系统中可以设置若干错误状态位,表明不同性质的错误,如奇偶校验错、溢出错等。

3) 命令端口
        命令端口(Command Port)也称为控制端口(Control Port),用来存放CPU向接口发出的各种命令和控制字,控制接口或设备的动作。常见的命令信息位有启动位、停止位、允许中断位等。通常,CPU与外设交换的数据以字节为单位,因此一个外设的数据端口含有8位。 状态口和命令口可以只包含1位或几位信息,所以不同外设的状态口允许共用一个端口,命令口也可共用。D触发器和三态缓冲器常用来构成这两种端口。

6.2.3 寻址方式

        1)存储器映象寻址方式

        把系统中每个I/O端口都看作1个存储单元,并与存储单元统一编址,所有访存指令均可用来访问I/O端口,不用设置专门的I/O指令。

        2)I/O单独编址方式 

        对系统中的输入输出端口地址单独编址,不占用存储空间,而用专门的IN/OUT指令来访问。在8086/8088系统中都采用I/O寻址方式。CPU需提供能够区分访问内存和访问I/O的硬件引脚信号。

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

6.3.1程序控制方式

1)无条件传送方式

        也称同步传送方式,主要用于对简单外设进行操作,所需的硬件和软件都较少。对于这类外设,任何时刻在输入时均已准备好数据,输出时已处于接收数据状态,程序可不必检查外设的状态。在需要进行输入或输出操作时,可以直接执行输入输出指令,I/O指令执行后,立即进行数据传送操作。

最简单的输入端口

最简单的输出端口

         输入端口用74LS244缓冲器,输出端口用74LS273锁存器而不能用缓冲器的原因为:输入端口需要了解各开关的当前状态。输入端口将输出指令送到数据总线上的值锁存在输出端,让指定的LED灯发光,并保持状态不变知道下一条输出指令到达。

锁存器锁存器:输出端的状态不会随输入端的状态变化而变化,只有在有锁存信号时输入的状态 被保存到输出,直到下一个锁存信号。通常只有0和1两个值。典型的逻辑电路是D触发器。    

缓冲器指的是缓冲寄存器,它分输入缓冲器和输出缓冲器两种。前者的作用是将外设送来的数据暂时存放,以便处理器将它取走;后者的作用是用来暂时存放处理器送往外设的数据。有了数控缓冲器,就可以使高速工作的CPU与慢速工作的外设起协调和缓冲作用,实现数据传送的同步。由于缓冲器接在数据总线上,故必须具有三态输出功能。

2)条件传送

        也称为查询式传送方式。CPU与外设交换数据一般很难满足无条件传送的条件。在开始传送前应先确认外设已处于准备好传送数据的状态,才能进行传送,即采用查询式传送方式。这时CPU要先执行一条IN指令,从外设的状态口读取它的当前状态。如果外设未准备好数据或处于忙碌状态,则要反复执行读状态指令,不断检测外设状态,直至外设准备好了或不忙时为止。

工作过程:

  1. 输入设备准备好数据后,向接口电路发选通信号,将数据打入锁存器,并使D触发器的Q端置1。
  2. 执行IN指令读状态口, \overline{CS_{1}}\overline{RD}有效。Q端高电平经缓冲器送到数据线,作为READY信号读入累加器。
  3. CPU查READY=1, 执行IN指令读数据口, \overline{CS_{2}}\overline{RD}有效使数据缓冲器开启,锁存数据经缓冲器送上数据总线并进入累加器,同时将D触发器清0,一次数据传送完毕。
  4. 接着开始下个数据的传送,直至全部数据传送完毕。

6.3.2 DMA方式

平时总线由CPU管理,当外设需用DMA方式传送数据时,可请求CPU让出总线控制权,用专用硬件接口电路(DMA控制器)来取代CPU临时接管总线,控制外设和存储器之间直接进行成批、高速的数据传送,不用CPU 干预。

6.4 8255A的工作原理

6.4.1 内部结构和引脚功能

数据端口ABC

端口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口的端口状态信号。

A组和B组控制逻辑

A组:管理A口和C口高,通过PA7~PA0以及PC7~PC4引脚与外部联络。
B组:管理B口和C口低,通过PB7~PB0以及PC3~PC0引脚与外部联络。 
内部有控制寄存器,能接收CPU送来的命令字,决定A组和B组的工作方式,或对C口的每1位执行置位/复位操作。


数据总线缓冲器

双向三态的8位缓冲器,用作8255A和系统数据总线间的接口。
通过这个缓冲器和8位数据总线D7~D0,接收CPU送来的数据信息或控制字,外设传送给CPU的数据或状态信息,也要通过数据总线缓冲器和D7~D0送给CPU。 
 

/写控制逻辑

有关信号:
RESET,系统复位。高电平时使控制字寄存器清0,各端口工作于输 入方式。
\overline{CS} ,片选。译码电路产生,低电平时芯片才选中。
\overline{RD},读。有效时,可读取8255A的数据或状态信息。
\overline{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。

 

p 设计电路时要注意:

    16位数据总线的8086系统中,可将地址总线的A2A1连到8255AA1A0端。若它的数据线D7~D0接在CPU数据总线的低8位上,则要用偶端口地址来寻址8255A;而当D7~D0接在数据总线的高8位上时,要用奇地址口。为了方便起见,常将D7~D0接到系统数据总线的低8位。相应的,CPU要求芯片内部的各个端口使用偶地址。

例如若8255A的基地址为F0H,则
    A2A1=00,选A口,即口地址F0H;
    A2A1=01,选B口,口地址F2H;
    A2A1=10,选C口,口地址F4H;
    A2A1=11,选控制字寄存器,口地址F6H。

由上面的注意事项可得CPU的地址总线A1,A2分别与8255A的A0,A1引脚相连,因为要保证端口位偶地址,则A0=0。

6.4.2 8255A的控制字

方式选择控制字

写入控制口以定义各端口工作方式,且要求D7=1。
D6D5:选择A口的工作方式(方式0~2),
D2:选择B口的方式(方式0、1)。
D4D3D1D0:A口、C高、B口、C低的I/O方式。
1-In(输入),0-Out(输出),可有16种组态。

 置位/复位控制字

 例如:设8255A口地址为60H~63H,PC5平时为低电平,要求从PC5输出一个正脉冲,程序段:
        MOV       AL, 00001011B
        OUT       63H, AL            ;置PC5为高电平
        MOV       AL, 00001010B
        OUT       63H, AL            ;置PC5为低电平

6.4.3 8255A的工作方式

8255A可工作于3种方式:
     方式0-基本输入输出方式
     方式1-选通输入输出方式
     方式2-双向总线I/O方式
方式0
       基本输入输出(Basic Input/Output)方式,适用于不要用应答信号的简单I/O。A口、B口用作8位端口;C高和C低各用作2个4位端口,或合在一起构成1个8位端口。输出信号可被锁存,输入不能锁存。

6.5 8255A的应用

6.5.1 基本输入输出的应用举例

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

1)硬件电路设计
用8086 CPU、8255A和74LS138译码器等芯片及开关、显示器等构成如下硬件电路,来实现上述功能。

  • A口输入,PA7~PA0接8个开关K7~K0,B口输出,PB7~PB0接显示器LED7~LED0。
  • 8255A的\overline{RD}\overline{WR}和RESET脚接CPU相应输出,D7~D0与低8位数据线D7~D0相连,8255A的4个口地址都应为偶地址,A0总为0,用A2A1来选择4个端口。
  • 当A7A6A5=111,A4A3A0=100时,译码器输出 \overline{Y_{4}}= 0选中8255A。
  • 4个端口地址为F0H、F2H、F4H和F6H,对应于8255A的A口、B口、C口、控制口。

2)控制程序段设计
        确定方式选择控制字
        A口方式0输入,B口方式0输出,C口未用,相应位清0,控制字=10010000。
        控字写入控制口F6H
        将开关状态从PA引脚读入AL。若开关合上,AL中的相应位为0,断开则为1。
        把AL中的内容从PB引脚输出

         0-LED熄灭,表示相应的开关合上;
         1-LED点亮,表示相应的开关断开。
        不断循环,反复检测开关状态并显示
        计算机速度很快,每次操作后要延迟一定时间。

程序:
        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子程序

例2、读开关并用七段LED显示器显示开关状态
A口接4个开关K3~K0,PB的7位输出经74LS04反相驱动后,接到1个七段LED显示器上。
4个开关,共有16种状态,对应于16进制数字0~F。

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

 程序:

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位
          CBW      
          MOV      SI, AX
          MOV      BX, OFFSET TABLE        ;    BX←七段代码表首地址
          MOV      AL, [BX+SI]        ;    查表,AL←(BX+AL)
          OUT       61H, AL            ;   输出到B口
          CALL     DELAY            ;   调用延时程序
          JMP       IN_PA            ;   继续读开关,显示
DELAY:      …                ;   延时
          MOV       AH, 4CH
          INT         21H            ;    返回DOS
CODE      ENDS
 

6.5.2 键盘接口

  •  4行×4列键盘矩阵
  • PA3~0输出到4行线
  • 4行线输入到PB7~4
  • 4列线输入到PB3~0
  • 键未压下的列=1
  • 压键的行列会接通
  • 若置压键行为0
  • 则对应列也为0

 键盘扫描:
1)是否所有键均松开?向每行输出0再读列,应都为1;  
2)是,查有键压下?向每行输出0后读得有列为0;
3)有键压下,延时消抖动;    
4)根据输出0和读得0的位置,获得该键的代码。

键的代码形成
键0在3行3列,压下后从B口可读得D7=0和D3=0,其余位=1,故其编码为01110111B= 77H;
键6在2行1列,压下时D6=0、D1=0,其余位=1,故其编码为10111101B=BDH。
然后查表确定压下的键。
(代码P219)

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值