并行输入输出接口.ppt

上传人:牧羊曲112 文档编号:6117084 上传时间:2023-09-26 格式:PPT 页数:71 大小:1.09MB
返回 下载 相关 举报
并行输入输出接口.ppt_第1页
第1页 / 共71页
并行输入输出接口.ppt_第2页
第2页 / 共71页
并行输入输出接口.ppt_第3页
第3页 / 共71页
并行输入输出接口.ppt_第4页
第4页 / 共71页
并行输入输出接口.ppt_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《并行输入输出接口.ppt》由会员分享,可在线阅读,更多相关《并行输入输出接口.ppt(71页珍藏版)》请在三一办公上搜索。

1、第五章 并行输入输出接口,本章内容在书上第七章和第八章第五、六节 第一节 I/O接口的基本概念一、I/O接口的基本功能 1、I/O接口的作用 解决高速主机与低速外围设备间的矛盾,即速度配合;处理外围设备与CPU之间的不同的信息格式即信号格式配合;使主机与外设协调工作,即时序配合;外设和主机在信号电平一致,即电平配合。,2、I/O接口传送信息的类型 I/O接口传送的信息可分为三类:数据信息,状态信息和控制信息。数据信息:数据信息可分为四种 数字量,二进制数据,最小单位是一个bit(位),还有字节、字等。模拟量,现场信号大多是由传感器来的模拟电压或电流,他们必须经过A/D转换,变成数字量才能进入计

2、算机,有些接口有处理模拟量的电路,称为模拟接口。开关量,开关量只有两种状态,即“开”或“关”,可用一位二进制数表示,如“1”表示“开”,“0”表示“关”。脉冲量,脉冲量是以脉冲形式表示的一种信号,如计算机中用到的定时脉冲或控制脉冲等。状态信息:状态信息是反映外设当前所处的工作状态,以作为CPU与外设间可靠交换数据的条件。当输入,时,它告诉CPU,有关的输入设备是否准备好(Ready=1?);输出时它告诉CPU,输出设备是否空闲(Busy=0?)。控制信息:它用于控制外设的启动和停止,以及给出命令字,用于设置接口的工作方式。通常接口中三种信息有不同的寄存器传送,如数据输入寄存器、数据输出寄存器、

3、状态寄存器和控制(命令)寄存器,他们使用不同的端口地址来区分不同性质的信息。3、I/O接口的主要功能 数据缓冲功能,接口中有数据输入寄存器和输出寄存器,用于解决主机与外设在工作速度上的矛盾。,提供联络信息,接口中有状态寄存器 信息格式的转换,包括电平转换、并串转换等。设备选择,每台外设都有设备地址,用于与其他设备区别。中断管理,将在中断一章中详细介绍。可编程功能,使接口具有多功能和灵活设置。对外设的控制和监测功能二、I/O接口的基本结构 如图5.1所示。电路包括四组寄存器和一个中断逻辑。这些寄存器也被称为端口,每个端口有一个端口地址,CPU通过这些端口与外设交换数据。接口有两个界面,一面是计算

4、机总线;另一面是外围设备。,图5.1 接口电路的基本结构,三、I/O端口的编址方式 1、I/O端口和存储器统一编址 该方式是将存储器地址空间的一部分作为I/O设备的地址空间,所以I/O端口地址也是一个存储器地址。优点是CPU访问存储器的指令都可以访问I/O端口,不需要专门的I/O指令。二是使I/O控制逻辑简单,其引脚减少。缺点是I/O端口占用了一部分存储器空间;二是访存指令通常比专用的I/O指令长,所以执行时间较长。MOTOROLA的微机系列如MC6800系列,MC68000系列都采用这一方法。APPLE公司如6502系列也采用这一方法。,2、I/O端口和存储器单独编址 基本想法是I/O端口地

5、址和存储器地址分开,单独编址,在指令系统中分别设立存储器读写指令和I/O端口读写指令。在地址总线上的地址信息究竟是存储器地址还是I/O地址,一般是在CPU上设置专门的控制线,如=1为I/O操作,=0 为存储器操作。优点:I/O端口不占用存储器地址空间;单独I/O指令比较短,地址译码方便,指令执行速度快。缺点:需要单独的I/O指令,这些指令一般功能简单,通常只有读写功能;需专门的I/O控制线,增加了CPU本身控制逻辑的复杂性。Intel系列和Zilog系列采用此方法。,四、I/O接口的地址分配 每台微机都给I/O端口分配相应的端口地址。IBM/PC-XT使用10位地址作为I/O端口地址,即可用端

6、口有1024个,以后的PC机(8086)用16位地址作为I/O端口地址,即可用端口有65536个。书上P165页表7-1和表7-2是PC/XT机的I/O端口地址分配。可用测试工具QAPLUS等软件检测系统配置及其端口地址使用情况;也可查阅每台机器的硬件手册。五、I/O端口地址的译码及片选信号的产生 I/O端口地址的生成一般是由地址信号A9-A0的高位产生译码的片选信号 CS,低位产生片内的寄存器地址。在I/O操作时,CPU执行IN或OUT指令,首先是端口地址有效,然后是IOR或IOW有效。,1、利用门电路进行译码,如图5.2所示,端口地址为348H-34FH,由于A0-A2三位地址没有参加译码

7、,所以一个片选信号占用8个地址单元。实际上这低三位地址加到芯片上,产生片内寄存器的地址。A9A8A7A6A5A4A3A2A1A0 1 1 0 1 0 0 1,2、用集成译码器进行译码 如图5.3所示,使用74LS138集成译码器译出8个端口地址。由于所有A0-A9地址线都参加译码,所以称,为全译码,这时每条线对应一个端口地址。,A9 A8 A7 A6 A5 A4 A3 A2 A1 A0=11,0101,1 1 1 0 1 0 1 1=3 5 8-F,3、开关式可选择译码电路,如果用户希望译码器能适应不同的地址分配场合,则可采用开关式地址可选择译码电路,如图5.4所示。电路用DIP开关选择地址,

8、并使用了一片74LS688八位数据比较器。当输入端P0-P7的地址与设置端Q0-Q7的状态一致时,输出P=Q 为低,其输出控制地址译码芯片74LS138的译码。图中,上面一片74LS138产生读端口地址,下面一片74LS138产生写端口地址,这样使8个口地址作16个口地址用。此电路必须A9=1,AEN=0时才能有效译码。(AEN=0是CPU控制总线,AEN=1时DMA控制总线)。4、使用可编程芯片进行地址译码 目前大多数地址译码采用可编程芯片,如GAL或PAL器件。把译码电路的逻辑关系按说明文件格式写入一文件,然后用编程器把逻辑关系写入GAL器件中。,第二节 I/O数据传送控制方式,CPU与外

9、设之间数据传送的方式通常有3种,即程序控制方式,中断控制方式和直接存储器方式(DMA)。一、程序控制方式 程序传送是指CPU与外设间交换数据在程序控制(即IN或OUT指令控制)下进行。1、无条件传送 这种方式适合于外设总是处于准备好的情况,因此程序不必检查外设的状态。如图5.5所示,端口地址译码器产生选通信号,RD信号为读,WR信号为写,开放三态缓冲器(读)或写入锁存器,进行数据读或写。,图5.5 无条件传送方式,例1:一个采用无条件传送的数据采集系统,图5.6 无条件输入的数据采集系统,这是一个16位精度的数据采集系统。被采集的8个模拟量,由继电器绕组P0、P1、P7分别控制触点K0、K1、

10、K7逐个接通。每次采样转换成16位BCD码,高8位和低8位通过两个端口(端口地址为11H和10H)输入到计算机。CPU通过端口20H输出控制信号,以控制继电器的吸合,实现采集不同通道的模拟量。采集过程如下:(1)先断开所有的继电器触点,不采集数据;(2)延迟一段时间后,使K0闭合,采集第1个通道的模拟量,并保持一段时间,以使数字电压表将模拟电压转换为16位BCD码;(3)分别将高8位与低8位BCD码存入内存,并转存到DSTOR开始的数据区;(4)利用移位与循环实现8个模拟量的依次采集和存储。,数据采集程序如下:START:MOVDX,0100H;01H置吸合第一个继电器;00断开所有继电器代码

11、LEABX,DSTOR;置数据缓冲区地址指针XORAL,AL;清AL和CF AGAIN:MOVAL,DLOUT20H,AL;断开所有继电器CALLNEAR DELAY1;继电器触点释放时间MOVAL,DHOUT20H,AL;先使P0吸合CALLNEAR DELAY2;继电器触点闭合和转换时间INAL,10H;输入低8位INAH,11H;输入高8位MOVBX,AX;存入内存INCBX;地址指针加2INCBXRCLDH,1;DH带进位循环左移一位JNCAGAIN;8个通道完了吗?没有,循环DONE:;已完,则执行其他程序,2、程序查询传送方式 程序查询式输入,图5.7 查询式输入的接口电路,如图5

12、.7所示,CPU从接口读取状态信息,判断READY是否为1?即是否准备好,若已准备好,则读入数据。查询部分程序如下:POLL:inal,status_port;读状态端口的信息testal,80H;设READY信息在D7位jePOLL;未就绪,则循环再查inal,data_port;已就绪,则读入数据 其中:status_port是状态口地址,data_port是数据口地址。查询式输出 如图5.8所示,CPU从接口读取状态信息,判断BUSY是否为1?BUSY=0表示外设不忙,则CPU执行输出指令,,输出数据到外设。,图5.8 查询式输出接口电路,查询式输出的部分程序如下:POLL:inal,s

13、tstus_port;读状态口,查D7位testal,80HjnePOLL;D7=1即忙线=1,则循环moval,store;否则外设空闲,从内存取数outdata_port,al;输出到外设的数据口 3、一个查询方式的数据采集系统 如图5.9所示,有8个模拟量输入的数据采集系统,8个模拟量经多路开关选择其中一路,每次一个模拟量到A/D转换器;同时A/D转换器由端口4输出的D4控制启动与停止。A/D转换器的READY信号由端口2的D0输出至CPU数据总线;A/D转换后的数据由端口3输至数据总线。,图5.9 查询式数据采集系统,这里用到三个端口地址,端口2为状态口,端口3为数据口,端口4为控制口

14、用于选择那一路。,数据采集过程的程序如下:START:movdl,0F8H;设置启动信号,低3位选通多路开关movax,seg dstor;设置输入数据的内存地址指针moves,ax;段地址送esleadi,dstor;偏移地址送diAGAIN:moval,dlandal,0efH;使D4=0out04,al;停止A/D转换calldelay;等待停止A/D转换操作完成moval,dl;使al=0F8H,D4=1out04,Al;选输入通道并启动A/D转换POLL:in al,02;从02端口输入状态信息shral,1;查AL的D0jncPOLL;判READY=1?若D0=0,未准备好,则循环

15、inal,03;若已准备好,则经端口3输入采样数据到ALSTOSB;输入数据转送至内存单元,地址指针自动加1incdl;输入模拟通道号加1jneAGAIN;8个模拟量未完则循环;输入已完,执行别的程序,二、中断传送 程序查询传送方式明显的缺点是CPU利用率低,不能满足实时输入输出的需要,中断方式可以较好地解决这一问题。所谓中断是指程序运行中出现了某种紧急事件,CPU必须中止现正在执行的程序,转去处理该紧急事件(执行一段中断服务程序),并在处理完后返回原运行的程序的过程。完整的中断处理过程包括中断请求、中断判优、中断响应、中断处理和中断返回。为了使中断服务程序不影响主程序的执行,需把主程序断点处

16、的有关寄存器的内容保存下来,称之为保护现场;在中断服务程序操作完成后再恢复这些寄存器的内容,称之为恢复现场。用中断方式时,外设处于就绪状态时,例如输入设备数据准备好时,,或输出设备不忙可以接收数据时,便向CPU发出中断请求,CPU暂停当前执行的主程序进入中断响应,与外设进行一次数据交换,操作完成后再继续执行原来的主程序。通常CPU在执行每一条指令的末尾处会检查外设是否有中断请求(这种查询是由硬件完成的,不占用CPU的工作时间),如果有,在中断允许(即IF=1)的情况下,CPU将保留下一条指令的地址(断点)和当前标志寄存器的内容,转去执行中断服务程序,操作完成后恢复断点和标志寄存器的内容,继续执

17、行原来被中断的程序。中断方式的优点很明显,大大提高了CPU的工作效率,而且外设有申请中断服务的主动权。有关中断的详细工作情况将在第六章中介绍。,三、DMA方式 利用程序中断方式,虽然可以提高CPU的工作效率,但它仍需要由程序来传送数据,并在中断处理时要“保护现场”和“恢复现场”等,要占用一定时间,是每传送一个字节大约要几十微秒到几百微秒,这对于高速外设就显得太慢了。DMA方式是一种由专门的硬件电路执行I/O交换的传送方式,它让外设接口与内存直接进行高速的数据交换,而不必经过CPU,实现对存储器的直接存取。这种专门的硬件叫DMA控制器,简称DMAC,如图5.10。,如图所示,当接口准备好就向DM

18、AC发DMA请求,接着CPU通过HOLD引脚接收DMAC发出的总线请求;CPU在完成当前总线操,作后,就发出HLDA的总线响应信号给DMAC,DMAC收到此信号后便接管对总线的控制权,开始DMA操作。当DMA传送结束,DMAC将HOLD信号变成低电平,并放弃对总线的控制权。CPU检测到HOLD为低后,也将HLDA变成低,并恢复对总线的控制权。第三节 DMA接口技术参见课本P170-174页。第四节 可编程DMA控制器8237参见课本P174-188页。,第五节 并行通信及接口电路,通用接口可分为并行接口和串行接口两大类。并行传送是把一个字节或多个字节用多条信号线同时进行传输,即并行接口是按字节

19、传送的;串行接口和CPU之间按并行传送,而和外设之间是一个二进制位一个二进制位的传送,即串行接口是按位传送的。参见图5.11所示。一、并行接口的组成及其与CPU和外设的连接 1、并行接口的基本组成(如图5.12所示)两个或两个以上的具有缓冲能力的数据寄存器,可供CPU访问的控制及状态寄存器 片选和内部控制逻辑电路 与外设进行数据交换的控制和联络信号线 与CPU用中断方式传送数据的相关中断控制 2、与CPU的连接 与CPU的连接主要是双向数据总线,读、写控制线,复位信号,中断请求以及状态信号和地址译码产生的片选信号。3、与外设的连接 与输入设备的连接:并行输入数据线,数据传输应答信号(输入准备好

20、和输入回答信号);与输出设备的连接:并行输出数据线,数据传输应答信号(输出准备好和输出回答信号);,二、并行接口的数据输入输出过程 1、数据输入 外设将数据传送到并行接口,同时给出“输入数据准备好”信号;接口把数据接收到输入缓冲寄存器,给出“输入回答”信号(高电平)到外设;若采用中断方式,则接口向CPU发中断请求信号,并使状态寄存器中的“输入缓冲器满”位置1(也可以用查询方式);CPU响应接口的中断请求(或查询相应的状态位),在中断服务程序中执行IN指令读取接口中的数据;接口给外设的“输入回答”信号变成低,通知外设可以输入新的数据,此后转到开始下一个数据的输入过程。2、数据输出 CPU执行OU

21、T指令把数据写到接口(中断或查询都可以);,接口向外设发出“输出准备好”信号,通知外设可以把数据取走;外设取走数据后,向接口发“输出回答”信号;接口向CPU发出新的中断请求,并使状态寄存器中的“输出缓冲器空“位置1,要求CPU输出新的数据,转到,开始下一输出过程。第六节 可编程并行通信接口片8255A一、8255的内部结构及其功能 1、8255的引脚 参见图5.13(a),共有40条引线。电源与地线2条;与外设相连的有24条;与CPU相连的有14条。,图5.13 8255引脚和功能示意图,2、8255的功能 如图5.13(b)所示,接口的左边与CPU连接,右边与外设连接,有A、B、C三个8位端

22、口,而C口可分成两个4位的端口。每个端口都可以通过编程设定为输入端口或输出端口,但有各自不同的方式和特点。端口C可以独立使用,但通常是配合端口A和端口B工作,为这两个端口的输入输出提供联络信号。,二、8255A的内部结构方块图 如图5.14所示,8255A由以下几部分组成。1、数据总线缓冲器 这是一个8位双向三态数据缓冲器,是8255A与CPU之间的数据接口,是它们之间互相交换信息的必经之路。2、并行输入输出端口A、端口B、端口C 端口A和端口B是一样的8位端口,可以作为输入口或输出口,并有数据锁存功能。端口C作为输入口时,对数据不锁存,而作为输出口时,对数据进行锁存。端口C可以独立作为输入或

23、输出端口,也可分成两个4位的端口,分别用来为端口A和端口B提供控制和状态信息。,3、A组控制和B组控制 端口A与端口C的高4位(PC7-PC4)构成A组,端口B与端口C的低4位(PC3-PC0)构成B组。他们各有一个控制单元接收来自读写控制部件的命令和CPU通过数据总线送来的控制字,并根据控制字来定义各端口的操作方式。4、读写控制部件 该部件用于接收CPU的控制命令,根据这些命令向片内各功能部件发出操作命令。共有6个信号,CS是片选信号,通常由高位地址译码产生;RD和WR是CPU来的读写信号;RESET是复位信号,复位后,清除所有寄存器内容,并将各端口置成输入方式;A1、A0为地址信号,用于选

24、择8255内部的端口。这6个信号的组合所完成的操作如下表所示。可以看出,CPU要求8255有4个端口地址,通常A1、A0直接和地址总线的AD1、AD0相连,这时4个地址是连续的。,表5-1:8255A的操作,三、8255A的控制字 1、三种工作方式,如图5.15所示,将控制字写入控制字寄存器,设置端口的工作方式,8255A有三种工作方式。方式0:基本输入输出方式 方式1:选通输入输出方式 方式2:双向输入输出方式 端口A可处于三种方式的任一种;端口B只能工作在方式0和方式1;端口C可工作在方式0,但通常C口被分成两组,A组(A口与 PC7-PC4)和B组(B口与PC3-PC0),用于传送数据和

25、控制信息。2、方式选择控制字 方式选择控制字用于定义端口的工作方式,控制字有8位,每一位的定义如图5.16所示。例如:方式选择控制字 83H=10000011 A口方式0,输出方式;B口方式0,输入方式;C口分为两组,PC7-PC4方式0,输出,PC3-PC0方式0,输入。,若控制字寄存器的口地址是D6H,则movAL,83Hout0D6H,AL,3、C口置位复位控制字 此控制字只对C口有效,该控制字紧跟在方式控制字后定义,它被写入控制口,不是写入C口。如图5.17所示。在方式1和方式2时要用到这个控制字。,四、8255A的工作方式 1、工作方式0,如图5.18所示,8255工作在方式0只完成

26、简单的并行输入输出。方式0的控制字 如图5.18A所示,最高3位是100,其它D2位为0,D4、D3、D1、D0这4位可为任意,他们有16种组合。,2、工作方式1 这种方式与方式0的区别在于数据输入输出要在选通信号控制下进行,如图5.19所示。输入操作:其控制信号如下:STB,选通信号,由外部输入,低电平有效,该信号有效时将外部数据锁存到所选端口的输入锁存器中。STBA PC4;STBB PC2,此信号由C口的PC4和PC2输入。IBF,输入缓冲器满信号,向外部输出,高电平有效。该信号有效时,表示输入的数据已占用该端口的输入锁存器,实际上是对STB信号的回答,等待CPU执行IN指令将数据取走。

27、IBFA PC5;IBFB PC1。INTR,中断请求,向CPU输出,高电平有效。A组内部有中断允许触发器INTEA,B组内部有中断允许触发器INTEB,由PC4和PC2置位/复位来控制。INTRA PC3;INTRB PC0。采用中断方式时,当输入缓冲器满,STB的后沿置INTEA或INTEB为1,则向CPU发中断请求INTR,,在中断服务程序中安排执行IN指令,读取输入的数据,并使IBF为0。A口B口均可工作在方式1,完成输入操作。,输出操作,其控制信号如下:OBF,输出缓冲器满,向外部输出,低电平有效。该信号有效表示CPU已将数据写入该端口。OBFA PC7;OBFB PC1 ACK,外

28、部应答信号,由外部输入,低电平有效。该信号有效表示外设已收到由8255输出的8位数据,实际上是对OBF的回答。ACKA PC6;ACKB PC2 INTR,中断请求,向CPU输出,高电平有效。A组内部有中断允许触发器INTEA,B组内部有中断允许触发器INTEB,由PC6和PC2置位/复位来控制。INTRA PC3;INTRB PC0。,采用中断方式时,当ACK有效时OBF被复位为高电平,并将相应的 INTE置1,于是INTR输出高电平向CPU发中断请求,CPU响应中断,在中断服务程序中执行OUT指令,输出后续字节。方式1(输出)操作如图5.20所示。,在方式1下,A口和B口可以是输入或输出方

29、式,所以他们有四种组合。其间使用C口的6根线作为控制线,此时总会有其它2根线可作为输入或输出线。3、工作方式2 只有A口可以工作在方式2,当A口工作在方式2时,B口可以工作在方式1或方式0,其控制字如图5.21所示。INTRA:中断请求信号,高电平有效;INTE1:A口内部输出中断允许触发器,可由软件通过对PC6置位或复位来允许或禁止。INTE2:A口内部输入中断允许触发器,可由软件通过对PC4置位或复位来允许或禁止。其他信号意义与方式1时相同。,D7=1,方式控制字标志;D6=1方式2 D5=任意,D4不用;D3不用,这时PC4-PC7作为联络线 D2=1,B组方式1;=0,B组方式0 D1

30、=1,B口输入;=0 B口输出 D0=1,PC2-PC0输入;=0,PC2-PC0输出;PC3用作联络线 A口方式2实际上是A口在方式1下输入输出的组合。所需的5根联络线和方式1是一样的,只是中断请求只需要一根线。五、8255A的状态字 8255A的状态字为查询方式提供了状态标志位。8255A工作于方式1或方式2时的状态字可通过读端口C得到。状态字为查询方式提供了状态标志位,如输入缓冲器满信号IBF,输出缓冲器满信号OBF等。1、方式1的状态字格式,方式1输入状态字格式:A组 B组方式1输出状态字格式:A组 B组,要注意的是:端口C的状态字各位含义与相应外部引脚信号并不完全相同。INTEA和I

31、NTEB是内部控制信号,通过向控制口写入“端口C置1/置0控制字”来设定的,设定后,就会在状态字中反映出来。2、方式2状态字格式 方式2状态字也是从端口C读取,其格式如下图所示:其中:INTE1是输出中断允许位,INTE2是输入中断允许位。如前所述,它们也是利用“端口C置1/置0控制字”来使其置位或复位的。A口工作于方式2时,B口可以工作在方式1和方式0;若B口方式0,则端口C的PC2-PC0用于数据的输入输出;若B口工作在方式1,则PC2-PC0提供输入或输出的状态。,C口 A组状态 B组状态 A组方式2 B组方式0 输入输出 输出时 B组方式1 输入时 方式2状态字格式,六、8255A应用

32、举例 例1:将外设开关的二进制状态从A口输入,并由B口输出到LED显示器,如图5.22所示。,图中LED是8段发光二极管,当某段中流过电流,则该段发光。从图中可看出,8个发光二极管采用共阳极接法,当B口的某位输出高时,连接该位的那一段亮。所以输出数字的二进制编码如下:数字 发光的相应段 编码 0 a、b、c、d、e、f 00111111=3FH 1 b、c 00000110=06H 2 a、b、d、e、g 01011011=5BH 3 a、b、c、d、g 01001111=4FH 4 b、c、f、g 01100110=66H 5 a、c、d、f、g 01101101=6DH A a、b、c、e

33、、f、g 01110111=77H b c、d、e、f、g 01111100=7CH F a、e、f、g 01110001=71H,8255A端口地址为D0-D3H,A口工作于方式0输入,B口工作于方式0输出,程序如下:START:moval,90H;设置方式选择字 out0D3H,alAA:inal,0D0H;读端口A andal,0FH;取端口A低4位 movbx,offset LEDTAL;取LED显示代码表首地址 xlat;查表,AL(BX+AL)out0D1H,al;从端口B输出LED显示代码 movax,1000;延迟 BB:decax jnzBB jmpAA;返回到AA hlt

34、LEDTALDB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,67H,77H,7CH,39H,5EH,79H,71H,例2:实验8255A可编程并行接口方式0 硬件电路如下:,图5.23(a)8255A方式0用于实验,8255端口C接逻辑电平开关K0-K7,A口接LED显示电路L0-L7,图5.23(b)开关和LED的连接,8255A的端口地址为288H-28BH,地址译码器如下图所示:,图5.24 实验用的地址译码器,参考程序(E8255.ASM)如下:codesegmentassumecs:codestart:movdx,28bH;设8255为C口输入,A口

35、输出moval,8bHoutdx,alinout:movdx,28aH;从C口输入一数据inal,dxmovdx,288H;从A口输出刚才从C口输入的数据outdx,almovah,1;判断是否有键按下?int16Hjzinout;若无键按下,则返回到inoutmovah,4cH;否则,返回DOSint21Hcodeendsendstart,例3:8255A工作于方式1输出,作为与中断方式工作的打印机接口,如图5.25所示。,A口作为打印输出数据口,工作于方式1。此时C口的PC7、PC6和PC3是联络信号。设中断请求接到8259A的IR3,对应的中断类型号为0BH;8259A的初始化在主机系统

36、开启时完成。,字符输出操作由中断服务程序完成,设8255的口地址同例1,则主程序及中断服务子程序如下:主程序:MAIN:moval,0A0H;A组工作于方式1输出out0D3H,almovax,0movds,axmovbx,0BH*4;求中断类型0BH在矢量表 中的起始地址movax,offset INTHAND;取中断矢量INTHAND 的偏移地址movword ptrbx,ax;在中断矢量表中设置中断 矢量INTHAND的偏移地址incbxincbx,movax,seg INTHAND;取中断矢量INTHAND的段地址movword ptrbx,ax;在中断矢量表中设置中断矢量 INTHA

37、ND的段地址moval,0DH;使PC6=1,允许8255A中断out0D3H,alsti;开放CPU中断中断处理子程序:INTHAND:;保存现场 moval,si;SI为打印字符缓冲区指针out0D0H,al;字符送端口A;恢复现场iret;中断返回,例4:8255A用作键盘接口,如图5.26所示。端口 A地址为80H,B口为81H,控制口为83H。A口作输出口,B口作输入口,其工作原理采用两次扫描,第一次将PA3-PA0输出均为低电平,由PB3-PB0读入,判断是否有一个低电平,若没有,则继续第,一次扫描;若有低电平,则用软件消除抖动,延时10ms-20ms后,再去判别是否有低电平,若没

38、有,说明可能是干扰,必须重新实现第一次扫描,否则,经10ms-20ms后,仍然判别出有低电平,则确认有键按下;接着实现第二次扫描,判别是哪个键按下,这采用逐行扫描法。先扫第0行,即A口PA3-PA0输出1110,然后从B口读入,判别是否有低电平,若有,则可设别出0行上哪一列上有键按下;如果没有,则扫第二行,即A口PA3-PA0输出1101,然后从B口读入,依上述方法判别,直至扫描最后一行,总可以找到按下的某一键。其键盘扫描程序如下:;判别是否有键按下MOVAL,82H;8255A初始化,A口输出,B口输OUT83H,AL;入,均工作在方式0,MOVAL,00H;使PA3-PA0=0000OUT

39、80H,ALLOOA:INAL,81H;读B口ANDAL,0FH;屏蔽高4位CMPAL,0FH;判断是否有键按下JZLOOA;结果为0,无键按下,转LOOACALLD20MS;结果不为0,有键按下,延时20msINAL,81H;第2次读B口ANDAL,0FHCMPAL,0FH;判别B口是否有低电平输入JZLOOA;若B口没有低电平输入,则是干扰,;转LOOA,否则,有键按下,执行下面程序;判断是哪个键按下?START:MOVBL,4;行数送BLMOVBH,4;列数送BHMOVAL,0FEH;D0=0,准备先扫描第0行MOVCL,0FH;键盘屏蔽码送CLMOVCH,0FFH;CH中存放起始键号,

40、LOP1:OUT80H,AL;A口输出,扫描一行ROLAL,1;修改扫描码,准备扫描下一行MOVAH,AL;暂时保存INAL,81H;B口输入,读列值ANDAL,CL;屏蔽高4位CMPAL,CL;比较JNZLOP2;有列线为0,转LOP2,找列线ADDCH,BH;无键按下,修改键号,;准备找下一行MOVAL,AH;恢复扫描码DECBL;行数减1JNZLOP1;行未扫完转LOP1JMPSTART;重新扫描LOP2:INCCH;键号增1RORAL,1;右移一位JCLOP2;无键按下,查下一列线MOVAL,CH;已找到,键号送AL,CMPAL,0;判断是否是0号键JZKEY0;是0号键按下,转KEY0CMPAL,1;否则,判断是否为1号键JZKEY1;是,转KEY1CMPAL,0EH;判断是否是14号键JZKEY14;是,转KEY14JMPKEY15;不是0-14号键,一定是15号键该4行4列矩阵键盘接口很容易扩展,无论增加行还是列均可扩充键的数量,只需对程序稍加改动就可以。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号