微机原理与接口技术习题集2.docx
- 文档编号:7101974
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:100
- 大小:505.05KB
微机原理与接口技术习题集2.docx
《微机原理与接口技术习题集2.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术习题集2.docx(100页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术习题集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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 习题集