课件:可编程外围接口芯片8255A及其应用.ppt_第1页
课件:可编程外围接口芯片8255A及其应用.ppt_第2页
课件:可编程外围接口芯片8255A及其应用.ppt_第3页
课件:可编程外围接口芯片8255A及其应用.ppt_第4页
课件:可编程外围接口芯片8255A及其应用.ppt_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章 可编程外围接口芯片8255A及其应用,9-1 8255A的工作原理 一、 8255A的结构和功能 二、 8255A的控制字 三、8255A的工作方式和C口状态字 9-2 8255A的应用举例 一、基本输入输出应用举例 二、键盘接口 三、 8255A在PC/XT机中的应用 四、 PC/XT机中的扬声器接口电路 五、并行打印机接口,Intel 8255A是一个通用的可编程的并行接口芯片(Programmable Peripherial Interface,PPI) 它有三个并行I/O口,又可通过编程设置多种工作方式, 价格低廉,使用方便, 可以直接与Intel系列的芯片连接使用, 在中小系统中有着广泛的应用。,一、 8255A的结构和功能,图9.1 8255A的引脚图,图9.2 8255A的内部结构图,1三个数据端口A,B,C 这三个端口均可看作是I/O口,但它们的结构和功能也稍有不同。 A口:是一个独立的8位I/O口,它的内部有一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器,A口输入输出时数据均能锁存。,B口:也是一个独立的8位I/O口,内部有一个8位的输出锁存器/缓冲器,一个8位的输入缓冲器,仅对输出数据有锁存功能。 C口:可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。内部有一个8位的输出锁存器/缓冲器,一个8位的输入缓冲器,也是仅对输出数据进行锁存。,2A组和B组的控制电路 这是两组根据CPU命令控制8255A工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255A的工作方式,也可以根据编程命令来对C口的指定位进行置/复位的操作。 A组控制电路用来控制A口及C口的高4位(PC7-PC4); B组控制电路用来控制B口及C口的低4位(PC3-PC0) 。,3数据总线缓冲器 8位的双向的三态缓冲器。作为8255A与系统总线连接的界面,输入/输出的数据,CPU的编程命令以及外设通过8255A传送的工作状态等信息,都是通过它来传输的。 4读/写控制逻辑 读/写控制逻辑电路负责管理8255A的数据传输过程。它接收片选信号及系统读信号、写信号、复位信号RESET,还有来自系统地址总线的口地址选择信号A0和A1。,5、8255A的引脚功能 8255A的引脚信号可以分为两组: 一组是面向CPU的信号,一组是面向外设的信号。 面向CPU的引脚信号及功能 D0-D7:8位,双向,三态数据线,用来与系统数据总线相连; RESET:复位信号,高电平有效,输入,用来清除8255A的内部寄存器,并 置A口,B口,C口均为输入方式; CS 片选,输入,用来决定芯片是否被选中; RD 读信号,输入,控制8255A将数据或状态信息送给CPU; WR 写信号,输入,控制CPU将数据或控制信息送到8255A;,A1,AO:内部口地址的选择,输入。这两个引脚上的信号组合决定对8255A内部的哪一个口或寄存器进行操作。8255A内部共有4个端口:A口,B口,C口和控制口,两个引脚的信号组合选中端口见下表。,CS、WR、RD、A1、A0这几个信号的组合决定了8255A的所有具体操作,A1、A0端口选择情况,见右表 由CS*、A1、A0、RD*、WR*引脚的不 同组合,实现各种不同的功能。见下表:, 面向外设的引脚信号及功能 PA0PA7:A组数据信号,用来连接外设; PB0PB7:B组数据信号,用来连接外设; PC0PC7:C组数据信号,用来连接外设或者作为控制信号。,二、8255A的控制字,8255A有两类控制字,1、方式选择控制字 定义各端口的工作方式,2、置位复位控制字 对C端口的的任一位进行置位复位,或用于设置INTE位(方式1,2)。,1、方式选择控制字 控制字要写入8255A的控制口,写入控制字之后,8255A才能按指定的工作方式工作。 8255A的控制字格式与各位的功能如图9-4所示。,1、方式0基本输入输出方式 2、方式1选通输入输出方式 3、方式2双向总线I/O方式,当系统复位时,8255A的RESET输入端为高电平,使8255A复位,所有的数据端口被置成输入方式 当复位信号撤除后8255A继续保持复位时预置的输入方式。 通过用输出指令对8259A的控制字寄存器编程,写入设定工作方式的控制字,可以让3个数据口以不同的方式工作。 其中,A口可工作于3种方式的任一种, B口只能工作于方式0和方式1,不能工作于方式2, C口常被分成两个4位的端口,除了用作输入输出端口外,还可配合A口和B口工作,为这两个端口输入输出操作提供联络信号。,【例1】 某系统要求使用8255A的A口方式0输入,B口方式0输出,C口高4位方式0输出,C口低4位方式0输入。 则控制字为: 10010001B 即91H 初始化程序为: MOV AL, 91H OUT CTRL_PORT,AL,(2) C口的置位/复位功能 只有C口才有,它是通过向控制口写入按指定位置位/复位的控制字来实现的。C口的这个功能可用于设置方式1的中断允许,可以设置外设的启/停等。按位置位/复位的控制字格式如图9-5所示,P329 例 【例2】 A口方式2,要求发两个中断允许,即PC4和PC6均需置位。B口方式1要求使PC2置位来开放中断。初始化程序可补充完整如下。 MOV AL,0C4H OUT CTRL_PORT,AL ;设置工作方式 MOV AL,09H OUT CTRL_PORT,AL ;PC4置位,A口输入允许中断 MOV AL,ODH OUT CTRL_PORT,AL ;PC6置位,A口输出允许中断 MOV AL, 05H OUT CTRL_PORT,AL ;PC2置位;B口输出允许中断,三、8255A的工作方式和C口状态字,1方式0 1)方式0是一种基本的输入/输出方式,只能用于无条件传送或查询传送; 2)A口和B口可作为8位端口,C口的高4位和低4位可作为两个4位端; 在实际使用中,C口的两半部分也可以合在一起,构成一个8位端口。 这样8255A可构成3个8位I/O端口,或两个8位,两个4位端口,以适应不同使用场合。 3)CPU可直接用输入指令从指定端口中读取数据,或用输出指令将数据写入指定的端口,无需任何其他用于应答的联络信号。 对于方式0,还规定输出信号可被锁存,输入不能锁存。 端口信号线之间无固定的时序关系,用户根据数据传送的要求决定输入输出的操作过程。,图9.6 各端口均工作于方式0时的控制字,8255A方式0的时序 1)8255A方式0输入时序图,2)8255A方式0输出时序图,例:设8255A的控制字的端口地址为304H,要求A口和B口工作于方式0, A口、B口和C口的高4位作输入,低4位作输出 MOV DX,304H MOV AL,10011010B ;A、B、C口都工作于方式0 OUT DX,AL,例 用8255的PA口作为A/D并行输入接口,如下图;A口工作于方式0,8255的端口地址为300H,301H,302H,303H; 写出8255A的初始化程序及启动A/D转换的程序段。,解: 1)8255A的初始化程序: MOV DX,304H MOV AL,10010010B ;A、B、C口都工作于方式0 OUT DX,AL ;A口和B口为输入,C口为输出,2)启动A/D转换及读取转换数据程序段: MOV DX,303H MOV AL,00001111B OUT DX,AL MOV AL,00001110B OUT DX,AL ;送置位/复位控制字,在PC7脚产生一正方波输出,启动ADC,MOV DX,301H AGAIN:IN AL,DX ;输入B口数据 TEST AL,00010000B ;PB4=0? JNZ AGAIN ;等待A/D转换结束 MOV DX,300H IN AL,DX ;从A口中读取转换数据,2方式1 也称为选通输入/输出方式, PA口和PB口为数据口,都可工作在输入或输出方式。 这两个8位数据口的输入、输出数据都能锁存,但是必须在联络信号控制下才能完成I/O操作。 端口C的6根线用来产生或接收这些联络信号。 特点: 方式1是单向选通输入/输出方式;设有专门的中断请求和联络信号线; PA口和PB口为数据口,PC口的大部分引脚分配作联络信号用; 各联络信号之间有固定的时序关系; 输入/输出操作产生确定的状态字,供查询或中断请求之用; 方式1常用于查询传送或中断传送。,8255A的工作方式方式1(选通工作方式) 利用一组选通控制信号控制A端口和B端口的数据输入输出。 特点: 1、A、B口作输入或输出口,C口分为两部分,其部分位(6位)固定用作A口、B口的选通控制信号。 2、C口的剩余位仍可作数据位使用。 3、A口、B口在作为输入和输出时的选通信号不同。 方式1的应用:主要用于中断控制方式下的输入输出。 说明:C口除部分位用作选通信号外,其余位(2位)可工作在方式0下,作为输入或输出线,用程序指定其数据传送方向。,8255A的工作方式方式1(选通工作方式) A、B口都设为方式1输入 C口的联络信号: STB选通信号,由外设输入。=0时, 将外设数据送入8255的输入锁存器。 A组 对应PC4;B组对应PC2。 IBF输入锁存器满信号,由8255A输出。 =1时通知外设输入的数据已写入缓冲器,此 时不能送下一个数据。此信号由STB的前沿 产生。CPU用IN指令取走数据后(RD的后 沿),此信号被清除。 A组对应PC5;B组对 应PC1。,选通输入方式 A口和B口工作于选通输入方式,则它们的端口状态、联络信号和控制字如下图所示,当A口工作于方式1,并作输入端口时,端口C的PC4、PC4和 PC3用作端口A的状态和控制线; 当B口工作于方式1,并作输入端口时,端口C的PC2、PC1和 PC0用作端口A的状态和控制线; 端口C剩下的PC6和PC7,任然可用作输入或输出,由方式控制字中的D3位来定义PC6和PC7的传送方向。 D3=1时, PC6和PC7作输入; D3=0时, PC6和PC7作输出 在方式 1、2下,C口作为A口、B口联络信号的引脚,其动作关系在芯片设计和制造时已固定,不由用户自己安排,也不能编程改变。即C口作为联络信号的引脚:不受方式控制字的控制。该出则出,该入则入。,各控制联络信号的意义如下: STB(Strode) 选通信号,低电平有效,外部输入。 当此信号有效时,8255A将外部设备通过端口数据线PA7-PA0(对于A口)或PB7-PB0(对于B口)输入的数据送到所选端口的输入缓冲器中。 端口A的选通信号STBA从PC4引入,端口B的选通信号STBB从PC2引入。,IBF(Input Buffer Full) 输入缓冲器满信号,高电平有效。 8255A给外设的状态信号,当此信号有效时,表示输入设备送来的数据已传送到8255A的输入缓冲器中,即缓冲器已满,8255A不能再接收别的数据。 此信号一般供CPU查询。IBF由STB信号置位,而由读信号的上升沿将其复位,复位后表示输入缓冲器已空,又允许外设将一个新的数据送到8255A。 PC5作端口A的输入缓冲器满信号IBFA,PC1作端口B的输入缓冲器满信号IBFB,INTE(Interrupt Enable) 中断允许信号。 控制8255A能否向CPU发中断请求的信号,没有外部引出脚。 在A组和B组的控制电路中,分别设有中断请求触发器INTE A和INTE B,只有用软件才能使这两个触发器置1或清0. 其中,INTE A由置位/复位控制字中的PC4控制, INTE B由PC2控制。 对8255A写入置位/复位控制字使PC4置1时,INTE A置1,表示允许A口中断; PC4清0,禁止A口发中断请求,即A口处在中断屏蔽状态。同样,通过编程PC2来控制INTE B,允许或禁止B口中断。 由于这两个触发器无外部引出脚, PC4和PC2脚上出现高电平或低电平信号时,并不改变中断允许触发器的状态。,INTR(Interrupt Request) 中断请求信号。 8255A向CPU发出的中断请求信号,高电平有效。 只有当STB、IBF和INTE都是高电平时,NTR才能变为高电平。 即当选通信号结束,已将输入设备提供的一个数据送到输入缓冲器中,输入缓冲器满信号IBF已变成高电平,并且中断时允许的情况下,8255A才能向CPU发中断请求信号INTR。 CPU响应中断后,可用IN指令读取数据,读信号RD的下降沿将INTR复位为低电平。 INTR通常和8259A的一个中断请求输入段IR相连,通过8259A的输出端INT向CPU发中断请求。 A口的中断请求信号INTRA由PC3引脚输出,B口的中断请求信号INTRB由PC0引脚输出。,方式1选通输入时序如下:,分析方式1选通输入时的工作过程: 当外设把一个数据送到端口数据线PA7-PA0(对于A口)或PB7-PB0(对于B口)后,就向8255A发负脉冲选通信号STB,外设的输入数据锁存到8255A的输入锁存器中。 选通信号发出后,经tSIB时间,IBF有效,它作为对输入设备的回答信号,用于通知外设输入缓冲器已满,不要再送新的数据过来。 选通信号结束后,经tSIT时间,若STB、IBF和INTE同为高电平,使INTR有效。此信号向CPU发中断请求,CPU响应中断后,通过执行中断服务程序中IN指令,使读信号RD有效。 读信号有效后,经tRIT时间,使INTR变低,清除中断。 读信号结束后,数据已读入累加器,经tRIB时间,IBF变低,表示缓冲器已空,一次数据输入过程结束,通知外设可以再送一个新的数据来。,(3)选通输出方式 A口和B口工作于选通输出方式,则它们的端口状态、联络信号和控制字如下图所示,当A口工作于方式1,并作输出端口时,端口C的PC3、PC6和 PC7用作端口A的状态和控制线; 当B口工作于方式1,并作输入端口时,端口C的PC2、PC1和 PC0用作端口A的状态和控制线; 端口C剩下的PC4和PC5,任然可用作输入或输出,由方式控制字中的D3位来定义PC4和PC5的传送方向。 D3=1时, PC4和PC5作输入; D3=0时, PC6和PC7作输出,各控制联络信号的意义如下: OBF(Output Buffer Full) 输出缓冲器满信号,输出,低电平有效。 当此信号有效时,表示已将数据写到8255A的指定输出端口,即数据已被输出锁存器锁存,并出现在端口数据线PA7-PA0(对于A口)和PB7-PB0 (对于B口)上,通知外设将数据取走。 此信号是8255A给外设的选通信号。 OBF由输出指令WR的上升沿置成低电平,而外设回答信号ACK将其恢复成高电平。 PC7被指定作A口的输出缓冲器满信号OBFA,PC1作B口输出缓冲器满信号OBFB。,ACK(Acknouledge) 外设的回答信号,低电平有效,由外设送给8255A。 当此信号有效时,表示CPU输出到8255A的A口或B口的数据已被外设接收。 PC6作端口A的回答信号ACKA,PC2作端口B的输入缓冲器满信号ACKB,INTE(Interrupt Enable) 中断允许信号。 其意义与A口、B口工作于选通输入方式时的INTE信号一样。 INTE为1时,端口处于中断允许状态,为0时,端口处于中断屏蔽状态。 其中,A口的中断允许信号INTE A由置位/复位控制字中的PC6控制, B口的中断允许信号INTE B由PC2控制。 对8255A写入置位/复位控制字使其置1或清0,来决定中断允许或屏蔽。,INTR(Interrupt Request) 中断请求信号。 当中断允许时,输出设备收到CPU输出的数据后,该信号变高,作为向CPU提出中断请求,要求CPU再输出一个数据给外设。 只有当ACK、OBF和INTE都是高电平时,INTR才能变为高电平。 写信号将INTR复位成低电平,INTR通常与8259A的一个中断输入引脚IR相连,通过8259A向CPU发中断请求。 PC3引脚用作A口的中断请求信号线INTRA, PC3引脚用作A口的中断请求信号线INTRB。,方式1选通输出时序如下:,分析方式1选通输出时的工作过程: 当8255A的输出缓冲器空,且中断允许时,可向CPU发中断请求。CPU响应中断后,转入中断服务程序,用OUT指令将CPU中的数据输出到8255A的输出缓冲器中,此时WR信号变低。 经tWIT时间后,清除中断请求信号INTR。 WR信号的后沿使OBF有效,通知外设从8255A输出缓冲器中取走数据。 外设收到数据后,发应答信号ACK。 ACK有效后,再经tAOB时间,OBF无效,表示缓冲器已空。 ACK变高电平后,再经tAIT时间,INTR变高,向CPU发中断请求,要求CPU送新的数据。数据传送过程又按上述的顺序重复进行。, 8255状态字的格式, 方式1下8255状态字中INTE位的置位和复位 若禁止PA口输入中断请求 MOV DX,303H ;8255命令口 MOV AL,00001000B ;置PC4=0,禁止中断请求 OUT DX,AL 若允许PA口输入中断请求 MOV DX,303H ;8255命令口 MOV AL,00001001B ;置PC4=1,允许中断请求 OUT DX,AL 若允许PA口输出中断请求 MOV DX,303H ;8255命令口 MOV AL,00001101B ;置PC6=1,允许中断请求 OUT DX,AL, 若允许PB口输入中断请求 MOV DX,303H ;8255命令口 MOV AL,00000101B ;置PC2=1,允许中断请求 OUT DX,AL 若禁止PB口输入中断请求 MOV DX,303H ;8255命令口 MOV AL,00000100B ;置PC2=0,禁止中断请求 OUT DX,AL 若允许PB口输出中断请求 MOV DX,303H ;8255命令口 MOV AL,00000101B ;置PC2=1,允许中断请求 OUT DX,AL,(5)方式1应用举例 在甲乙两台微机之间并行传送1K字节数据。甲机发送,乙机接受。甲机一侧的8255A采用方式1工作,乙机一侧的8255A采用方式0工作;两机的CPU与接口之间都采用查询方式交换数据。,a. 硬件连接,软件编程 甲机发送程序: MOV DX,303H ;8255A命令口 MOV AL,10100000B ;PA口方式1,输出 OUT DX,AL MOV AL,00001101B ;置发送中断允许INTEA=1 OUT DX,AL,MOV AX,030H ;发送数据内存首址 MOV ES,AX MOV BX,00H MOV CX,3FFH ;发送字节数(1KB) MOV DX,300H MOV AL,ES:BX OUT DX,AL ;向A口写第一个数,产生OBF信号,INC BX ;内存地址加1 DEC CX ;字节数减1 L: MOV DX,302H ;8255状态口(PC口) IN AL,DX ;查输出缓冲器是否为空OFB=1? AND AL,80H ;PC7=1?,可查INTRA =1? JZ L,MOV DX,300H ;8255PA口地址 MOV AL,ES:BX OUT DX,AL INC BX ;内存地址加1 DEC CX ;字节数减1 JNZ L MOV AX,4C00H ;返回DOS INT 21H, 乙机接受程序: MOV DX,303H ;8255A命令口 MOV AL,10011000B ;PA口方式0,输入 OUT DX,AL ;PC口上半部输入, 下半部输出 MOV AL,00000001B ;置ACK=1(PC0=1) OUT DX,AL,MOV AX,040H ;接受数据内存首址 MOV ES,AX MOV BX,00H MOV CX,3FFH ;发送字节数(1KB),L1: MOV DX,302H IN AL,DX ;查甲机OBF=0?( PC4=0) AND AL,10H JNZ L1 ;若无数据则等待,MOV DX,300H IN AL,DX ;从A口读数据 MOV ES:BX,AL MOV DX,303H ;产生ACK信号 MOV AL,0000000B ;PC0=0 OUT DX,AL,NOP NOP MOV AL,00000001B ;置ACK=1(PC0=1) OUT DX,AL INC BX ;内存地址加1 DEC CX ;字节数减1 JNZ L1 MOV AX,4C00H ;返回DOS INT 21H,3方式2 选通输入/输出方式组合(自己看) (1)方式2的特点 PA口为双向选通输入/输出,只有A口才有此方式 ; 设置专门的中断请求和联络信号线;可采用查询传送或中断传送,C口有5根线用作A口的应答联络信号,其余3根线可用作方式0,也可用作B口方式1的应答联络线; 各联络信号间的时序关系和状态字,是方式1下输入和输出两种操作的组合,各应答信号的功能也相同。而C口余下的PC0PC2正好可以充当B 口方式1的应答线,若B口不用或工作于方式0,则这三条线也可工作于方式0。,方式2的组态 STB: PC4 IBF: PC5 OBF: PC6 ACK: PC7 INTR: PC3,(2)8255方式2的引脚分配,(3)8255方式2的工作时序,(4)8255方式2的状态字,D7 D6 D5 D4 D3 D2 D1 D0,OBFA INTE1 IBFA INTE2 INTRA,INTEB OBFB INTRB,A组状态,B组状态,方式2,输入时,输出时,方式0 输入/输出,方式1,D3,D7,(5) 方式2的应用场合 方式2是一种双向工作方式,如果一个并行外部设备既可以作为输入设备,又可以作为输出设备,并且输入输出动作不会同时进行。 (6) 方式2和其它方式的组合 方式2和方式0输入的组合:控制字:11XXX01T 方式2和方式0输出的组合:控制字:11XXX00T 方式2和方式1输入的组合:控制字:11XXX11X 方式2和方式1输出的组合:控制字:11XXX10X 其中X表示与其取值无关,而T表示视情况可取1或0。,例 下图采用一个8255芯片和软盘控制器相连,箭头标明了I/O的方向,根据该图,试写出8255的初始化程序。设8255端口地址为0300-0303H。,图 8255用作软盘基本接口, 工作方式控制字为:11XXX000B 初始化程序为: MOV DX,303H MOV AL,0C0H OUT DX,AL MOV AL,00001001B OUT DX,AL ;PC4置位,开放输入中断 MOV AL,00001101B OUT DX,AL ;PC6置位,开放输出中断,(7)8255方式2应用举例 1)要求 主从两个微机进行并行传送,共传送256个字节。主机一侧的8255A采用方式2,且用中断方式传送数据,从机一侧8255A工作在方式0,采用查询方式传送数据。 2)分析 接口电路中采用中断控制器8259A;8255A的中断请求线INTR接到8259A的IRQ2上。,3)硬件设计 主机一侧的8255A,PA口作双向传送,查询IBF和OBF状态来确定输入或输出;从机一侧8255A的PA、PB口是单向传送,分别作输出、输入。,4)软件设计 讨论主机一侧的编程,包括初始化,主程序和中断服务程序。 8255A初始化 MOV DX,303H ;8255A控制口 MOV AL,C0H ;方式字:A口为方式2 OUT DX,AL MOV AL,09H ;置位PC4 ,INTE2=1,输入中断允许 OUT DX,AL MOV AL,0DH ;置位PC6 ,INTE1=1,输出中断允许 OUT DX,AL,MOV SI,300H ;发送数据块首址 MOV DI,410H ;接受数据块首址 MOV CX,0FFH ;发送与接受字节数 AGAIN:STI ;开中断 HLT ;等待中断 CLI ;关中断 DEC CX ;字节数减1 JNZ AGAIN ;未完,继续 MOV AX,4C00H ;返回DOS INT 21H, 中断服务程序 T_R PROC FAR MOV DX,303H ;8255A控制口 MOV AL,08H OUT DX,AL ;复位PC4 ,INTE2=0,禁止输入中断 MOV AL,0CH OUT DX,AL ;复位PC6 ,INTE1=0,禁止输出中断 CLI MOV DX,302H ;8255A状态口 IN AL,DX ;查中断源,读状态字 MOV AH,AL AND AL,20H ;检查状态位IBF=1,是输入? JZ OUTP,INP:MOV DX,300H ;是,则从A口读数 IN AL,DX MOV DI,AL ;存入内存区 INC DI ;内存地址+1 JMP RETURN ;准备中断返回 OUTP:MOV DX,300H ;是,则从A口输出数据 MOV AL,SI ;从内存取数 OUT DX,AL INC SI ;内存地址+1,RETURN:MOV DX,303H MOV AL,0DH ;允许输出中断 OUT DX,AL MOV AL,09H ;允许输入中断 OUT DX,AL MOV AL,62H ;OCW2,中断结束(写EOI) OUT 20H,AL IRET T_R ENDP,4、C口状态字 方式1状态字,其中D7-D3为A组状态字, D2-D0为B组状态字,其中D7-D3为A组状态字, D2-D0为B组状态字,方式2状态字,其中D7-D3为A组状态字, D2-D0为B组用,B口工作于方式1时,这3位作B口状态字, B口工作于方式0时,这3位作输入输出用,92 8255A的应用举例,18255A的编程 对8255A的编程涉及到两个内容: 写控制字设置工作方式等信息, 使C口的指定位置位/复位的功能。 注:均写入控制端口 控制字格式 控制字要写入8255A的控制口,写入控制字之后,8255A才能按指定的工作方式工作。 8255A的控制字格式与各位的功能下图所示。,【例】 某系统要求使用8255A的A口方式0输入,B口方式0输出,C口高4位方式0输出,C口低4位方式0输入。 则控制字为: 10010001B 即91H 初始化程序为: MOV AL, 91H OUT CTRL_PORT,AL,(2) C口的置位/复位功能 只有C口才有,它是通过向控制口写入按指定位置位/复位的控制字来实现的。C口的这个功能可用于设置方式1的中断允许,可以设置外设的启/停等。按位置位/复位的控制字格式图所示。,【例】 A口方式2,要求发两个中断允许,即PC4和PC6均需置位。B口方式1要求使PC2置位来开放中断。初始化程序可补充完整如下。 MOV AL,0C4H OUT CTRL_PORT,AL ;设置工作方式 MOV AL,09H OUT CTRL_PORT,AL ;PC4置位,A口输入允许中断 MOV AL,ODH OUT CTRL_PORT,AL ;PC6置位,A口输出允许中断 MOV AL, 05H OUT CTRL_PORT,AL ;PC2置位;B口输出允许中断,图 打印机数据传输时序,【例】 利用8255A的A口方式0与微型打印机相连,将内存缓冲区BUFF中的字符打印输出。试完成相应的软硬件设计。(CPU为8088),首先我们分析一下打印机的工作。微型打印机和主机之间的接口采用并行接口。,它的工作流程:主机将要打印的数据送上数据线,然后发选通信号。打印机将数据读入,同时使BUSY线为高,通知主机停止送数。这时,打印机内部对读入的数据进行处理。处理完以后使ACK有效,同时使BUSY失效,通知主机可以发下一个数据。硬件连线如下图:,说明: 由PC0充当打印机的选通信号,通过对PC0的置位/复位来产生选通。同时,由PC7来接收打印机发出的“BUSY”信号作为能否输出的查询。 8255A的控制字为:10001000 即88H A口方式0,输出;C口高位方式0输入,低位方式0输出 PC0置位: 00000001 即 01H PC0复位: 00000000 即 00H 8255A的4个口地址分别为:00H,01H,02H,03H。,编制程序如下: DADA SEGMENT BUFF DB This is a print program!,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START:MOV AX, DATA MOV DS, AX MOV SI,OFFSET BUFF MOV AL, 88H ;8255A初始化,A口方式0,输出 OUT 03H, AL ; C口高位方式0输入,低位方式0输出 MOV AL, 01H; OUT 03H,AL ;使PC0置位,即使选通无效,WAIT: IN AL, 02H TEST AL, 80H ;检测PC7是否为1即是否忙 JNZ WAIT ; 为忙则等待 MOV AL,SI CMP AL,$ ;是否结束符 JZ DONE ; 是则输出回车 OUT 00H,AL ;不是结束符,则从A口输出 MOV AL,00H OUT 03H, AL MOV AL, 01H OUT 03H,AL ;产生选通信号 INC SI ;修改指针,指向下一个字符 JMP WAIT,DONE: MOV AL,0DH OUT 00H,AL ;输出回车符 MOV AL, 00H OUT 03H,AL MOV AL, 01H OUT 03H,AL ;产生选通 WAIT1: IN AL, 02H TEST AL, 80H ;检测PC7是否为1即是否忙 JNZ WAIT 1 ; 为忙则等待 MOV AL,0AH OUT 00H,AL ;输出换行符 MOV AL, 00H OUT 03H,AL MOV AL, 01H OUT 03H,AL ;产生选通 MOV AH,4CH INT 21H CODE ENDS END START,【例】 将上例中8255A的工作方式改为方式1,采用中断方式将BUFF开始的缓冲区中的100个字符从打印机输出。(假设打印机接口仍采用Centronics标准)。 分析:仍用PC0作为打印机的选通,打印机的ACK作为8255A的A口,ACK的8255A的中断请求信号(PC3)接至系统中断控制器8259A的IR3,其它硬件连线同上例,如图所示。,图 中断方式硬件连线,8255A的控制字为:1010XXX0 PC0置位: 00000001 即 01H PC0复位: 00000000 即 00H PC6置位: 00001101 即 0DH ,允许8255A的A口输出中断 由硬件连线可以分析出,8255A的4个口地址分别为:00H,01H,02H,03H。 假设8259A初始化时送ICW2为08H,则8255A A口的中断类型码是0BH,此中断类型码对应的中断向量应放到中断向量表从2CH开始的4个单元中。 主程序:,MAIN: MOV AL,0A0H OUT 03H,AL ;设置8255A的控制字 MOV AL,01H ;使选通无效 OUT 03H,AL XOR AX,AX MOV DS,AX MOV AX,OFFSET ROUTINTR MOV WORD PTR 002CH,AX MOV AX,SEG ROUTINTR MOV WORD PTR 002EH,AX ;送中断向量 MOV AL,0DH OUT 03H,AL ;使8255A A口输出允许中断 MOV DI,OFFSET BUFF ;设置地址指针,MOV CX,99 ;设置计数器初值 MOV AL,DI OUT 00H,AL ;输出一个字符 INC DI MOV AL,00H OUT 03H,AL ;产生选通 INC AL OUT 03H,AL ;撤消选通 STI ;开中断 NEXT: HLT ;等待中断 LOOP NEXT ;修改计数器的值,指向下一个要输出的字符 HLT,中断服务子程序如下: ROUTINTR:MOV AL,DI OUT 00H,AL :从A口输出一个字符 MOV AL,00H OUT 03H,AL :产生选通 INC AL MOV 03H,AL ;撤消选通 INC DI :修改地址指针 IRET :中断返回,【思考】 是否可以采用A口的OBF作为打印机的选通信号?如可以的话,软件该如何修改?是否可用打印机的BUSY作为8255的A口ACK ? 【习题与思考】 1试分析8255A方式0、方式1和方式2的主要区别,并分别说明它们适合于什么应用场合。 2当8255A的A口工作在方式2时,其端口B适合于什么样的功能?写出此时各种不同组合情况的控制字。,3若8255A的端口A定义为方式0,输入;端口B定义为方式1,输出;端口C的上半部定义为方式0,输出。试编写初始化程序。(口地址为80H-83H) 4假设一片8255A的使用情况如下:A口为方式0输入,B口为方式0输出。此时连接的CPU为8086,地址线的A1、A2分别接至8255A的A0、A1,而芯片的CS来自A3A4A5A6A7=00101,试完成8255A的端口地址和初始化程序。,二、 微机与键盘的接口 矩阵式键盘的结构 在微型机系统中,键盘是一种最常用的外设,它由多个开关组合而成。可以用来制造键盘的按键开关有好多种,最常用的有机械式、薄膜式、电容式和霍尔效应式等4种。机械式开关较便宜,但压键时会产生触点抖动,即在触点可靠地接通前会通断多次,而且长期使用后可靠性会降低。薄膜式开关可做成很薄的密封单元,不易受外界潮气或环境污染,常用于微波炉、医疗仪器或电子秤等设备的按键。电容式开关没有抖动问题,但需要特制电路来测电容的变化。霍尔效应按键是另一种无机械触点的开关,具有很好的密封性,平均寿命高达1亿次甚至更高,但开关机制复杂,价格很贵。计算机上用的键盘一般都用机械式开关。,对于大多数的键盘,按键被排成行和列的矩阵。下面以机械式开关构成的16个键的键盘为例,来讨论键盘接口的工作原理,这种原理对采用其它类型的开关的键盘也是适用的。 设16个键分别为16进制数字09和AF,键盘排列、连线及接口电路如下图所示。16个键排成4行4列的矩阵,接到微型机的一对端口上。端口由8255A构成,其中端口A作输出,端口B作输入。矩阵的4条行线接到输出端口A的PA3PA0,用程序能改变这4条行线上的电平。4条列线连到输人端口B的PB3PB0,4条行线还同时接到输人端口B的PB7PB4上。这样,用输入指令读取B口状态时,可同时读取键盘的行列信号。,在无键压下时,由于接到+5V上的上拉电阻的作用,列线被置成高电平。压下某一键后,该键所在的行线和列线接通。这时,如果向被压下键所在的行线上输出一个低电平信号,则对应的列线也呈现低电平。当从B口读取列线信号时,便能检测到该列线上的低电平。读取B口的状态时,还能读到行线上的低电平信号。这样,根据读入的行和列状态中低电平的位置,便能确定哪个键被压下了。,二、键盘与微机的接口及处理方式 行扫描方式 识别键盘上哪个键被压下的过程称为键盘扫描,上述键盘的扫描包含以下几步: (1) 检测是否所有键都松开了,若没有则反复检测。 (2) 当所有键都松开了,再检测是否有键压下,若无键压下则反复检测。 (3) 若有键压下,要消除键抖动,确认有键压下。 (4) 对压下的键进行编码,将该键的行列信号转换成16进制码,由此确定哪个键被压下了。如出现多键重接的情况,只有在其它键均释放后,仅剩一个键闭合时,才把此键当作本次压下的键。 (5) 该键释放后,再回到(2)。,检测矩阵中是否有键压下的一种简单方法是,自输出口A向所有行线输出0电平,再通过B口的低4位读取列值,若其中有0值,便是有键压下了。 在开始一次扫描时,先应确认上一次压下的键是否已松开。即先向所有行线 输出低电平,再读人各列线值,只有当所有的行线和列线均为高电平,表示以前压下的键部已释放了,才开始检测是否有键压下。 当检测到有键压下后,必须消除键抖动( Debance)。消除键抖动的常用方法是在检测到有键压下后,延长一定时间(通常为20ms),再检查该键是否仍被压着。若是,才认定该键确实被接下了,而不是干扰。,确认有键压下后,再确定被压下键所在的行列号。为获取行列信息,先从A口输出一个低电平到一行线上,再从B口读人各列的值,若没有一列为低电平,说明压下的键不在此行。于是,再向下一行输出一个低电平,再检测各列线上是否有低电平。依次对每一行重复这个过程,直至查到某一列线上出现低电平为止。被置成低电平的行和读到低电平的列,便是被压下键所在的行列值。 已知被压下的键所在的行号(03)和列号门3)后,就能得到该键的扫描码。例如,对于数字0,它位于3行、3列,压下“0”键时,从B口可读得D7位和D3位为0,其余位为1,所以数字0的编码为01110111B,即77H;对于数字6,处于2行1列,压下6键时,D6位和D1位0以其余位为1,所以数字6的编码为10111101B=BDH。类似地,其余各键的编码也可一一求得。将这些编码值列成表,放在数据段中,用查表程序来查对,便能确定压下的是什么键。,程序实现 下面是键盘检测、去抖动、键值编码和确定键名的汇编语言程序。程序运行后,若返回值AH=0,表示已读到有效的键值,并在AL中存有0F键的16进制代码;若AH=l,则表示出错。 ;端口地址 PORT-A EQU 0FF9H;8255 A口地址 PORT-B EQU 0FFBH;8255 B口地址 PORT-CTL EQU 0FFFH;8255控制口地址 ;数据段,键盘扫描码表 DAT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论