《现代微机原理与接口技术》部分习题答案Word文档下载推荐.docx
《《现代微机原理与接口技术》部分习题答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《《现代微机原理与接口技术》部分习题答案Word文档下载推荐.docx(18页珍藏版)》请在冰点文库上搜索。
![《现代微机原理与接口技术》部分习题答案Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/cf0b2dad-2f6f-4a78-bb6a-d3ad8d41b705/cf0b2dad-2f6f-4a78-bb6a-d3ad8d41b7051.gif)
串口、并口、键盘、鼠标等功能集成到SIOLPC48B27X芯片中。
第2章
6.请简述I/O保护的实现原理。
首先要明确一点,在DOS环境(实地址模式)下,I/O是没有保护的,只有在保护模式下才有I/O的保护功能。
I/O保护有两种机构:
I/O特权级IOPL(I/OPrivilegeLevel)和I/O允许位映像(I/OPermissionBitMap)。
EFLAG标志寄存器中IOPL字段定义使用I/O相关指令的权限;
任务状态段TSS(TaskStateSegment)的I/O允许位映像用来修正IOPL对I/O敏感指令的影响,允许较低特权级的程序或任务访问某些I/O端口。
在保护方式下,当处理器遇到一条I/O指令(IN,INS,OUT和OUTS)时,它首先检查CPL<
IOPL是否成立,其中CPL是当前任务的特权级。
若成立,则可以处理I/O操作;
若不成立,则处理器检查I/O允许映像。
在虚拟8086方式下,处理器只查看这个映像而不考虑IOPL。
I/O允许位映像是一个位向量,每一位都表示一个端口地址,每个字节都可以表示8个端口。
若任何一个被测试的位置位,则处理器发出一般保护异常信号;
若所有被测试位都是0,则I/O操作可以继续进行。
7.设计一个外设端口译码器,使CPU能寻址四个地址范围:
①0280~0287H,②0288~028FH,③0290~0297H,④0298~029FH。
本题可以用一个2-4译码器,考虑到大家对74LS138比较熟悉,所以我们用74LS138这个3-8译码器来做这到题。
分析,从四段地址的低位来看,显然地址的低3位作为地址低位,不参与到译码电路中,而四段地址范围为1010000XXX~1010001XXX~1010010XXX~1010011XXX,显然我们可以将A4A3作为74LS138的B、A输入,这样得到的电路是:
8.已知PC机系统中某接口板的板地址译码电路如图2.8所示。
现希望该板的地址范围为0240~0247H,请确定DIP开关各位的状态(打开或闭合)。
图2.8习题8
应该关闭的开关有Q0、Q1、Q2、Q4、Q5
9.以查询输出方式编程,从内存中首地址为BUFFER的缓冲区向CRT终端输出128个字节,CRT终端数据口地址为0008H,状态口地址为0020H,D7为状态位,0表示输出缓存空闲。
……
MOVSI,OFFSETBUFFER
MOVCX,128
WAIT:
INAL,20H
TESTAL,80H
JNZWAIT;
输出缓冲不空
MOVAL,[SI]
OUT08H,AL
DECCX
JNZWAIT
第6章
3.如果8254-2某计数器的计数初值为400H,信号频率为10MHz,求时间片(微秒)。
所谓时间片是指输出脉冲的周期,由题可知,fOUT=fCLK÷
计数初值=10M/1K=10K。
时间片(周期)=1/fOUT=97.656微秒。
4.用8254作为某数据采集系统的定时器,每隔10ms用中断方式采集一次数据,已知输入时钟频率为10kHz,8259端口地址为20~21H,中断类型号为13H,8254端口地址为40~43H,请为8259和8254编制初始化程序。
分析:
8254的中断请求的中断类型号为13H,则显然在8259的ICW2的值为10H(中断类型号的高5位),而中断引脚显然用的是IR3。
8254的输入时钟频率为10kHz,需要输出10ms周期(频率100)的方波,作为中断请求信号,可以考虑用方式3,初始值为10K/100=100。
;
对8259初始化:
MOVAL,00010011B;
边沿触发,单片使用,要ICW4
OUT20H,AL;
ICW1
JMPSHORT$+2
MOVAL,10H;
中断类型号高位
OUT21H,AL;
ICW2
MOVAL,00000001B;
非总线缓冲方式,全嵌套,正常的中断结束
ICW4
对8254的初始化
MOVAL,00010110B;
计数器0方式3,低8位二进制计数
OUT43H,AL
MOVAL,100;
计数初始值
OUT40H,AL
7.某系统中8254芯片的通道0~通道2和控制字端口号分别为FFF0H~FFF3H,定义通道0工作在方式2,CLK0=5MHz,要求输出OUT0=1kHz方波;
定义通道l工作在方式4,用OUT0作计数脉冲,计数值为1000,计数器计到0向CPU发中断请求,CPU响应这一中断后继续写入计数值1000,重新开始计数,保持每1秒钟向CPU发出一次中断请求。
请画出硬件连接图,并编写初始化程序。
8254初始化程序如下:
MOVAL,00110100B
MOVDX,FFF3H
OUTDX,AL
MOVAL,01111000B
MOVAX,5000
MOVDX,FFF0H
MOVAL,AH
INCDX
MOVAX,1000
电路图如下:
9.试编写一程序,使PC/AT系统板上的发声电路发出200Hz至900Hz频率连续变化的报警声。
PC/AT机是使用8254的计数器2输入工作时钟频率1.1931816MHz,工作在方式3,产生一定频率的方波来驱动喇叭发声的(当然,8255PB口D1位要置1,这个我们假设都是打开的),题目要求的发声频率从200Hz到900Hz,按照书上185上的公式:
初始值=输入时钟频率/输出频率,初始值范围为5966~1326,可以编程,初始值给5966,然后每隔一定延迟(如20ms)将初始值减1,直到1326为止。
MOVAL,10110110B
MOVAX,5966
P1:
PUSHAX
OUT42H,AL
MOVAL,AH
CALLWAIT20ms;
延迟20秒
POPAX
DECAX
CMPAX,1325
JNZP1
10.在8086系统中,用8254构成一个定时、计数与脉冲发生器系统。
利用通道0完成对外部事件计数功能,计满100次向CPU发中断请求;
利用通道1产生频率为1kHz的方波;
利用通道2产生1秒标准时钟。
8254的计数频率为2.5MHz,8254的端口地址为41H~47H,试完成硬件连接和初始化编程。
8254从CLK0输入时钟频率为2.5MHz,通道0计数100次后输出的中断频率是250KHz,因为是做中断源,所以通道0最好工作在方式3,另外OUT0输出的这个脉冲还要作为通道1的输入时钟,从CLK1中输入,利用通道1计数250次(方式3)获得从OUT1输出的1KHz的方波,该输出同时作为通道2的时钟输入,通道2工作在方式3下,对CLK2中输入的1KHz时钟计数1000次(既进行1000分频),输出1秒的标准时钟(频率1Hz)。
74LS138
8254
再来看8254的译码问题,题目中端口地址为41H~47H,显然通道0、1、2和控制字的地址分别为41H、43H、45H和47H,也就是说A0这根地址线始终为1,根据这些分析,我们得到如下电路。
初始化8254程序:
MOVAL,00010110B
OUT47H,AL
MOVAL,01010110B
MOV47H,AL
MOVAL,100
OUT41H,AL
MOVAL,250
OUT45H,AL
第7章
6.试使用8255实现对74LS138的检测。
本题是要用8255芯片来检测一个74LS138芯片的输入输出是否满足真值表。
可以采用8255的PA口的PA0PA1PA2作为74LS138的ABC三个输入,将74LS138的Y0~Y78个输出接到8255的PB口,PB口作为输入口来获取这些信息,C口作为按位输出口输出到74LS138的控制信号(使能信号)。
然后按下图的真值表来进行验证。
假设8255A的端口地址为60H~63H。
检测程序如下:
MOVAL,10000010B;
A口为输出,B口为输入,
OUT63H,AL;
C口上下半全输出,全为方式0
MOVAL,0
OUT60H,AL
MOVAL,00000000B;
将PC0(G1)清0,不使能138
OUT62H,AL
INAL,61H
CMPAL,FFH
JZTEST1
JMPERROR
TEST1:
MOVAL,00000011B;
将PC1(G2A)置1,不使能138
JZTEST2
TEST2:
MOVAL,00000101B;
将PC2(G2B)置1,不使能138
JZTEST3
TEST3:
MOVAL,00000001B;
使能138
MOVCX,7;
从CBA为111检测到CBA为000,
MOVBX,FF7FH;
所以第一个输出0的是Y7。
也就是PB7应该为0
TEST4:
MOVAL,CL
OUT60H,AL
JMP$+2
INAL,61H
CMPAL,BL
JZTEST5;
如果相等则这一个CBA组合通过验证,继续检验
JMPERROR;
否则转出错
TEST5:
CMPCX,0
JZSUCCESS;
如已检查到CBA输入组合为000,检验成功结束。
SARBX,1;
检测138输出的0右移一位。
DECCX;
将138的CBA组合减1
JMPTEST4
ERROR:
……
SUCCESS:
7.一8255芯片的A口和B口分别与8个LED灯和8个开关连接好,通过开关控制LED等的开和闭。
8255的端口地址为40,42,44和46H。
画出译码电路图,编写初始化程序和控制程序。
初始化程序如下:
MOVAL,10000010B
OUT46H,AL
控制程序如下:
(开关闭合LED亮,否则LED灭
INAL,42H
NOTAL;
按位取反
电路连接图如下:
8255
8.试把例7.5改成中断方式,并加软件去抖动。
给出硬件连接图和有关程序段。
键盘扫描程序放到中断处理程序中即可。
程序略
9.试用两个8255A设计一个并行接口电路,把两个CPU为80486的ISA总线系统(主—从)连接在一起,实现主机和从机的单向通信。
假设用中断驱动式实现传送同步,试画出硬件连接图,并编写主机和从机的工作程序。
请大家参见总复习的例5进行相应的修改。
10.有个1s的脉冲信号源送8253的计数器1利用软件方式扩大定时1秒,每秒钟从8255的PA口读入一组开关数并送PB口的LED管显示,设8253,8255的端口地址分别为40H~43H和60H~63H,且只用10条地址线(A0~A9)用于端口译码。
请完成:
①硬件连接。
②编写对8253计数器1初始化程序段(仅50ms)
③编写对8255的初始化程序以及1秒到后从PA口读入一个字节开关数并送PB口显示的程序段。
题目中要求用软件方式将1s(1MHz)的脉冲用软件方法扩大定时到1秒,题目第二问又明确8253的计数器1输出脉冲周期是50ms(20Hz),显然,向系统提出的中断频率是每秒20次,在中断处理程序中,用软件的方法使用变量计数到20次后读PA口开关状态,并同时向PB口输出。
1)
注意在上图中的译码电路将A0~A910根线全部使用,使得各个芯片的地址范围被严格限制。
2)8253的初始化程序:
MOVAL,01110110B;
计数器1方式3,二进制
OUT43H,AL
MOVAX,50000
OUT41H,AL
MOVAL,AH
3)8255初始化
MOVAL,10011000B;
A口方式0输入,B口方式0输出
OUT63H,AL
中断处理程序如下:
……
TIMESDB0
SERVICEPROC
PUSHA
MOVAL,TIMES
INCAL
MOVTIMES,AL
CMPAL,20
JNZEXIT;
没有计数到20次,说明1秒没到,退出中断处理程序
INAL,60H
NOTAL
OUT61H,AL
EXIT:
POPA
IRET
SERVICEENDP
11.用8086,8255,8259和8254构造系统实现对指示灯控制。
8255的PA0,PA1,PA2接三位DIP开关,通过DIP开关的闭合状态决定接在PB口上的八个指示灯之一闪烁。
如PA2,PA1,PA0为000时,PB0上所接指示灯闪烁,其余灯熄灭。
要求闪烁频率为每秒10次。
设8259地址为20H和21H,8255地址为60H~63H,8254地址为40H~43H,时钟频率为50kHz,8259A中断向量号为70H和71H。
试设计硬件连接电路,填写中断向量表,编写全部初始化程序,完成控制程序编写。
1)指示灯闪烁可以有两种方法,一种是利用8254出来的方波信号和PB口出来的指示灯信号通过组合电路来实现灯的闪烁(硬件控制法,如同PC机的扬声器控制那样),另一种方法是利用中断,用中断处理程序来控制闪烁(软件控制法)。
本题提供有两个中断向量(类型)号,说明希望大家使用两个中断,一个自然是PA上的开关动作的时候产生中断(如同小键盘那样),而另一个中断显然是出题者希望大家用软件控制法去闪烁指示灯。
2)如果闪烁频率每秒10次,显然中断频率就要是每秒20次(一半时间熄灯一半时间亮灯)。
该中断又可以有两种方法产生,一种是从8254的OUT脚出来后直接接到8259A的IRQ脚,还有一种是让8255的PB口工作在方式1,让8254的OUT引脚每隔50ms发一个负脉冲给PC2(
)则PC0会自动在ACK的上升沿发出中断。
3)下面我们还要讨论的是8259A究竟用IRQ几,从题目可知中断向量号是70H和71H,我们知道,中断向量(类型号)的高5为由ICW2提供,低3位就是IRQi中的i,所以,显然是使用IRQ0和IRQ1。
4)DOS下(实地址模式)中断向量表的填写也有两种方法,第一种是使用DOS功能调用,如教材中166页的例子。
第二种方法是从0000:
0000开始,按照中断向量(类型)号×
4算出偏移,然后从低到高连续4个字节分别放中断处理程序的入口地址的偏移量(2字节)和段地址(2字节)。
如假设中断向量号为3的中断的入口地址是1234H:
5678H,则3H*4H=0CH,所以0000:
000C~0000:
000F的4个字节的内容分别是:
78H、56H、34H、12H(注意,PC机中存储采用低字节放在低地址,高字节放在高地址,见教材P14),本题我们采用DOS功能调用。
1)电路图如下(由于译码部分和前几题一样,故译码部分省略,8086部分也省略),其中PB工作在方式1。
8253的初始化程序:
MOVAL,01110100B;
计数器1方式2,二进制
MOVAX,2500
OUT41H,AL
8255初始化
MOVAL,10011100B;
A口方式0输入,B口方式1输出
将PC2置位,使能PB口方式1的中断
;
8259初始化
MOVAL,70H;
填写中断向量表
MOVAX,CODE;
写入新的70H中断向量
MOVDS,AX
MOVDX,OFFSETINT70
MOVAX,2570H
INT21H
写入新的71H中断向量
MOVDX,OFFSETINT71
MOVAX,2571H
中断处理程序(控制程序)
FLAGDB0;
0表示不显示,1表示显示
LEDDB0;
记录PB口的输出
TBDB1H,2H,4H,8H,10H,20H,40H,80H;
这是一张PA输入
对照PB输出状态的一个对照表
INT70PROC;
70H中断主要是完成闪烁
PUSHA;
保护现场
MOVAL,FLAG
CMPAL,0
JZDISP;
如AL为0,则直接将全0输出到PB口,灯熄灭
MOVAL,LED;
否则将LED中的输出记录从PB口输出,使灯亮
DISP:
OUT61H,AL;
PB口输出
XORAL,FFH;
FLAG状态取反
MOVFLAG,AL
POPA;
恢复现场
INT70ENDP
INT71PROC;
71H中断主要是读取A口状态并设置LED变量的值
INAL,60H;
读8255A口
MOVAH,0
MOVSI,AX;
设置访问TB表的索引
MOVAL,TB[SI];
取出和开关状态对应的PB口输出值
MOVLED,AL;
存到LED变量中。
INT71ENDP
***********************************
注意,本习题答案中,多处用到PROTEL绘制电路图,这里对于数据总线的绘制比较详细,大家在实际答题的时候可以一般简化,比如将8根线合成一根线来话,然后标明是8根线就行。