微型计算机原理应用第四版答案 下载本文

第八章习题

END START

编一初始化程序,使8255A的PC5端输出一个负跳变。如果要求PC5端输出一个负脉冲,则初始化程序又是什么情况?

答:(1)设置PC5为负跳变(从1到0),即设置PC5引脚为0值,其控制字应设置为:0000 1010(即0AH)。

故其初始化程序为:MOV DX, 8255控制端口地址 MOV AL,0AH OUT DX, AL

(2)负脉冲为(从0到-1),故其控制字为:0000 1011(即0BH) 故其初始化程序为:MOV DX, 8255控制端口地址 MOV AL,0BH

OUT DX, AL

设8251A的控制和状态端口地址为52H,数据输入/输出口地址为50H(输出端口未用),输入50个字符,将字符放在BUFFERR所指的内存缓冲区中。请写出这段程序。

答:分析:(1)工作方式选择

本题没有讲清用同步或异步,故可自选,在此选择异步传送,波特率为16,偶校验,停止位为2位;8个数据位。

从而确定工作方式选择字为:1111 1110,即为0FEH; (2)操作命令控制字选择

根据题意,是通过8251A作为输入接口用,从外设输入50个字符到主机的缓冲区,必须允许接收,则其RXE位需置1;而8251A既可作输入、又可作输出接口用,故其控制字中必须设为既允许接收(RXE/D2=1,又允许发送(TXEN/D0=1);但在此既然作为接收器从外设将数据送到CPU,故其请求发送位RTS/D5=0;又因CPU送出数据,故其数据终端准备好信号DTR/D1=0。

由此,推出其工作方式字可设为 00010101,即为15H; (3)初始化程序为: MOV DX,52H

MOV AL,FEH

OUT DX,AL ;以上三句将工作方式选择字送到控制端口52H中

;-------------------------以下两句设操作命令控制字送送到控制端口中 MOV AL,15H OUT DX,AL

;---------------------------以下对各寄存器进行初始化; MOV DX, 50H ;将数据输入端口号送到DX中; MOV CX,32H ;将传送字节数50(即32H)送到计数寄存器CX MOV DI,OFFSET BUFFER ;将内存缓冲器BUFFER的起始地址送给DI

;---------------------------查询输入端口状态,以确定是否准备好传送数据

BEGIN:IN AL, 52H ;从状态端口52H读入状态字送到AL; TEST AL,02H ;测试其状态位RXRDY是否准备好;

JZ BEGIN

;---------------------查询其三个出错校验位是否有问题;

TEST AL, 38H;检测其出错位0011 10000,三个出错标志位分别是帧校验

; 闪出校验和奇偶错标志位;

JZ ERROR IN AL, DX;将输入数据端口号的数据送到AL MOV [DI],AL;将AL中的数据送到内存地址为DI的单元中

INC DI

LOOP BEGIN ;如没错,则再输入下一个字符 JUMP EXIT ;如输入满足80个字符,则结束

ERROR: CALL ERR-0UT ;调出错处理 EXIT:……

设状态端口地址为86H,数据端口地址为87H,外部输入信息准备好状态标志为D7=1,请用查询方式写出读入外部信息的程序段。 答:LOP1: MOV DX, 86H IN AL, DX

;注:8位地址可直接用输入语句,即以上两句可用 IN AL, 86H替换。 TEST AL, 10H JZ LOP1

IN AL, 87H

HLT

设状态端口地址为76H,数据端口地址为75H,外部设备是否准备好信息由D7位传送,D7=1为准备好,D7=0为未准备好(忙),请用查询方式写出:CPU向外部传送数据的程序段。

答: LOP1: IN AL, 76H TEST AL, 10H JZ LOP1 MOV AL, DATA OUT 75H, AL HLT 补充题:

假设8255A的地址为0060~0063H,试编写下列情况的初始化程序:

A组设置为方式1,且端口A作为输入,PC6和PC7作为输出,B组设置为方式1,且端口B作为输入。

答:根据题意,8255A的控制字应为:10110 110(即B6H) 故其初始化程序为: MOV DX, 0063H ;控制端口地址为0063H MOV AL, B6H

OUT DX, AL