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

上传人:b****6 文档编号:7101974 上传时间:2023-01-17 格式:DOCX 页数:100 大小:505.05KB
下载 相关 举报
微机原理与接口技术习题集2.docx_第1页
第1页 / 共100页
微机原理与接口技术习题集2.docx_第2页
第2页 / 共100页
微机原理与接口技术习题集2.docx_第3页
第3页 / 共100页
微机原理与接口技术习题集2.docx_第4页
第4页 / 共100页
微机原理与接口技术习题集2.docx_第5页
第5页 / 共100页
点击查看更多>>
下载资源
资源描述

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

《微机原理与接口技术习题集2.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术习题集2.docx(100页珍藏版)》请在冰豆网上搜索。

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

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

497.编写8255A的A口和B口都工作在方程式1,采用中断方式输入数据的程序

【参考答案】P83例77

设8255A的口地址为:

40H~43H,C口的PC6、PC7为输入,因A口、B口工作在方式1,故工作方式控制字为:

10111110B,其中D0可为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与译码器输出端

通过逻辑组合,保证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。

表2显示字符代码表

显示字符

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

0

七段代码(H)

06

5B

4F

66

6D

7D

07

7F

6F

77

7C

39

5E

79

31

3F

程序如下:

APORT

EQU

8020H

BPORT

EQU

8022H

CONTR

EQU

8026H

DATA

SEGMENT

TAB1

DB3FH,06H,5BH,4FH.

DATA

ENDS

CODE

SEGMENT

ASSUME

CS:

CODE,DS:

DATA

START:

MOV

AX,DATA

MOV

DS,AX

MOV

AL,90H

;设定8255A工作方式

MOV

DX,CONTR

OUT

DX,AL

ADDR1:

MOV

DX,APORT

;取开关值

IN

AL,DX

AND

AL,0FH

;屏蔽高4位

MOV

BX,OFFSETTAB1

;取代码表首址

XLAT

;找到字符代码

MOV

DX,BPORT

;输出显示

OUT

DX,AL

MOV

CX,0400H

;显示延时

ADDR2:

DEC

CX

JNZ

ADDR2

JMP

ADDR1

CODE

ENDS

END

START

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

RDPORTB:

MOV

DL,0FAH

;读入B口信息

IN

AL,DX

AND

AL,0FH

;屏蔽AL高四位,B口读入的信息只低四位有效

MOV

BX,OFFFSETSSEGCODE

;地址指针BX指向段选码表首地址

XLAT

;[BX+AL]→AL

MOV

DL,0F8H

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

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

SEEGCODE:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,

DB98H,88H,83H,DB0C6H,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所连接的发光二极管,又将置位字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

;熄灭点亮的发光二极管

ADD

AL,3

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

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

程序为:

MOV

DX,0506H

MOV

AL,0C4H

OUT

DX,AL

3)方式控制字为:

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”)。

START:

MOV

AL,______

(1);初始化

MOV

DX,______

(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

DELAY30s

______________

(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)PUSHBX

(14)PUSHCX

(15)POPCX

(16)POPBX

(17)LOP2

[注]延时30s子程序

DELAY30

SPROC

MOV

BX,3000

DELAY:

MOV

CX,2801

WAIT:

LOOP

WAIT

DEC

BX

JNZ

DELAY

RET

DELAY30s

ENDP

503.编写8255A以查询方式作为打印机接口的程序

【参考答案】P92例83

图50是用8255A的PA口作为输出打印数据口,工作方式0,PC口高4位工作于输出方式,PC6产生

信号;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

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、E6H,

控制程序如下:

START:

MOV

AL,84H

OUT

0E6H,AL

MOV

AL,0BH

OUT

0E6H,AL

XOR

AX,AX

MOV

DS,AX

MOV

AX,3000H

MOV

WORDPTRDS:

[002CH],AX

MOV

AX,2000H

MOV

WORDPTRDS:

[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输出控制8个发光二极管的亮和暗,接口连接如图52所示,8255A的端口地址为80H~83H。

要求L7~L0每隔3s点亮1次,点亮的顺序为:

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所示

A机是发送,所以把A机一侧8255的A口设定为方式1输出,从PA7~PA0引脚上发送由CPU写入A口的数据,而PA7和PA6引脚作为联络线

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

;发送第一个数据

MOV

DX,300H

;向A口写第一个数据,产生第一个

信号,送给对方以便获取对方的

MOV

AL,ES:

[BX]

OUT

DX,AL

INC

BX

;缓冲区指针+1

DEC

CX

;计数器减1

LOOP0:

MOV

DX,302H

;指向8255A状态

LOOP1:

IN

AL,DX

;查询发送中断请求INTRA=1?

AND

AL,08H

;PC3=INTRA=1?

JZ

LOOP1

;若无中断请求则等待

MOV

DX,300H

;有请求向A发送数据

MOV

AL,ES:

[BX]

;从缓冲区取数据

OUT

DX,AL

;通过A口送第二个数据

INC

BX

;缓冲区指针加1

DEC

CX

;字节计数器减1

JNZ

LOOP0

;字节未发送完继续

MOV

AX,4C00H

;功能调用号

INT

21H

;已完,返回DOS

B机接收程序段:

MOV

AX,0400H

;接收缓冲区段基地址

MOV

ES,AX

MOV

BX,0

;接收缓冲区偏移量

MOV

CX,3FFH

;接收字节计数器

;8255A初始化

MOV

DX,303H

;8255A控制口

MOV

AL,10011000B

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

OUT

DX,AL

MOV

AL,00000001B

;置PC0=

=1,表示尚未接收数据

OUT

DX,AL

LOOP0:

MOV

DX,302H

;指向C口

LOOP1:

IN

AL,DX

;查A机的

(PC4)=0?

AND

AL,10H

;即查A机是否发来数据?

JNZ

LOOP1

;若为发来数据,则等待

MOV

DX,300H

;发来数据从A口读数据

IN

AL,DX

MOV

ES:

[BX],AL

;存入接收缓冲区

MOV

DX,303H

;产生

信号,并发回B机

MOV

AL,0

;PC0置“0”

OUT

DX,AL

NOP

负脉冲宽度

NOP

MOV

AL,01H

;PC0=1

OUT

D

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

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1