微机原理与接口技术习题集2

更新时间:2023-09-07 12:46:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

497. 编写8255A的A口和B口都工作在方程式1,采用中断方式输入数据的程序 【参考答案】 P83例77

设8255A的口地址为:40H~43H,C口的PC6 、PC 7为输入,因A口、B口工作在方式1,故工作方式控制字为:10111110B,其中D 0可为0或1,这里选为0。A口允许中断,PC4置1,控制字为09H。B口允许中断,PC2置“1”,控制字为05H。故初始化程序段如下: MOV AL, 10111110B ;写入工作方程式控制字 OUT 43H, AL MOV AL, 09H OUT 43H, AL ;PC4置“1”,A口允许中断 MOV AL, 05H OUT 43H, AL ;PC2置“1”,B口允许中断

498. 8255A的方式0的应用实例 【参考答案】P83例78

设8255A的A口和B口工作在方式0,A口为输入端口,接有4个开关;B口为输出端口,接有一个七段发光二极管,其硬件连接电路如图46所示。试编一程序要求七段发光二极管显示开关所拨通的数字。

管显示

本例中8255A的端口地址由两部分电路组成:由CPU地址线A15~A3通过74LS138译码器产生片选信号;CPU的地址线A2、A1分别组成4个端口地址,而CPU的A0与译码器输出端Y4通过逻辑组合,保证8255A的四个端口地址为偶地址,这样8位的8255A与16位的8086CPU可以通过数据总线D7~D0传送8位信息,具体端口地址分配为:A口地址为8020H,B口地址为8022H,C口地址为8024H,控制口地址为8026H。

从图可知,七段发光二极管为共阳极LED器件,要让a段亮点,要求从PB0段输出高电平“1”; 要让b段熄灭,要求从PB1段输出低电平“0”,其余各段依次类推。8255A的A口接有开关,4位开关的组合可为0~FH。为此,我们可将在LED上显示0~FH的各字符代码

列表见表2。

APORT BPORT CONTR DATA TAB1 DATA CODE ASSUME START:

ADDR1:

ADDR2:

CODE

ENDS SEGMENT

CS: CODE, DS:DATA MOV AX, DATA MOV DS, AX MOV AL, 90H MOV DX, CONTR OUT DX, AL MOV DX, APORT IN AL, DX AND AL, 0FH MOV BX, OFFSET TAB1 XLAT MOV DX, BPORT OUT DX, AL MOV CX, 0400H DEC CX JNZ ADDR2 JMP ADDR1 ENDS END START

EQU 8020H EQU 8022H EQU 8026H SEGMENT

DB 3FH, 06H, 5BH, 4FH.

;设定8255A工作方式

;取开关值

;屏蔽高4位 ;取代码表首址 ;找到字符代码 ;输出显示

;显示延时

499. 编写8255A用于LED显示器接口程序 【参考答案】P85 例79

8086CPU通过8255A同开关K与7段LED显示器的接口如图47所示。开关设置的二进制信息由8255A的B口输入,经程序转换为对应的七段LED的段选码(字形码)后,通过A口输出。由七段LED显示二进制状态值,试编写其控制程序。

设8255A得端口地址为: 端口A:0FFF8H 端口B:0FFFAH 端口C:0FFFCH 控制口:0FFFEH

为增加8255A的负载能力,所以A口经驱动器同七段LED显示器相连。由图47可见,8255A的地址线A1、A0分别同地址锁存器输出的A2、A1相连,故每个端口可有二个端口地址,如A口为0FFF8H和0FFF9H,可认为未参加译码的地址线A0为0的地址,所以通常使用0FFF8H地址。

假设B口用输入,则8255A工作方式控制字为82H。 程序如下: ORG 2000H ;从2000H开始存放数据 MOV AL, 82H ;只工作方式控制字 MOV DX,0FFFEH OUT DX, AL RDPOR

MOV DL, 0FAH ;读入B口信息

TB: IN AL, DX

;屏蔽AL高四位,B口读入的信息

AND AL, 0FH

只低四位有效

MOV BX,OFFFSET SSEGCODE ;地址指针BX指向段选码表首地址 XLAT ;[BX+AL]→AL

;段选码→A口,由七段LED显示

MOV DL, 0F8H

器显示

OUT DX, AL

;延时,使读入的信息保持显示一段

MOV AX, 56CH

时间

DELAY: DEC AX JNZ DELAY JMP RDPORTB ;进入新一轮的操作 HLT ORG 2500H ;从2500H开始为段选码表

如果要求LED显示器循环显示0-F十六个数字,每个数字显示10s,显示100遍。则控制程序为: ORG 2000H MOV AL,82H MOV DX,0FFFEH OUT DX,AL MOV BX,100 ;循环100次 DISFLOP: LEA DI,SSEGCODE ;指向段选码表 MOV CX,16 ;显示字符个数 LOP MOV AL,[DI] ;取显示字符送A口 MOV DL,0F8H OUT DX,AL INC DI ;修改显示指针 CALL DELAY10s ;延时10s字程序 LOOP LOP ;每遍循环16次 DEC BX ;修改大循环指针 JNZ DISFLOP HLT ORG 2500H SEEG

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,

CODE: DB 98H,88H,83H,DB 0C6H,0A1H,86H,8EH

500. 编写用8255A按位置位/复位控制字控制发光二级

管依次显示亮灭的程序

【参考答案】P87 例80 利用8244A端口C的8根I/O线接8只发光二级管的正

极(8个负极均接地),用按位置位/复位控制字编写使

这8只发光二级管依次亮、灭的程序。设8255A的端口

地址为480~483H。

本例要使用8255A的两个控制字:方式控制字和按位置

位/复位控制字。这两个控制字都写入到8255A的控制

字寄存器,由它的D7位为1或0来区分写入的控制字

是方式控制字还是按位置位/复位控制字。方式控制字只

写入一次,其后写入的都是按位置位/复位控制字。

首先用置位字01H点亮PC0所连接的发光二极管,然后将置位字01H改为复位字00H,熄灭该发光二极管。再将复位字00H改为置位字03H,点亮PC1所连接的发

图48程序流程图

光二极管,又将置位字03H改为复位字02H,熄灭该发光二极管。置位和复位自己就这样交替变化如下:

01H→00H→03H→02H→05H→04H→ →0FH→0EH→01H→

置位字和复位字周而复始地不断循环,即可使8只连接在PC端口的发光二极管依次亮灭。每一位的置位字改为复位字仅需将D0为由1变为0,这可用屏蔽D0为的逻辑与指令完成。把PCi的复位字改为PCi+1的置位字,要将D0位由0变为1,同时还要将D3~D13位加1,即要将D3~D0的4位加3,这可用加3的指令实现。这样不断地加3,其进位一定会使D7 也变为1,致使置位字变成方式字,为了避免出现此情况,所以加3后还要将置位字的D7位或高4位清零,即和0FH逻辑与,该程序的流程图如图48所示。程序如下: MOV DX,383H ;383H为控制字寄存器的端口地址 MOV AL,80H ;方式选择字 OUT DX,AL MOV AL,1 ;PC0的置位控制字 AGAIN: OUT DX,AL ;点亮一只发光的二极管 LOOP $ ;延时 LOOP $ AND AL,0FEH ;置位字改为复位字 OUT DX,AL ;熄灭点亮的发光二极管

;PCi→PCi+1,复位字改为下一位的置

ADD AL,3

位字

AND AL,0FH ;保持D7为0 PUSH AX MOV AH,11 ;检查按键有无输入 IVT 21H ;无,0送AL,有,-1送AL INC AL POP AX JNZ AGAIN

501. 编写8255A工作在方式0、方式1和方式2等不同形式的初始化程序 【参考答案】P88 例81

假设8255A端口A地址为0500H,是编写8255A工作在以下方式:

(1) 将A组和B组置成方式0,端口A和C作为输入端口,端口B作为输出端口; (2) 将A组置成方式2,B组置成方式1,端口B作为一个输出端口;

(3) 将A组置成方式1,且端口A作为输入端口,可PC6和PC7作为输出;B组置成

方式1,且端口B作为输入端口。

以下为8255A工作在上述三种情况下的方式控制字及程序。 1) 方式控制字为:10011001B即99H 程序为:

MOV DX,0506H ;控制端口地址0506H送DX MOV AL,99H OUT DX,AL

2) 方式控制字为:11XXX10XB,其中X为0或1任意,将X设为0则方式控制字为

11000100B,即C4H

程序为:

DX,0506H AL,0C4H DX,AL

方式控制字为:1011011XB或10110110B即B6H。因为B口设定为方式1输入,所以PC2~PC0已自动确定了输入/输出;端口A被设定为方式1输入,所以PC3自动作为中断请求线,因此PC3~PC0不受D0位控制。

程序为:

MOV DX,0506H MOV AL,0B6H OUT DX,AL

502. 发光二级管(L0~L7)不断显示对应开关(S0~S7)的通断状态应用实例

8086CPU通过8255A同发光二极管L0~L7一级开关S0~S7的接口电路如图49所示。 要求:

(1) S0~S7的状态每隔半分钟改变一次,把每次变化的状态记录在从2000H:1000H开

始的内存单元中;

(2) S接通时,对应的L熄灭,S断开时,对应的L发亮(即S0断开,L0发亮;S0接

通,L0熄灭);

(3) 连续工作24h结束。

用汇编语言编写的控制程序如下,请填上程序中的空缺的部分(包括指令,操作数或标号,初始化时无关项置“0”)。

MOV MOV OUT

3)

图49 通过 8255A控制发光管接口

START: MOV MOV

AL,______

DX,______

(1) ;初始化 (2)

______ DX,AL (3) MOV AX,______ (4) MOV DS,AX LOP: MOV CX,______ (5) ;工作24h LOP1: MOV BX,______ (6) LOP2: MOV DX,______ (7) ;读PA口 ______ AL,DX (8) MOV [BX],AL ;存S0~S7 INC ______ (9) XOR AL, (10) ;写PB口 MOV DX, (11) ______ DX,AL (12) ______________ (13) ______________ (14) CALL DELAY 30s ______________ (15) ______________ (16) LOOP ___________ (17) HLT 【参考答案】P89 例82

1. 8255A端口地址计算:

A8 A7 A6 A5 A4 A3 A2 A1 A0 1 1 0 0 1 0 0 × ×

端口地址为190H~193H

2. 8255A初始化

MOV AL,10010000B ;PA口工作于方式0,输入 MOV DX,193H ;PB口工作于方式0,输出 OUT DX,AL

3. 开关状态记录存放在内存2000H:1000H开始的内存单元中,必须对DS赋值,

指令为:

MOV AX,2000H MOV DS,AX

4. 开关状态每隔半分钟(30s)改变一次,控制电路连续工作24h,则采样次数

为24h/30s=24×60×60s/30s=2880次。 5. 要求开关S接通,对应灯熄灭,开关S接通时输入“0”,而灯熄灭要输出“1”,

因此必须将PA口读入内容取反后输出到PB口。

6. 调用子程序前必须保护现场,返回子程序前必须恢复现场。这里的现场即子

程序中所用到的寄存器。 7. 程序中空缺部分的答案为:

(1) 90H (2) 193H (3) OUT (4) 2000H (5) 2880 (6) 1000H (7) 190H (8) IN (9) BX (10) 0FFH (11) 191H (12) OUT (13) PUSH BX (14) PUSH CX (15) POP CX (16) POP BX (17) LOP2 [注] 延时30s子程序

DELAY 30 SPROC MOV BX,3000 DELAY: MOV CX,2801 WAIT: LOOP WAIT DEC BX JNZ DELAY RET DELAY 30s ENDP

503. 编写8255A以查询方式作为打印机接口的程序 【参考答案】P92 例83

图50是用8255A的PA口作为输出打印数

据口,工作方式0,PC口高4位工作于输出方式,PC6产生STB信号;PC口低4位工

作于输入方式,PC2接收打印机的BUSY信号。设打印字符存放在数据段中有效地址为

2000H的内存单元,8255A的端口地址为

80H~83H。

(1) 8255A的初始化程序: MOV AL,81H OUT 83H,AL MOV AL,0DH OUT 83H,AL TESBY: IN AL,82H TEST AL,04H JNZ TESBY MOV AL,[2000H] OUT 80H,AL MOV AL,0CH OUT 83H,AL INC AL OUT 83H,AL RET

(2) 主程序: MOV AL,15H OUT 43H,AL MOV AL,50H OUT 40H,AL STI LOP: HLT JMP LOP

(3) 中断服务程序为: MOV AL,01H

图50

8255A作为打印机接口

OUT 80H,AL MOV AL,77H OUT 43H,AL MOV AL,50H OUT 41H,AL MOV AL,72H OUT 41H,AL CALL DLSS MOV AL,00H OUT 80H,AL IRET

504. 编写8255A以中断方式作为打印机接口的程序 【参考答案】P93 例84

8255A工作方式1,其电路

如图51所示,这中断向量为2000H:3000H,在2CH、

2DH、2EH、2FH中端口地址设为E0H、E2H、E4H、

图518255A与打印机接口E6H,

控制程序如下: START: MOV AL,84H OUT 0E6H,AL MOV AL,0BH OUT 0E6H,AL XOR AX,AX MOV DS,AX MOV AX,3000H MOV WORD PTR DS:[002CH],AX MOV AX,2000H MOV WORD PTR DS:[002EH],AX MOV AL,05H OUT 0E6H,AL STI …

ROUTINI1R: MOV AL,[DI] OUT 0E0H,AL MOV AL,0AH OUT 0E6H,AL INC AL OUT 0E6H,AL … LRET

505. 通过8255A接口控制8个发光二极管亮、暗的应用实例 【参考答案】P94 例85

通过8255A 端口A输出控5V制8个发光二极管的亮和暗,接口连接如图52所示,8255A的端口地址为80H~83H。要求L7~L0每隔3s点亮1次,点亮的顺序为:图528255A控制8个发光二L7→L6→L5→L4→L3→L2

极管的亮和暗 →L1→L0→L7 周而复

始。

1. 写出8255A 的方式控制字和初始程序,并加以注释。 2. 写出题意要求的程序。

根据图52可知:设置端口A 为方式0输出,其余任意,方式控制字为:

1 00 0 000 即80H ------- ----------- ------- ------- 标志位 A口方式0 输出 任意

初始化程序如下:

MOV AL,80H ;设置8255A方式控制字 OUT 83H,AL

根据题意可知:8个发光二极管L7~L0为共阳极接法,当PAi输出为“0”时,发光二极管亮;输出为“1”时,发光二极管灭。当L7亮时,其余LED都为暗,所以端口A 的控制字为:01111111B,即7FH.因为显示顺序是L7→L6→L5→L4→L3→L2→L1→L0→L7 因此每隔3s,是控制字右移一位,即“0”往右移,程序如下: MOV AH,7FH LOOP: MOV AL,AH OUT 80H,AL ;使L7亮控制字输出 CALL DELAY3s ;延迟3s ROR AH,1 ;控制字小循环右移1位 JMP LOOP

506. 利用8255A作为两机并行通信接口的应用实例 【参考答案】P95 例86

两台PC机通过8255A 构成的借口实现并行传送数据,A机发送数据,B机接收数据。A机一侧的8255A工作于方式1输出,B机一侧的8255A工作于方式0输入。两机的CPU与8255A之间均采用查询方式交换数据。假设两台机传送1KB数据,发送缓冲区为0300:0000H,接收缓冲区为0400:0000H。 硬件连接如图53所示

CPUD0…D7

B机(接收)

CPUD0…D7

A机是发送,所以把A机一侧8255的A 口设定为方式1输出,从PA7~PA0引脚上发送由CPU

路原理

写入A 口的数据,而PA7和PA6引脚作为联络线OBF和ACK。B机是接收数据,将B机一

侧的A口设定为方式0输入,由PA7~PA0接收A机送来的数据,而选用PA4和PA0作 为联络线。假定A、B 两机的通信接口8255的A端口地址均为300H ~303H,驱动程序如下: A机的发送程序段: … MOV AX,0300H MOV ES,AX ;设A机发送缓冲区段基址 MOV BX,0 ;设A机发送缓冲区偏移量 MOV CX,3FFH ;置发送字节计数器 ;对8255A初始化 MOV DX,303H ;指向8255A控制口 MOV AL,10100000H ;设A口为方式1输出 OUT DX,AL MOV AL,00001101B ;这发送中断允许INTEA=1 OUT DX,AL ;发送第一个数据

LOOP0: LOOP1:

MOV MOV OUT INC DEC MOV IN AND JZ MOV MOV OUT INC DEC

DX,300H AL,ES:[BX] DX,AL BX CX

DX,302H AL,DX AL,08H LOOP1 DX,300H AL,ES:[BX] DX,AL BX CX

;向A口写第一个数据,产生第一个OBF信号,送给对方以便获取对方的ACK

;缓冲区指针+1 ;计数器减1

;指向8255A状态

;查询发送中断请求INTRA=1? ;PC3=INTRA=1? ;若无中断请求则等待 ;有请求向A发送数据 ;从缓冲区取数据

;通过A口送第二个数据 ;缓冲区指针加1 ;字节计数器减1

JNZ MOV INT B机接收程序段:

… MOV MOV MOV MOV MOV

MOV

LOOP0

AX,4C00H 21H

AX,0400H ES,AX BX,0

CX,3FFH

DX,303H AL,10011000B

OUT DX,AL MOV AL,00000001B ;置PC0=ACK=1,表示尚未接收数据 OUT DX,AL LOOP0: MOV DX,302H ;指向C口 LOOP1: IN AL,DX ;查A机的OBF(PC4)=0? AND AL,10H ;即查A机是否发来数据? JNZ LOOP1 ;若为发来数据,则等待 MOV DX,300H ;发来数据从A口读数据 IN AL,DX MOV ES:[BX],AL ;存入接收缓冲区 MOV DX,303H ;产生ACK信号,并发回B机 MOV AL,0 ;PC0置“0” OUT DX,AL NOP ;ACK负脉冲宽度 NOP MOV AL,01H ;PC0=1 OUT DX,AL INC BX ;缓冲区指针加1 DEC CX ;计数器减1 JNZ LOOP0 MOV AX,4COOH INT 21H ;送完返回DOS 507. 8255A通过开关控制红、绿、黄灯的亮、暗的应用实例 用8255A控制一组红、绿、黄灯(见图54),反复检测K1、K2,要求由K1、K2的闭合和断开,控制红、绿、黄三灯的点亮。 当K1合,K2合时,黄灯亮; K1合,K2断时,红灯亮; K1断,K2合时,绿灯亮; K1断,K2断时,黄灯亮;

已知8255A的端口地址为60H~63H,试编写初始化程序及控制程序。

;字节未发送完继续 ;功能调用号

;已完,返回DOS

;接收缓冲区段基地址

;接收缓冲区偏移量 ;接收字节计数器 ;8255A初始化 ;8255A控制口

;A口和C口高4位为方式0输入,C口低4位为方式0输出

+5V

亮、暗

【参考答案】P97 例87 初始化程序如下: MOV AL,90H ;初始化 OUT 63H,AL LOP: IN AL,80H AND AL,03H JZ L3 ;K1、K2全合 CMP AL,03H JE L3 ;K1、K2全断 CMP AL,02H JE L2 ;K1合、K2断 CMP AL,01H JE L1 ;K1断、K2合 JMP LOP L1: MOV AL,02H ;亮绿灯 OUT 62H,AL JMP LOP L2: MOV AL,01H ;亮红灯 OUT 62H,AL JMP LOP L3: MOV AL,04H ;亮黄灯 OUT 62H,AL JMP LOP

508. 编写8255A的端口C的PC7上产生一个窄的正脉冲程序 【参考答案】P98 例88

设控制口地址为00FE。只要用对端口C的置位/复位命令,先使PC7置位,然后再使它复位即可。 程序如下:

MOV DX,00FEH ;8255A的控制端口地址送DX MOV AL,0EH ;对PC7置0的控制字 OUT DX,AL ;输出对PC7置0的控制字 MOV AL,0FH ;对PC7置1的控制字 OUT DX,AL ;输出对PC7置1的控制字

MOV AL,0EH ;对PC7置0的控制字 OUT DX,AL ;输出对PC7置0的控制字

509. 编写8255A工作于方式0,端口A和一个字符打印机相连,端口B和一个纸带输入机

相连的初始化和驱动程序

端口C作为联络信号,PC6作为打印机的选通信号,

PC2作为打印机的忙信号,PC4作为纸带输入机的应答信号,PC0作为纸带输入机

的准备好信号(见图55)。

端口地址为0E4H~0E7H,

试列写初始化程序和驱动

程序。

图55 8255A作为字符打印机

和纸带输入机的接口 【参考答案】P98 例89

(1) 方式选择和初始化 端口A:方式0,输出。

端口C:高4位方式0,输出。 端口B:方式0,输入。

端口C:低4 位方式0,输入。 INITC PROC MOV AL,83H ;送控制字 OUT 0E7H,AL MOV AL,0DH ;PC6置1、启动字符打印机 OUT 0E7H,AL MOV AL,09H ;PC4 置1 OUT 0E7H,AL RET INITC ENDP

(2) 打印机驱动程序 LEST PROC LP1: IN AL,0E6H ;读PC2状态,忙,等待 AND AL,04H JNZ LP1 MOV AL,X ;不忙,送字符到打印机 OUT 0E4H,AL MOV AL,0CH ;PC6置0 OUT 0E7H,AL MOV AL,0DH ;PC6置1,重新启动 OUT 0E7H,AL RET LPST ENDP

(3) 纸带输入机驱动程序 RDST PROC RD1: MOV AL,04H ;PC4置0 OUT 0E7H,AL BLP: IN AL,OE6H ;读PC0状态没准备好,等待 AND AL,01H JNZ RLP IN AL,0E5H ;准备好,从端口读入一个字符 MOV X,AL MOV AL,09H ;PC4置1,通知输入机已取走数据 OUT 0E7H,AL RET RDST ENDP

510. 8255A工作在方式1控制微型打印机的应用实例

A在某一8086 系统中接有一

个µ80微型打印机,8255A作为输出接口,工作在方式1选通方式,试编写一程序将缓冲区BUFF内的

200HB的ASCII码送打印机,其接口电路如图56所

图568255A工作在方式1控制微型示。

打印机

当打印机的DSTB信号为低电平有效信号时,数据线D7~D0上的数据被锁入µ80打印机内待

打印,同时,打印机输出ACK低电平信号通知8255A,数据已取走。由于打印机的速度远低于CPU的执行速度。因而,打印机在打印某数据时,会发出BUSY“忙”信号,此时,CPU不能向8255A输出数据,一定要等待BUSY信号为低电平无效信号,CPU才能再次输出数据到8255A。在此例中,利用查询BUSY信号完成CPU与µ80打印的数据交换。 【参考答案】P100 例90 APORT EQU 0FFF8H CPORT EQU 0FFFCH CONTR EQU 0FFFEH DATA SEGMENT BUFF DB 200H DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA OUT DS,AX MOV CX,200H ;字节长度 MOV AL,0A8H ;8255A控制字 MOV DX,COUNTR

ABC1: ABC2:

OUT MOV MOV MOV OUT MOV IN AND

DX,AL DI,OFFSET BUFF AL,[DI] ;ASCII码输出 DX,APORT DX,AL DX,CPORT AL,DX AL,80H

;查OFBA信号 ;OFBA变高了吗

JZ ABC2 ;否,再查

ABC3: IN AL,DX ;查BUSY信号 AND AL,10H ;BUSY变低了吗? ANZ ABC3 ;否,再查 INC DI ;是,传送下一个数 LOOP ABC1 HLT

511. 编写8255A作为中断方式的打印机接口的程序 【参考答案】P101 例91 把8086CPU给出的字符送

到打印机上打印,接口与打印机的连接如图57所示。 8255A的端口A工作在方

式1的输出。PC7为OFBA信号输出端(此例未用),PC6则为ACKA信号输入

端,PC3位INTRA信号输

出端。打印机需要一个数据选通信号,用CPU控制PC0

图578255A作为中断方式与打印机接口

来产生选通脉冲(用软件实现单脉冲发生器功能)。

PC3接到8259A的中断请求信号IR3输入端。对应的中断类型号为0BH,中断向量(中断服务程序入口的段址和偏移地址),为1000H:2000,存放在0000H段从0BH×4开始的连续4个字节单元,即2CH、2DH、2EH、2FH中。

设8255A端口A、B、C及控制口的地址分别为C0H、C2H、C4H和C6H。根据以上要求,方式控制字设计为A0H,即A组方式1,端口A输出,端口C的低4位输出(只用PC0),控制字的D3~D1为可任选(为000)。

字符打印程序分成主程序和中断服务程序两部分。

主程序完成对8255A的初始化、开放CPU可屏蔽中断和8255A端口A的中断,并将要打印的第一个字符送打印机。 主程序段: MAIN: MOV AL,0A0H ;设置8255A的控制字

OUT 0C6H,AL MOV AL,01 ;使PC0为1,选通无效 OUT 0C6H,AL PUSH DS XOR AX,AX ;设置中断向量 MOV DS,AX MOV AX,2000H MOV [002CH],AX MOV AX,1000H MOV [002EH],AX POP DS MOV AL,0DH ;使PV6=1,允许端口A中断 OUT 0C6H,AL STI ;开放CPU中断 INT 0BH ;输出第一个字符 中断向量的装入过程也可以由AH=25H的系统功能调用实现。 中断服务程序完成对字符的输出。中断服务主要程序段: MOV DI,POINTER ;装入指针 MOV AL,[DI] ;取字符送端口A OUT 0C0H,AL MOV AL,00 ;使PC0=0,产生选通信号 OUT 0C6H,AL INC AL ;使PC0=1,选通无效 OUT 0C6H,AL INC DI ;修改指针并保存 MOV PIONTER,DI

… ;后续处理

ITET

设定字符已存放在输出缓冲区。在中断服务程序中,输出字符时,CPU对端口C的相应位

PC0设置为0,发出选通信号,从而将数据送到打印机。当打印机接受并打印字符后,发出应答信号ACKA,由此清除8255A的“输出缓冲器满”OBFA信号,并使8255A产生新的中断请求。如果中断是开放的,CPU便响应中断,再次进入中断服务程序,向打印机输出字符。

512. 8255A工作在方式0和方式1下分别与打印机接口的例子

8255A与打印机的连接如图58所示,利用8255A工作在方式0(见图58a)实现打印机接口,将字符A送打印机,试编写出初始化程序和打印程序。如果采用8255A方式1(见图68b)与打印机相连,再编写初始化程序。

a)

b)

图588255A与打印机接口a)方式0 b)方式1

【参考答案】P103 例92

8255A工作于方式0: MOV AL,83H MOV DX,0383H OUT DX,AL DEX DX WAIT

IN AL,DX

: AND AL,04H JNZ WAIT MOV AL,‘A’ MOV DX,0380H OUT DX,AL MOV AL,40H ADD DX,2 OUT DX,AL MOV AL,0

OUT

DX,AL

;设方式0A口输出上C口输出下C口输入

;测PC2,检查打印机忙闲

;若闲,输出字符“A”

;利用STB负脉冲将数据所存于打印机,进行处理

8255A工作于方式1: MOV DX,0383H MOV AL,0A0H OUT DX,AL MOV 0DH OUT DX,AL

;设A口为方式1输出

;PC6置1

513. 编写8255A作为打印机接口打印出26个小写英文字母的程序

用8255A作接口芯片,传送数据给打印机,8255A工作在方式1,中断申请线连接到8259A的IR3端,打印出26个小写英文字母。程序流程如图59所示。

程序流程图

【参考答案】P104 例93

DATA SEGMENT TAB:DB41H,42H,43H DATA: ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATE 主程序初始化: START: PROC FAR PUSH DS SUB AX,AX PUSH AX MOV DX,D2F6H MOV AL,A0H OUT DX,AL

MOV OUT MOV OUT MOV MOV MOV MOV MOV MOV

AL,01H DX,AL AL,0CH DX,AL AX,2000H

WORD PRT [002CH],AX AX,1000H

WORD PTR [002EH],AX AL,0BH DX,0020H

;英文26个字母的代码

;保存DOS初始化数据

;8255A控制口地址送DX ;设置8255A工作方式控制字

;使PC0置1,选通无效,关闭打印机

;使PC6置1,使INTE=0,不允许端口A输出中断

;设置中断服务程序如口地址偏移量

;设置存入中断矢量表中

;设置中断服务程序所在段地址

;存入中断矢量表中 ;设置ICW1控制字 ;设置8259A偶地址

本文来源:https://www.bwwdw.com/article/h79h.html

Top