第-10-章-并行接口芯片8255-微机原理课件_第1页
第-10-章-并行接口芯片8255-微机原理课件_第2页
第-10-章-并行接口芯片8255-微机原理课件_第3页
第-10-章-并行接口芯片8255-微机原理课件_第4页
第-10-章-并行接口芯片8255-微机原理课件_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

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

文档简介

第10章并行接口芯片825510.1可编程并行输入输出接口芯片8255-A的结构10.2方式选择10.3方式0的功能10.4方式1的功能10.5方式2的功能10.68255应用举例第10章并行接口芯片825510.1可编程并行输并行数据传输方式并行传输以计算机的字长为传输单位(通常是8位、16位或32位),一次传送1个字长的数据并行传输是微机系统中最基本的信息交换方法例如:系统板上各部件之间,接口电路板上各部件之间适合于外部设备与微机之间进行近距离、大量和快速的信息交换例如:微机与并行接口打印机、磁盘驱动器并行数据传输方式并行传输以计算机的字长为传输单位(通常是8位74LS373具有三态输出的透明锁存器TTL工作电平LE电平锁存高电平有效-OE输出允许74LS373具有三态输出的透明锁存器Intel8282具有三态输出的透明锁存器TTL工作电平STB电平锁存高电平有效-OE输出允许Intel8282具有三态输出的透明锁存器74LS244双4位单向缓冲器分成4位的两组每组的控制端连接在一起控制端低电平有效输出与输入同相74LS244双4位单向缓冲器双向三态缓冲器双向三态门具有双向导通和三态的特性ABT-OE-OE=0,导通

T=1A→BT=0A←B-OE=1,不导通双向三态缓冲器双向三态门具有双向导通和三态的特性ABT-OEIntel82868位双向缓冲器控制端连接在一起,低电平有效可以双向导通输出与输入同相-OE=0,导通

T=1A→BT=0A←B-OE=1,不导通Intel82868位双向缓冲器-OE=0,导通74LS2458位双向缓冲器控制端连接在一起,低电平有效可以双向导通输出与输入同相-E=0,导通

DIR=1A→BDIR=0A←B-E=1,不导通74LS2458位双向缓冲器-E=0,导通10.18255A的结构8255A是具有多种功能的可编程并行接口电路芯片其内部最基本的接口部件是:三态缓冲器锁存器此外,还包括与CPU的联络电路及与外设的联络电路:状态寄存器控制寄存器端口译码电路控制电路(如读写控制、中断控制)8255有3个8位的数据端口(A/B/C),共24个I/O引脚,各端口共有3种输入输出工作方式基本输入/输出(A/B/C口)选通输入或选通输出(A/B口)双向选通(A口)10.18255A的结构8255A是具有多种功能的可编程结构方框图数据总线缓冲器内部控制线内部数据线D0~D7A组控制A组端口C上部B组控制B组端口BB组端口C下部读写控制逻辑PC0~PC3CL口PB0~PB7B口PC4~PC7CH口PA0~PA7A口-RD-WRA0A1-CSRESETA组端口ARESET:高电平有效,清除控制寄存器并置所有端口为输入方式。结构方框图数据内部控制线内部数据线D0~D7A组A组B组B组1.连接外设的数据端口端口A:PA0-PA7,8位端口,支持工作方式0、1、2端口B:PB0-PB7,8位端口,支持工作方式0、1端口C:PC0-PC7,拆分为两个4位端口,仅支持工作方式0端口A:PA0-PA7(A组控制)常作数据端口使用,功能最强大端口B:PB0-PB7(B组控制)常作数据端口使用端口C:PC4-PC7(A组控制),PC0-PC3(B组控制)可作数据、状态或控制端口使用可拆分成两个4位端口分别输入或输出每位可独立进行输出控制(位控制)使用最灵活,较难掌握1.连接外设的数据端口端口A:PA0-PA7,8位端口,2.内部控制逻辑A组和B组控制电路 两组根据CPU的命令字控制8255A工作方式的电路。它们有控制寄存器,接受CPU输出的命令字,然后分别决定两组的工作方式,也可根据CPU的命令字对端口C的每一位实现按位“复位”或“置位”。A组控制电路控制端口A和端口C的上半部(PC7~PC4)。B组控制电路控制端口B和端口C的下半部(PC3~PC0)。2.内部控制逻辑A组和B组控制电路A组控制电路控制端口A3.与处理器的接口数据总线缓冲器:三态双向8位缓冲器,负责CPU与8255的数据传输。读/写控制逻辑:CS、RD、WR、A0、A1CSA1A0RDWR功

能0

000

1对端口A读0

0101对端口B读01001对端口C读01非法,不能对控制口读输入0对端口A写0对端口B写0对端口C写0对控制口写输出1

×

×

×

×

×

×

×

1

1数据缓冲器为三态断开01111110000010100113.与处理器的接口数据总线缓冲器:三态双向8位缓冲器,负引脚图引脚图8255A与系统的连接示意图D0~D7WRRDA1A0CSDBIOWIORA1A0译码器8255A口B口C口D0~D7外设1A15~A2系统总线外设2外设38255A与系统的连接示意图D0~D7WRRDA1A0CSD10.2方式选择方式0:基本输入输出方式(不带联络)适用于无条件传送和查询方式的接口电路方式1:选通输入输出方式(带输入联络或输出联络)适用于查询和中断方式的接口电路方式2:双向选通方式(同时带输入联络和输出联络)适用于可双向传送数据的外设适用于查询和中断方式的接口电路10.2方式选择方式0:基本输入输出方式(不带联络)第-10-章--并行接口芯片8255——微机原理课件10.2.1方式选择控制字D7D6D5D4D3D2D1D0101001011A口工作方式

00方式001方式11x方式2A口输出/输入0输出1输入CH口输出/输入0输出1输入B口工作方式0方式01方式1B口输出/输入0输出1输入CL口输出/输入0输出1输入A组控制B组控制表示:A口方式1输出,CH口输出,B口方式1输入,CL口输入。A510.2.1方式选择控制字D7D6D5D4D3D2D1D10.2.2方式选择举例808610.2.2方式选择举例8086片选译码1#11111000-11111011 F8H-FBH2#11110100–11110111 F4H-F7H片选译码1#11111000-11111011 F8控制字

若要求8255A#1的各个端口处在如下的工作方式:

端口A方式0输入 端口B方式1输出 端口C(上半部)PC7~PC4输出 端口C(下半部)PC3~PC0输入MOV AL,10010101BOUT 0FBH,AL控制字 若要求8255A#1的各个端口处在如下的工作方式:M要求:设置A口工作在方式2,B口位方式1输入,8255的控制字方式字ICW=11000110B=C6H要求:设置A口工作在方式2,B口位方式1输入,8255的控制10.2.3按位置位/复位功能位控字用于控制C口的输出引脚(CH/CL口工作于基本方式)或内部的中断允许位(A/B口工作于选通方式),位控字应写入8255的控制口,例如:

moval,0dh

out控制口,al当CH工作在非选通输出方式时,令PC6引脚输出1;当A口工作在选通输出或双向选通输出方式时,将相应的中断允许位INTEA或INTE1置1(开中断)。D7D6D5D4D3D2D1D00标志xxx位编码位数据0xxx11010dh10.2.3按位置位/复位功能位控字用于控制C口的输出引脚10.3方式0的功能(1)两个8位端口(A,B)和两个4位端口(端口C);(2)任一个端口可以作为输入或输出;(3)输出是锁存的;(4)输入是不锁存的;(5)在方式0时,各个端口的输入、输出可以有16种不同的组合。8255A在方式0工作时,CPU可以采用无条件读写方式与8255A交换数据;如果把C口的两个部分用作控制和状态口,与外设的控制和状态端相连,CPU也可以通过对C口的读写,实现A口与B口的查询方式工作;方式0中,不允许采用中断方式工作。10.3方式0的功能(1)两个8位端口(A,B)和两个输入缓冲器译码器数据DBAB外设8nRDIO/M输出锁存器译码器数据DBAB外设8nWRIO/M输入译码器数据DBAB外设8nRDIO/M输出译码器数据DB方式0的输入时序(数据来自外设)外设提供数据输入端口D0~D7-RD-CS、A1A0请体会这里8255A的数据缓冲作用数据8255外设CPU内总线外总线方式0的输入时序(数据来自外设)外设提供数据输入端口D0~D方式0的输出时序(数据来自CPU)-WRCPU数据数据输出端口D0~D7-CS、A1A08255A对CPU输出的数据进行锁存8255外设CPU内总线外总线需要插入Tw周期方式0的输出时序(数据来自CPU)-WRCPU数据数据输出端10.4方式1的功能(1)用作一个或两个选通端口;(2)每一个端口包含:8位的数据端口,三条控制线(是固定指定的,不能用程序改变),提供中断逻辑;(3)任何一个端口都可作为输入或输出;(4)若只有一个端口工作于方式1,余下的13位,可以工作在方式0(由控制字决定);(5)若两个端口都工作于方式1,端口C还留下两位,这两位可以由程序指定作为输入或输出,也具有置位/复位功能。10.4方式1的功能(1)用作一个或两个选通端口;8255方式1的特点(1)方式1是一种选通输入/输出方式,因此,需设置专用的联络信号线或应答信号线,以便对I/O设备和CPU两侧进行联络。这种方式通常用于查询(条件)传送或中断传送。数据的输入输出都有锁存能力。(2)PA和PB为数据口,而PC口的大部分引脚分配作专用(固定)的联络信号用,对已经分配做联络信号的C口引脚,用户不能再指定做其它用途。(3)各联络信号之间有固定的时序关系,传送数据时,要严格按照时序进行。(4)输入/输出操作过程中,产生固定的状态字,这些状态信息可作为查询或中断请求之用。状态字从PC口读取。(5)单向传送。一次初始化只能设置在一个方向上传送,不能同时作两个方向的传送。8255方式1的特点(1)方式1是一种选通输入/输出方式,因方式1输入引脚:端口APC4PC5PC3PA7~PA0INTEAIBFAINTRA-STBA中断允许触发器输入缓冲器满信号表示A口已经接收数据数据选通信号表示外设已经准备好数据中断请求信号请求CPU接收数据外设数据征用C口3引脚和1个控制位INTEA可通过对PC4的按位置位/复位来控制。方式1输入引脚:端口APC4PC5PC3PA7~PA0INT方式1输入引脚:端口BPC2PC1PC0PB7~PB0INTEBIBFBINTRB-STBB中断允许触发器输入缓冲器满信号表示B口已经接收数据数据选通信号表示外设已经准备好数据中断请求信号请求CPU接收数据外设数据征用C口3引脚和1个控制位INTEB可通过对PC2的按位置位/复位来控制。方式1输入引脚:端口BPC2PC1PC0PB7~PB0INT方式1输入联络信号-STB——选通信号,低电平有效由外设提供的输入信号,当其有效时,将输入设备送来的数据锁存至8255A的输入锁存器IBF——输入缓冲器满信号,高电平有效8255A输出的联络信号。当其有效时,表示数据已锁存在输入锁存器INTR——中断请求信号,高电平有效8255A输出的信号,可用于向CPU提出中断请求,要求CPU读取外设数据方式1输入联络信号-STB——选通信号,低电平有效方式1输入时序外设数据INTRIBF

数据输入端口D0~D7-STB-RD-STB和IBF是外设和8255A间的一对应答联络信号,为的是可靠地输入数据方式1输入时序外设数据INTRIBF数据输入端口D0方式1中断控制8255A的中断由中断允许触发器INTE控制置位允许中断,复位禁止中断对INTE的操作通过写入端口C的对应位实现,INTE触发器对应端口C的位是作应答联络信号的输入信号的哪一位,只要对那一位置位/复位就可以控制INTE触发器选通输入方式下端口A的INTEA对应PC4端口B的INTEB对应PC2方式1中断控制8255A的中断由中断允许触发器INTE控制方式1输出引脚:端口APC6PC7PC3PA7~PA0INTEA-OBFAINTRA-ACKA输出缓冲器满信号表示CPU已经输出了数据外设响应信号表示外设已经接收到数据中断请求信号请求CPU再次输出数据征用C口3引脚和1个控制位中断允许触发器通过位控PC6

设置INTEA输出数据方式1输出引脚:端口APC6PC7PC3PA7~PA0INT方式1输出引脚:端口BPC2PC1PC0PB7~PB0INTEB-OBFBINTRB-ACKB输出缓冲器满信号表示CPU已经输出了数据外设响应信号表示外设已经接收到数据中断请求信号请求CPU再次输出数据征用C口3引脚和1个控制位中断允许触发器通过位控PC2设置INTEB输出数据方式1输出引脚:端口BPC2PC1PC0PB7~PB0INT方式1输出联络信号-OBF——输出缓冲器满信号,低电平有效8255A输出给外设的一个控制信号,当其有效时,表示CPU已将输出数据锁存在8255A指定的端口,外设可以来取-ACK——响应信号,低电平有效外设提供的响应信号,通知8255A其端口数据已被外设接收INTR——中断请求信号,高有效当输出设备已接受数据后,8255A输出此信号向CPU提出中断请求,要求CPU继续提供数据端口A的INTEA对应PC6端口B的INTEB对应PC2方式1输出联络信号-OBF——输出缓冲器满信号,低电平有效端方式1输出时序8255外设CPU内总线外总线

INTR

CPU数据数据输出端口D0~D7-WR-OBF-ACK

-OBF和-ACK是外设和8255A间的一对应答联络信号,为的是可靠地输出数据方式1输出时序8255外设CPU内总线外总线INTR10.5方式2双向选通方式方式2将方式1的选通输入与选通输出功能组合成一个双向数据端口,可以发送数据和接收数据只有端口A可以工作于方式2,需要利用端口C的5个信号线,其作用与方式1相同方式2的数据输入过程与方式1的输入方式一样方式2的数据输出过程与方式1的输出方式有一点不同:数据输出时8255A不是在-OBF有效时向外设输出数据,而是在外设提供响应信号-ACK有效时才送出数据10.5方式2双向选通方式方式2将方式1的选通输入与选通方式2双向选通引脚PC6PC7PC3PA7~PA0INTE1-OBFAINTRA-ACKAPC4PC5IBFA-STBAINTE2数据输入中断和输出中断通过或门输出INTRA信号征用C口5引脚和2个控制位中断允许触发器(控制中断输出)通过位控PC6设置INTE1中断允许触发器(控制中断输出)通过位控PC4设置INTE2输入联络输出联络方式2双向选通引脚PC6PC7PC3PA7~PA0INTE方式2双向选通时序该例中:CPU先输出数据,再读取外设输入的数据

INTR

输出数据输入数据输入数据PA0~PA7D0~D7IBF

-WR-OBF-ACK-STB-RD输出数据方式2双向选通时序该例中:CPU先输出数据,再读取外设输入D7D6D5D4D3D2D1D0方式1输入(A口、B口)I/OI/OIBFAINTEAINTRAINTEBIBFBINTRB方式1输出(A口、B口)OBFAINTEAI/OI/OINTRAINTEBOBFBINTRB方式2双向(A口)OBFAINTE1IBFAINTE2INTRA×××A口B口在不同工作方式下从端口C读到状态字A组控制B组控制D7D6D5D4D3D2D1D0方式1输入(A口、B口)方式1输入(B口)×××INTRAINTE2IBFAINTE1OBFAINTRBOBFBINTEB方式2双向(A口)方式1输出(B口)INTRBIBFBINTEBI/OD0D1D2D3D4D5D6D7A口工作在方式2,B口在不同工作方式下从端口C读到状态字A组控制B组控制I/OI/O方式0(B口)方式1输入(B口)×××INTRAINTE2IBFAIN方式2的中断若要允许方式2中断,则可用端口C的置位/复位命令: 允许输出中断,置PC6,则控制字为00001101B。 允许输入中断,置PC4,控制字为00001001B。方式2的中断若要允许方式2中断,则可用端口C的置位/复位命令1.向控制口写方式字要求:A口:方式1输入CH口:输出CL口:输入B口:方式0输出方式控制字:1

0110

001B或B1H初始化的程序段:

movdx,0fffeh ;假设控制端口为FFFEH moval,0b1h ;方式控制字

outdx,al ;送到控制端口编程实例1.向控制口写方式字要求:编程实例2.读写数据端口(A口/B口/C口)初始化编程后:当数据端口作为输入接口时,CPU执行输入IN指令,CPU将从输入设备得到外设数据当数据端口作为输出接口时,CPU执行输出OUT指令,将把CPU的数据送给输出设备8255A具有锁存输出数据的能力对设置为输出的端口同样可以输入(读)此时不是读取外设数据,而是读取的是前次CPU输出给外设的数据(锁存在锁存器中)2.读写数据端口(A口/B口/C口)初始化编程后:2.读写数据端口利用8255A的输出锁存能力,可实现对某一位的输出控制

对输出端口B的PB7位置位的程序段:

movdx,0fffah ;B端口假设为FFFAH

inal,dx ;读出B端口原输出内容

oral,80h ;使PB7=1

outdx,al ;输出新的内容2.读写数据端口利用8255A的输出锁存能力,可实现对某3.涉及C口的操作——归纳1在控制上,C口上半部(CH)和A口被编为A组,C口下半部(CL)和B口被编为B组。即它被拆分成两个4位端口分别进行控制:两个4位端口均只能工作于方式0

(指未被征用的引脚)但可分别选择输入或者输出C口具有唯一的地址,可按8位方式进行读/写,此时:设置为输出的引脚可读可写(输出锁存器)设置为输入的引脚可读(引脚)、写操作无意义在选通方式下,对被征用的引脚可读(分别映射到中断允许位、输入/输出缓冲器状态位、中断请求状态位)。C口还可通过位控字进行按位的写(只写C口1位):对设置为输出的引脚可写(输出锁存器)在选通方式下,对被征用的输入引脚可写(映射到中断允许位)3.涉及C口的操作——归纳1在控制上,C口上半部(CH)3.涉及C口的操作——归纳2当A和B口工作在方式1或方式2时,C口的部分引脚或全部引脚将被征用:A口方式1将征用C口3个引脚:输出:PC6/PC7(输出联络),PC3(中断)输入:PC4/PC5(输入联络),PC3(中断)B口方式1将征用C口3个引脚:输出:PC2/PC1(输出联络),PC0(中断)输入:PC2/PC1(输入联络),PC0(中断)A口方式2将征用5个引脚:PC4/PC5(输入联络),PC6/PC7(输出联络),PC3(中断)C口未被征用的引脚仍将工作在方式0,但必须成组进行设置,即CH或CL中的引脚必须同为输入或同为输出。3.涉及C口的操作——归纳2当A和B口工作在方式1或方式23.涉及C口的操作——归纳3对C口的数据输出有两种办法向C口直接写字节数据——该数据将被写进C端口的输出锁存器中,并从设置为输出的引脚输出,但对设置为输入的引脚无效。向控制口写位控字——使C口设置为输出的某个引脚输出1或0。在选通方式下向控制口写位控字——还可置位或复位8255内部的中断允许触发器。在选通方式下,该触发器已被映射在C口被征用的某个输入引脚上。3.涉及C口的操作——归纳3对C口的数据输出有两种办法向控制口写入位控字位控字用于控制C口的输出引脚(CH/CL口工作于基本方式)或内部的中断允许位(A/B口工作于选通方式),位控字应写入8255的控制口,例如:

moval,0dh

out控制口,al当CH工作在非选通输出方式时,令PC6引脚输出1;当A口工作在选通输出或双向选通输出方式时,将相应的中断允许位INTEA或INTE1置1(开中断)。D7D6D5D4D3D2D1D00标志xxx位编码位数据0xxx11010dh向控制口写入位控字位控字用于控制C口的输出引脚(CH/CL3.涉及C口的操作——归纳4读取C口数据有两种情况:针对未被A和B端口征用的引脚:将从定义为输入的位读到引脚上的输入信息将从定义为输出的位读到前次输出锁存的信息针对已被A和B端口征用作为联络线的引脚:将读到反映8255A工作状态的状态字,其中包括:数据缓冲器的状态(-OBFx或IBFx)中断允许的状态(INTEx)中断请求的状态(INTRx

)3.涉及C口的操作——归纳4读取C口数据有两种情况:D7D6D5D4D3D2D1D0方式1输入(A口、B口)I/OI/OIBFAINTEAINTRAINTEBIBFBINTRB方式1输出(A口、B口)OBFAINTEAI/OI/OINTRAINTEBOBFBINTRB方式2双向(A口)OBFAINTE1IBFAINTE2INTRA×××从端口C读到状态字A组控制B组控制D7D6D5D4D3D2D1D0方式1输入(A口、B口)10.68255A的应用作为通用的并行接口电路芯片,825A具有广泛的应用,如:应用在IBMPC/XT微机上应用于打印机接口电路用于连接简易键盘用于驱动LED数码管等等10.68255A的应用作为通用的并行接口电路芯片,8210.6.18255A在IBMPC/XT上的应用工作在基本输入/输出方式0端口A为方式0输入,用来读取键盘扫描码端口B工作于方式0输出,例如控制扬声器等端口C为方式0输入,读取系统状态和配置系统的初始化编程:

moval,10011

001b ;方式控制字99H

out63h,al10.6.18255A在IBMPC/XT上的应用工作在打印机接口的信号与时序主机把数据送给引脚DATA0~DATA7同时送出数据选通信号-STROBE打印期间,打印机在BUSY信号线上发出忙信号打印机处理好输入的数据时撤消忙信号同时又送出一个响应信号-ACK打印机接口的信号与时序主机把数据送给引脚DATA0~DATA以打印机为例说明8255应用打印机接口的信号与时序BUSY(出)DATA0~7(入)-ACK(出)-STROBE(入)打印机忙打印机响应一般用于查询一般用于选通以打印机为例说明8255应用打印机接口的信号与时序BUSY(10.6.2用8255A方式0与打印机接口BUSY

DATA0~78255APC7PC2PA0~PA7打印机-STROBE10.6.2用8255A方式0与打印机接口BUSYDA8255A的初始化 movdx,0fffeh ;控制口地址:FFFEH moval,10000001B ;方式控制字:91H

outdx,al ;A口方式0输出,CH输出、CL输入

moval,00001111B ;位控字,令PC7=1,即-STROBE无效

outdx,al例10.18255A的初始化 movdx,0fffeh ;控制口地址打印子程序:查询printc proc pushax pushdxprn: movdx,0fffch ;读取端口C

inal,dx ;查询打印机状态

andal,04h ;测试PC2(BUSY)

jnzprn ;为1,打印机忙,则循环等待

movdx,0fff8h;为0,打印机不忙,则输出数据

moval,ah

outdx,al ;将打印数据从端口A输出例10.1打印子程序:查询printc proc例10.1打印子程序:打印

movdx,0fffeh ;从PC7送出控制负脉冲

moval,00001110B ;置-STROBE=0(有效)

outdx,al nop ;产生一定宽度的负脉冲

nop moval,00001111B ;置-STROBE=1(无效)

outdx,al;打印机-STROBE端输入负脉冲

popdx popax retprintcendp例10.1打印子程序:打印 movdx,0fffeh ;从PC7送出10.6.3用8255A方式1与打印机接口1000pf2K15321441LS123单稳电路+5VDATA0~78255APC6INTRPC3PC7PA0~PA7打印机-ACK-ACK-OBF-STROBE调整-STROBE负脉冲的宽度10.6.3用8255A方式1与打印机接口1000pf28255A方式1与打印机接口时序配合PA0~PA7(DATA0~7)-ACK-OBF-STROBE打印机在方式1工作时的时序8255A方式1与打印机接口时序配合PA0~PA7-ACK-8255A的初始化

movdx,0fffeh moval,0a0h;方式字10100000

outdx,al moval,0ch;位控字,令INTEA(PC6)为0,禁止中断

outdx,al …… movcx,counter ;打印字节数送CX movbx,offsetbuffer ;取字符串首地址

callprints ;调用打印子程序例10.28255A的初始化 movdx,0fffeh例10.2printsproc pushax ;保护寄存器

pushdxprint1:moval,[bx] ;取一个数据

movdx,0fff8h

outdx,al ;从端口A输出

movdx,0fffchprint2: inal,dx testal,80h ;检测PC7,即-OBFA状态

jzprint2 ;为0,说明打印机方面未响应,继续检测

incbx ;为1时打印机已接收数据

loopprint1 ;准备输出下一个数据

popdx ;打印结束,恢复寄存器

popaxret ;返回prints endp打印子程序:输出例10.2printsproc打印子程序:输出例10.210.6.4双机并行通信接口PA0~PA7PC4PC08255A甲方(发送)方式1输出PA0~PA7PC7PC68255A乙方(接收)方式0输入-OBF-ACKCPU查询引脚输入有效时,读数据并输出应答信号两机均采用查询方式工作CPU查询中断请求标志,亦可查询输出缓冲器状态10.6.4双机并行通信接口PA0~PA7PC4PC08甲机的初始化 movdx,0fffeh;控制端口

moval,0a0h;方式字1

0100

000:A口方式1输出

outdx,al moval,0dh;令INTEA(PC6

)=1,允许中断输出

outdx,al例10.3设8255A的四个端口地址为:A口-FFF8H B口-FFFAH C口-FFFCH

控制端口-FFFEH甲机的初始化 movdx,0fffeh;控制端口例10甲机发送程序 trsmt: movdx,0fffch;C口地址

inal,dx;读C口

andal,08h;查询INTRA(PC3

jztrsmt ;为0,无中断请求,继续查

movdx,0fff8h ;否则,发送数据

moval,ah

outdx,al例10.3甲机发送程序 trsmt: movdx,0fffch乙机的初始化 movdx,0fffeh moval,98h;方式字10011000:A口方式0输入

outdx,al moval,01h;令应答信号(PC0

)=1(初始无效)

outdx,al例10.3乙机的初始化 movdx,0fffeh例10.3乙机:查询接收receive: movdx,0fffch

inal,dx ;读C口

andal,10h ;查询甲机的写选通信号(PC4

jnzreceive ;为1时无效(甲未发数据), ;继续查询

movdx,0fff8h ;接收数据

inal,dx movah,al;数据保存于ah例10.3乙机:查询接收receive: movdx,0fffch 乙机:接收响应 movdx,0fffeh moval,00h;应答信号(PC0

)=0(有效)

outdx,al nop;适当延时,产生一定宽度的有效负脉冲

nop moval,01h;应答信号(PC0

)=1(无效)

outdx,al例10.3乙机:接收响应 movdx,0fffeh例10.3实验5并行接口实验要求⑴类似习题10.8要求⑵对应例题10.2请在对比过程中,掌握例题、习题和完成实验要求

提示实验5并行接口实验要求⑴类似习题10.8提示10.3键盘及其接口键盘是微机系统的标准输入设备编码键盘:按键时自动产生编码输出,比如PC键盘,在按键与释放会自动向CPU送出16位的编码。非编码键盘:按键时不会自动产生编码输出,需要CPU主动去检查识别,在构成较为简单的嵌入式系统应用,以实现较为简单的数据输入,其结构可分为:简单按键——每个按键连接1根I/O线矩阵式键盘——多根行及列I/O线构成矩阵,按键跨接在交叉点上。10.3键盘及其接口键盘是微机系统的标准输入设备10.3.1非编码键盘——线性键盘线性键盘每个按键连接1个输入引脚读入0时反映键被按下读入1时反映健未被按下对I/O引脚资源消耗大+5V10K10.3.1非编码键盘——线性键盘线性键盘+5V10K10.3.1非编码键盘——矩阵式键盘矩阵式键盘每行连接一个I/O引脚每列连接一个I/O引脚在行列交叉点上跨接按键通过扫描识别按键+5V10K检测线输入控制线输出10.3.1非编码键盘——矩阵式键盘矩阵式键盘+5V101、逐行扫描法识别矩阵式键盘粗扫——行线送全0,列线检测到全1,说明无键按下;否则,有键按下,进入下一步逐行扫描。逐行扫描——某行送0其余送1,此时若列线检测到全1,说明该行无键按下,换下一行继续扫描;若列线检测到非全1,说明该行有键按下,通过组合此时的行码和列码可形成与特定按键相对应的识别码。通过查表环节可获得按键键值(按键的排列序号)。+5V10K检测线输入控制线输出1、逐行扫描法识别矩阵式键盘粗扫——逐行扫描——+5V10K第1段:是否有键按下key1: moval,00 movdx,rowport ;rowport为连接行线的端口地址

outdx,al ;使所有行线为低电平

movdx,colport ;colport为连接列线的端口地址

inal,dx ;读取列值

cmpal,0ffh ;判断列线是否读到全1 jzkey1 ;是,无闭合键,循环等待

calldelay ;否,延迟20ms清除抖动键盘扫描程序第1段:是否有键按下key1: moval,00键盘扫描程第2段:识别按键(扫描) movcx,8 ;扫描行数送CX movah,0feh ;第一行扫描初值送AHkey2: moval,ah movdx,rowport

outdx,al ;输出行码(扫描码)

movdx,colport

inal,dx ;读到列码键盘扫描程序第2段:识别按键(扫描) movcx,8 ;扫描行数送C第2段:识别按键(判断) cmpal,0ffh ;判断列线是否全1 jnzkey3 ;否,有按键,转下一步处理

rolah,1 ;是,无按键,扫描码移位

loopkey2 ;拟扫下一行

jmpkey1 ;所有行都没有键按下,返回粗扫key3: …… ;此时,al=列码,ah=行码 键盘扫描程序第2段:识别按键(判断) cmpal,0ffh ;判断列2.行列反转法识别矩阵式键盘第一步,先将行线设为输出、列线设为检测输入CPU通过输出端口将行线(控制线)全部设置为低电平,然后从输入端口读取列线(检测线),若列码读到全1说明无键按下,否则有键按下,转第二步。第二步,将行线和列线作用反转,即列线设为输出,行线设为检测输入。将前一步读到的列码从列线端口输出,并读取行线的输入码(行码)当一个键被按下时,必然涉及一对特定的行码和列码,以此组成按键特定的识别码,通过查表环节可获得按键键值。条件:连接行线和列线的接口电路必须能动态地改变行线和列线的输入/输出方式2.行列反转法识别矩阵式键盘第一步,先将行线设为输出、列线第1段:是否有键按下 …… ;设置行线接输出端口,列线接输入端口key2: moval,00 movdx,rowport

outdx,al ;设置行线输出全0 movdx,colport

inal,dx ;读取列码

cmpal,0ffh ;判是否全1 jzkey2 ;是,无键闭合,循环等待

pushax ;否,有闭合键,保存列码

pushax键盘扫描程序第1段:是否有键按下 ……键盘扫描程序第2段:识别按键(反转法) …… ;重新设置行线接输入口,列线接输出口

movdx,colport popax

outdx,al ;输出前面保存的列码

movdx,rowport

inal,dx ;读取行码

popbx ;将行码、列码组合

movah,bl ;此时,al=行值,ah=列值键盘扫描程序第2段:识别按键(反转法) ……键盘扫描程序行列值表和键代码表 ;按键的识别码表table dw0fefeh ;键0的识别码(16位)

dw0fdfeh ;键1的识别码

dw0fbfeh ;键2的识别码

…… ;其他键的识别码

;按键键值表char db0 ;键0的键值

db1 ;键1的键值

db2 ;键2的键值

…… ;其他键的键值键盘扫描程序行列值表和键代码表 ;按键的识别码第3段:查找键代码 movsi,offsettable

;识别码表首址

movdi,offsetchar

;键值表表首址

movcx,64 ;CX=键的总数key3: cmpax,[si] ;ax与表中识别码相比较

jzkey4 ;相同,说明找到,跳到key4

incsi ;不同,继续比较

incsi

incdi loopkey3 jmpkey1 ;全部比较完,都不同,

;说明是串键 键盘扫描程序第3段:查找键代码 movsi,offsettable第4段:等待按键释放key4: moval,[di] ;获取键代码送AL …… ;判断按键是否释放,没有则等待

calldelay ;按键释放,延时消除抖动

…… ;后续处理键盘扫描程序第4段:等待按键释放key4: moval,[di] ;获3.按键抖动和串键问题机械按键按键和释放时存在按键抖动现象当键按下或释放时,因接触电阻的变化对数字电路来说会导致输入的不确定性。抖动的持续时间通常不大于10ms。可采用硬件消抖电路或软件延时的方法来去抖。串键指两个或多个键同时闭合出现串键时,读取的码值中必然出现一个以上的0用户决定是否给予识别处理。3.按键抖动和串键问题机械按键按键和释放时存在按键抖动现串键处理认为是无效的按键——不予识别认为是有效的组合键——加以识别只承认先识别出来的键连锁法:直到所有键都释放后,读入下一个键巡回法:等被识别的键释放以后,就可以对其他闭合键作识别,而不必等待全部键释放串键处理认为是无效的按键——不予识别PB6PB7PAIRQ14GND1CLOCK2DATA5+5V3RESETPC键盘PC系统板8048单片机8255A8259ALS322串并转换器键盘阵列按键选通10.3.2PC机键盘的工作原理DBT1P10P21P11P22P20PAPA读回读回PB6PB7PAIRQ14GND1CLOCK2支持PC键盘的软件资源——数据结构键盘缓冲区及存取指针——共32B,以环形队列的方式使用,存放待处理的按键数据,每个按键所对应一个16位的数据ASCII码(低)和扫描码(高),所以键盘缓冲区中最多可缓冲15个按键。头指针——指示缓冲区中下一个待取的按键数据的位置尾指针——指示缓冲区中下一个待存的按键数据的位置缓冲区顶——缓冲区的第一个字节缓冲区底——缓冲区的最末一个字节当按键数据出队列时头指针将移动,当按键数据进队列时尾指针将移动,当头指针或尾指针移动到缓冲区底的时候,将绕回到缓冲区顶当头指针=尾指针时,说明键盘缓冲区空当尾指针回绕到头指针前、并紧挨头指针时,说明键盘缓冲区已满支持PC键盘的软件资源——数据结构键盘缓冲区及存取指针——共支持PC键盘的软件资源——中断资源09H号硬中断——处理接通扫描码并将按键数据存入键盘缓冲区,对断开扫描码不作处理。BIOS软中断——INT1BH,嵌在09H号硬中断服务程序中的软中断接口,用户可接管使用。其用法类似嵌在08H号硬中断中的INT1CH软中断BIOS软中断——INT16H,也称键盘缓冲区中断,负责对键盘缓冲区进行各种操作,主要操作右:AH=0H,读取键盘缓冲区中的按键数据AH=1H,查询键盘缓冲区中有无按键数据AH=2H,查询键盘状态(CTRL/ALT/SHIFT)DOS软中断——支持PC键盘的软件资源——中断资源09H号硬中断——处理接通1.PC机键盘的工作过程键盘电路正常工作时,单片机8048CPU不断地扫描键盘矩阵有按键事件,则确定按键位置之后以串行数据形式发送给系统板键盘接口电路:键按下时,发送该键的接通扫描码键松开时,发送该键的断开扫描码若一直按住某键,则以拍发速率(每秒2~30次)连续发送该键的接通扫描码接通扫描码反映该键在键盘上的位置断开扫描码=接通扫描码+80H,即将接通扫描码最高位置11.PC机键盘的工作过程键盘电路正常工作时,单片机8042.键盘接口电路的工作过程以串行数据方式接收一个字符(扫描码)后,进行串并转换硬件产生键盘中断请求(连接8259A的IRQ1),催促CPU读取按键数据CPU响应中断,则进入09H号键盘中断服务程序:读取键盘扫描码:用INAL,60H即可向键盘送应答信号:先令PB7=1(有效),随后又令PB7=0(无效)处理键盘数据,并将按键数据存入键盘缓冲区 给8259A送中断结束EOI命令,中断返回2.键盘接口电路的工作过程以串行数据方式接收一个字符(扫3.PC键盘的中断服务——模拟其工作用kbint过程模拟09H号中断服务常规的读端口操作处理按键数据:对接通扫描码——通过查表,将之转换为对应的ASCII码送键盘缓冲区(对扩展键转换为0)对断开扫描码——不做处理用kbget过程模拟键盘缓冲区的操作从键盘缓冲区中读取按检索对应的ASCII码主程序调用kbget功能不断循环显示用户键入的字符3.PC键盘的中断服务——模拟其工作用kbint过程模拟模拟的键盘缓冲区用途:用于暂存按键数据,在中断服务程序与其他程序间交换按键数据数据结构:10B为先进先出的循环队列,每个按键对应1B的数据(ASCII码),最多可缓冲9个按键。

基本的操作和状态进队列出队列队列空队列满9210队列顶队列底buffer模拟的键盘缓冲区用途:用于暂存按键数据,在中断服务程序与其他键盘缓冲区buffer db

10

dup(0) ;键盘缓冲区bufptr1 dw0 ;队列头指针bufptr2

dw0 ;队列尾指针例10.49210buffer队列顶队列底bufptr1bufptr2键盘缓冲区键盘缓冲区buffer db10dup(0) ;键盘缓键盘代码表scantb db0,1,’1234567890-=’,08h ;键盘第1排的按键,

;从ESC键到退格键

db

0,’qwertyuiop[]’,0dh ;键盘第2排的按键,

;从Tab键到回车键

…… db0,0,’789-456+1230.’ ;右边小键盘, ;从NumLock键到Del键

例10.4键盘代码表scantb db0,1,’1234567890设置中断向量1

movax,3509h ;读原中断向量并压栈保存

int21h pushes pushbx ;保存09H号原中断向量

cli ;关中断例10.4设置中断向量1 movax,3509h ;读原中断向量并压设置中断向量2

pushds ;设置09H号新的中断向量

mov

ax,segkbint

mov

ds,ax

mov

dx,offsetkbint

movax,2509h

int

21h

pop

ds

inal,21h ;允许IRQ1中断,其他不变

pushax andal,0fdh

out

21h,al

sti ;开中断例10.4设置中断向量2 pushds ;设置09H号新的中断向量例调用并显示start1: callkbget ;获取按键的ASCII码

cmpal,1 ;按键处理

jzstart2 ;是ESC键,则退出

pushax ;其余键,先压栈以后判断是否为回车

movdl,al ;显示该字符

movah,2 int21h popax ;恢复字符例10.4调用并显示start1: callkbget ;获取按键的处理回车符 cmpal,0dh ;该字符是回车符吗?

jnzstart1 ;不是,拟取下一个按键字符

movdl,0ah ;是回车符,接着再进行一次换行操作

movah,2 int21h jmpstart1 ;继续取下一个按键字符例10.4处理回车符 cmpal,0dh ;该字符是回车符吗?例10恢复中断向量start2: cli popax ;恢复09h原中断向量

out21h,al popdx popds

movax,2509h int21h sti

movax,4c00h ;返回DOS int21h例10.4恢复中断向量start2: cli例10.4子程序:判断缓冲区空否kbget

prockbget1:

push

bx ;保护BX

cli

movbx,bufptr1 ;取头指针

cmpbx,bufptr2 ;与尾指针相等否?

jnzkbget2 ;不等,缓冲区有字符则转移

sti ;相等,缓冲区空

popbx

jmp

kbget1 ;等待缓冲区有字符例10.4子程序:判断缓冲区空否kbget proc例10.4子程序:获取按键字符kbget2: mov

al,buffer[bx] ;取字符送AL

inc

bx

;队列头指针增量

cmp

bx,10 ;是否指向队列底

jckbget3 ;否,转移

mov

bx,0 ;是,头指针重新指向队列顶kbget3:

movbufptr1,bx ;设定新队列头指针

sti

pop

bx

retkbget endp例10.4子程序:获取按键字符kbget2: moval,buffe中断服务程序:响应键盘kbint proc

sti ;开中断

pushax ;保护寄存器

pushbx

in

al,60h ;读取键盘扫描码

pushax

in

al,61h ;令PB7=1,响应键盘

oral,80h

out

61h,al

and

al,7fh ;令PB7=0,向键盘送出一个有效脉冲

out

61h,al例10.4中断服务程序:响应键盘kbint proc例10.4中断服务程序:数据处理

popax

test

al,80h ;是断开扫描码?

jnzkbint2 ;是,不做处理,退出

movbx,offsetscantb ;否,为接通扫描码,取表首地址

xlat ;将扫描码转换成ASCII码

cmpal,0

;是合法的ASCII码?

jz

kbint2 ;否,退出例10.4中断服务程序:数据处理 popax例10.4中断服务程序:指针增量

movbx,bufptr2 ;是合法的ASCII码

movbuffer[bx],al ;将ASCII码存入缓冲区队列尾

incbx ;队列尾指针增量

cmp

bx,10 ;是否指向队列底?

jckbint1 ;否,转移

mov

bx,0 ;是,令指针重新指向队列顶 例10.4中断服务程序:指针增量 movbx,bufptr2 ;是中断服务程序:判断缓冲区满否kbint1: cmpbx,buffptr1

jzkbint2 ;若队列满,则退出

movbufptr2,bx ;队列不满,设置新的队列尾指针

例10.4bufptr1bufptr2buffer41H031H132H239H9队列顶队列底中断服务程序:判断缓冲区满否kbint1: cmpbx,b中断服务程序:中断返回kbint2:

moval,20h ;向8259A发送普通中断结束命令

out

20h,al popbx ;恢复寄存器

popax

iret ;中断返回kbint endp例10.4中断服务程序:中断返回kbint2: moval,20h实验6小键盘实验认真阅读教材中扫描法和反转法识别按键的程序段延时子程序可以采用软件延时程序(教材P245)延时子程序也可以采用实时时钟的硬件延时(教材P201),它更精确

提示实验6小键盘实验认真阅读教材中扫描法和反转法识别按键的程10.4LED数码管及其接口发光二极管LED是最简单的显示设备由8段LED组成的LED数码管LED数码管广泛用于单板微型机、微型机控制系统及数字化仪器中LED数码管可以显示内存地址和数据等10.4LED数码管及其接口发光二极管LED是最简单的显1.LED数码管的工作原理主要部分是7段LED发光管各段顺时针排列,分别称为a、b、c、d、e、f、g、dp(或h,即小数点,有时不用)通过7个发光段的不同组合可显示可显示0~9十个数码也可以显示A~F(实现16进制数的显示)还可以显示个别特殊字符,如-、P、H等abcdefg1.LED数码管的工作原理主要部分是7段LED发光管abLED数码管的结构共阳极共阳极+5Vabcdefgh共阴极abcdefgh共阴极LED数码管的结构共阳极共阳极+5Va共阴极a共阴极2.单个LED数码管的显示8255APA0PA1PA2PA3PA4PA5PA6PA7同相驱动电路abcdefgh+5V对一般数字电路而言,其灌电流(输出低电平)的能力要大于拉电流(输出高电平)的能力共阳数码管送0点亮送0点亮2.单个LED数码管的显示8255APA0a+5V对一般单个数码管的显示LEDtb db0c0h,0f9h,0a4h ;共阳七段码表

db……

moval,1 ;要显示的数码在表中的位置

movbx,offsetLEDtb ;bx指向七段码表

xlat ;通过换码取要显示的七段码

;al←ds:[bx+al] movdx,port

outdx,al ;输出七段码软件译码单个数码管的显示LEDtb db0c0h,0f9h,0a43.多个LED数码管的显示以动态扫描显示8个数码管为例硬件——使用两个8位的输出端口,其中:锁存输出七段码的端口,通过公用的段驱动电路来驱动多个数码管各段锁存输出位选通码的端口,每次只点亮一个数码管软件——用轮流点亮(扫描)的方法实现多位数码显示,扫描频率应控制在16次/秒以上,当扫描频率达50次/秒时,显示将无闪烁感。3.多个LED数码管的显示以动态扫描显示8个数码管为例多个LED数码管的显示8锁存同相驱动锁存反相驱动七段码端口位选通码端口8共阳数码管控制控制数据送0时点亮相应段,七段码:11111001B将显示数码“1”送1时选通相应数码管,选通码:00000001B将选中最左边的数码管1多个LED数码管的显示8锁存锁存七段码端口位选通码端口8共阳段控制端口电路D0D1D2D3D4D5D6D7阳极位0abcdefgh位1位2段码D0~D7段控制锁存/同相驱动segport,-IOW段控制端口电路D0阳极位0abcdefgh位1段控制端口作用控制哪些段点亮,决定具体显示什么数码段控制端口送出七段码到数码管段控制端此端口为8个数码管的共用端口段控制:Di=0,相应段点亮D7D6D5D4D3D2D1D0hgfedcba通过位、段控制端口的共同作用才能确定哪个数码管显示什么数码段控制端口作用控制哪些段点亮,决定具体显示什么数码段控制:D位控制端口电路D7D6D5D4D3D2D1D0共阳极数位0数位1数位2位码D0~D7位控制锁存/反相驱动bitport,-IOW共阳极共阳极位控制端口电路D7共阳极数位0数位1数位2位码位控制锁bit位控制端口作用位控制端口控制点亮哪位数码管(其余数码管暂不点亮)当位控制端口的控制码某位为0时,经反相驱动,便在相应数码管的公共阳极上加了高电平,该数码管将点亮并显示数据位控制:Di=0,相应数位的数码管可以发光D7D6D5D4D3D2D1D0位7位6位5位4位3位2位1位0位控制端口作用位控制端口控制点亮哪位数码管(其余数码管暂不点数码缓冲区 ;数据段LEDdt db8dup(0) ;显示缓冲区,存放要显示

;数码在七段码表中的序号

;主程序

movsi,offsetLEDdt ;si指向显示缓冲区首址

callLEDdisp ;调用显示子程序例10.4数码缓冲区 ;数据段例10.4获取显示代码LEDdisp proc pushax pushbx pushdx movbx,offsetLEDtb movah,0feh ;从最左边数码管开始LED1: lodsb ;取显示数据

xlat ;换码得到要显示的七段码

;AL←CS:[BX+AL]例10.4获取显示代码LEDdisp proc例10.4数码显示 movdx,segport ;segport为段控制端口

outdx,al ;送出七段码

moval,ah ;取出位显示代码

movdx,bitport ;bitport为位控制端口

outdx,al ;送出位选通码

calldelay ;实现数码管延时显示例10.4数码显示 movdx,segport ;segport为段显示下位数码 rolah,1 ;选通码移位,指向下个数码管

cmpah,0feh ;选通码又回最左边的数码管?

jnzLED1 ;否,显示下一个数字

popdx ;是,显示完一轮,退出

popbx popax retLEDtb db0c0h,0f9h ;共阳七段码表

db……LEDdisp endp例10.4显示下位数码 rolah,1 ;选通码移位,指向下个数码软件延时timer =10 ;延时常量delay proc pushbx pushcx movbx,timer ;外循环:timer确定的次数delay1: xorcx,cxdelay2: loopdelay2 ;内循环:216次循环

例10.4软件延时timer =10 ;延时常量例10.4软件延时 decbx jnzdelay1 popcx popbx retdelay endp例10.4通过控制重复频率和延时时间就可以得到各种显示效果软件延时 decbx例10.4通过控制重复频率和延时时间实验7LED数码管显示实验请认真阅读教材中8位数码管显示子程序延时子程序可以采用软件延时程序(教材P245)延时子程序建议采用实时时钟的硬件延时(教材P201),它更精确,也便于控制时间实验7LED数码管显示实验请认真阅读教材中8位数码管显示10.5并行打印机接口一般采用Centronics标准接口或者其简化接口Centronics接口是的一个并行接口协议,该协议规定了36脚簧式插头座和信号含义,其中前11条线是关键信号,他们是8条数据线3条联络线(选通、响应和打印机忙)Centronics接口信号中还有一些特殊的控制线、和状态线PC系列机的并行打印机接口是一个25针插口10.5并行打印机接口一般采用Centronics标准接1.控制打印机的信号——打印机输入-SLCTIN(选择输入)——相当于打印机选中信号-INIT(初始化

温馨提示

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

评论

0/150

提交评论