【答【答】】如果发出中断请求信号时,正好碰到CPU执行封锁指令,由于CPU封锁指令和下一条指令合在一
起看成一个整体,所以必须等到下一条指令执行完后才响应中断。如果是执行往寄存器传送数据 指令,那一定要等下一条指令执行完后,才允许中断。无总线请求;CPU执行完当前指令。
8.12一个可屏蔽中断响应时,CPU要执行哪些读/写周期?对一个软件中断又如何? 【答】【答】当一个可屏蔽中断被响应时,cpu实际执行的总线时序如下:
第一步:执行2个中断响应总线周期,之间用2至3个空闲状态搁开。被响应的外设接口在第 二个中断响应总线周期中通过低8位数据线送回一个字节的中断类型码。cpu接收中断类型码,将 它左移两位后,成为中断向的起始地址,存人暂存寄存器。
第二步:执行一个总线写周期,把标志寄存器的值推入堆栈。
第三步:中断允许标志IF和单步标志TF置成0,禁止了中断响应过程中有其他可屏蔽中断进 入,还禁止了中断处理过程中出现单步中断。
第四步:执行一个总线写周期,在这个周期内,将CS的内容推入堆栈。 第五步:执行一个总线写周期,在这个周期内,将IP的内容推入堆栈。
第六步:执行一个总线读周期,在这个周期内,把中断向量前两个字节作为中断处理子程序入 口地址的偏移量送到IP寄存器中。
第七步:执行一个总线读周期,在这个周期中,把中断向量后两个字节作为中断子程序入口地 址的段值送到CS寄存器中。
如果是可屏蔽中断或者软中断,则跳过第一步,而从第二步开始按次序执行到第七步。
8.13软件中断有哪些特点?在中断处理子程序和主程序的关系上,软件中断和硬件中断有什么不同之
处?
【答【答】】(1)软件中断用一条指令进入中断处理子程序,中断类型码由指令提供。进入中断时,不需
要执行中断响应总线周期,也不从数据总线读取中断类型码。不受中断允许标志IF的影响。 不过,软件中断的一号中断受标志寄存器中另外一个标志既TF的影响,只有TF为1时,才 能执行单步中断。
(2)正在执行软件中断时,如果有外部硬件中断请求,并且是非屏蔽中断请求,那么,会在执 行完当前指令后立即给予响应。 (3)软中断没有随机性。
8.148259A的ICW2设置了中断类型码的哪几位?说明对8259A分别设置ICW2为30H、38H、36H有什
么差别?
【答】【答】8259A的ICW2设置了中断类型为D7-D3位。30H和36H对应的高五位为:00110,表示的中断类
型码相同;而38H的高五位为:00111,与前面的两者不同
8.15试按照如下要求对8259A设置初始化命令字:系统中有一片8259A,中断请求信号用边沿触发方
式,下面要用ICW4,中断类型码为60H、61H、62H……67H,用特殊全嵌套方式,不用缓冲方式, 采用中断自动结束方式。8259A的端口地址为96H、94H。
【答】【答】初始化命令字的过程:
MOVAL,13H
OUI94H,AL;设置ICW1 MOVAL,60H
OUT96H,AL;设置ICW2 MOVAL,13H
OUT96H,AL;设置ICW4
8.16怎样用8259A的屏蔽命令字来禁止IR3和IR5引腿上的请求?又怎样撤消这一禁止命令?设
8259A的端口地址为93H、94H。
【答】【答】从8259A的奇地址端口(93H)进行设置来禁止IR3和IR5引腿上的请求,如下:
INAL,93H;读取屏蔽寄存器OCW1中的数据 ORAL,28H;将IR3和IR5中对应位置1 OUT93H,AL;将OCW1中置入新的数据
撤消这一禁令如下:
INAL,93H;读取屏蔽寄存器OCW1中的数据 ANDAL,0D7H;清除IR3和IR5屏蔽位 OUT93H,AL;恢复原来的屏蔽位
(以上参考答案由黄玉清整理)
习题十并行接口
主要内容:8255的外部特性、内部结构,初始化编程,应用。 10.18255A的3个端口在使用时有什么差别?
【答】(1)端口A对应1个8位数据输入锁存器和1个8位数据输出锁存器/缓冲器。所以,用端
口A作为输入或输出时,数据均受到锁存(与工作方式有关)。(2)端口B对应1个8位数据输入 缓冲器和1个8位数据输出锁存器/缓冲器。(3)端口C对应1个8位数据输入缓冲器和1个8 位数据输出锁存器/缓冲器。这样,当端口C作为输入端口时,对数据不做锁存,而作为输出端口 是,对数据进行锁存。在使用中,端口A和端口B常常作为独立的输入端口或输出端口,端口C则 配合端口A和端口B的工作。具体的讲,端口C常常通过控制命令被分成2个4位端口,每个4位 端口包含1个4位的输入缓冲器和1个4位的输出锁存器/缓冲器,它们分别用来为端口A和端口 B提供控制信号和状态信号。
10.28255A的方式0一般使用在什么场合?在方式0时,如要使用应答信号进行联络,应该怎么办? 【答】方式0的使用场合有两种,一种是同步传送,另一种是查询式传送。在方式0情况下,没有规定
固定的应答信号,所以,这时,将端口A端口B作为数据端口,把端口C的4个数位(高4位或者 是低4位均可)规定为输出口,用来输出一些控制信号,而把端口C的另外4个数位规定为输入口, 用来读入外设的状态。就是这样,利用端口C来配合端口A和端口B的输入/输出操作。
10.3当数据从8255A的端口C往数据总线上读出时,8255A的几个控制信号CS、A1、A0、RD、WR分别是
什么?
【答】CS0、A11、A00、RD1、WR0。
10.48255A的方式选择控制字和置1/置0控制字都是写入控制端口的,那么,它们是由什么来区分的? 【答]】当8255A接收到写入控制口的控制字时,就会对最高位即标志位进行测试。如为1,则将此字
节作为方式选择控制字写入控制寄存器;如为0,则此字节作为对端口C的置1/置0控制来处理。
10.5对8255A设置工作方式,8255A的控制口地址为00C6H。要求端口A工作在方式1,输入;端口
B工作在方式0,输出;端口C的高4位配合端口A工作;低4位为输入。(口地址为80H~83H)
【答】控制字:10110001=B1H
MOVAL,B1H OUT83H,AL
10.6设8255A的4个端口地址为00C0H,00C2H,00C4H,00C6H,要求用置0/置1方式对PC6置1,
对PC4置0。
【答】MOVAL,00001101H;对PC6置1的控制字
MOVDX,00C6H;控制地址DX OUTDX,AL;对PC6置1操作
MOVAL,00001000H;对PC4置0的控制字 OUTDX,AL
10.7编一初始化程序,使8255A的PC5端输出一个负跳变。如果要求PC5端输出一个负脉冲则初始化
程序又是什么情况?
【答】初始化程序:
MOVAL,00001011H;PC5置“1”控制字→AL MOVDX,046H;控制口地址→DL OUTDX,AL;置“1”控制字→控制寄存器 MOVAL,00001010B;PC5置“0”控制字→AL OUTDX,AL;置“0”控制字→控制寄存器 如果要求PC5输入一个负脉冲则再加两条指令:
MOVAL,00001011 OUTDX,AL
10.88255A与打印机的接口如图10-1,8255为工作方式0,试编写初始化程序。若要将DL中的字符
送到打印机打印,编写打印程序。(口地址为60H~63H)
图10-1
【答】工作过程:当主机要往打印机输出字符时,先查询打印机忙信号,如果打印机正在处理一个 字符或在打印一行字符,则忙信号为1,否则为0。 PP:MOVAL,81H;8255工作方式字
OUT63H,AL;A口方式0,输出,C4~7输出,C0~3输入 MOVAL,00001111B;PC7置1,禁止STB OUT63H,AL
LPST:INAL,62H;读C口
ANDAL,01H;查PC0=0?
JNZLPST;忙,等待;不忙,送数 MOVAL,DL;CL中字符送端口A OUT60H,AL;送数到A口
MOVAL,00001110B;将PC7置0(使STB有效) OUT63H,AL;AL=00001100B NOP;延时
MOVAL,00001111;AL=00001111B OUT63H,AL;再使STB(PC7)为1
10.9设一工业控制系统,有四个控制点,分别由四个对应的输入端控制,现用8255A的C口实现该系
统的控制,如图10-2。开关K0~K3打开则对应发光二极管L0~L3亮,表示系统该控制点运行正 常;开关闭合则对应发光二极管不亮,说明该控制点出现故障。编写8255A的初始化程序和这段 控制程序。
【答】参考程序如下:
MOVAL,10000001B OUT63H,AL;8255方式设置
L1:INAL,62H;查询K0状态
TESTAL,01H JZL11
MOVAL,00000001B OUT63H,AL;正常,L0亮 JMPL2
L11:MOVAL,00000000B;不正常,L0灭
OUT63H,AL
L2:INAL,62H;查询K1状态
TESTAL,02H JZL21
MOVAL,00000011B
OUT63H,AL JMPL3
L21:MOVAL,00000010B
OUT63H,AL
L3:INAL,62H;查询K2状态
TESTAL,04H JZL31
MOVAL,00000101B OUT63H,AL JMPL4
L31:MOVAL,00000100B
OUT63H,AL
L4:INAL,62H;查询K3状态
TESTAL,08H JZL41
MOVAL,00000111B OUT63H,AL JMPL1
L41:MOVAL,00000110B
OUT63H,AL
JMPL1;循环查询K0状态
10.108255芯片的A口和B口分别与8个LED灯和8个开关连接好,通过开关控制LED等的开和
闭。8255的端口地址为40,42,44和46H。画出译码电路图,编写初始化程序和控制程序。 【答】参考程序如下:
MOVAL,10000010B OUT46H,AL;8255方式设置
L1:INAL,42H;读B口开关状态
OUT40H,AL;写A口控制LED JMPL1
10.11如图10-3为用一片8255A控制八个8段共阴极LED数码管的电路。现要求按下某个开关,其代
表的数字(K1为1,K2为2,…K8为8)在数码管从左到右循环显示(已有一个延时子程序DELAY 可以调用),直到按下另一个开关。假定8255A的口A、B、C及控制口的地址依次为FFF0H~ FFF3H。编写完成上述功能的程序,应包括8255A的初始化、控制程序和数码管的显示代码表。
图10-3
图10-2
【答】参考程序:
TABDB06H,5BH,4FH,66H,6DH,7DH,07H,7FH;LED数码管1~8的显示段码
PBDB1;位选定义 PCDB0;开关状态暂存
MOVBX,0 MOVDS,BX
MOVBX,OFFSETTAB;段码表指针 MOVAL,10001001B MOVDX,0FFF3H
OUTDX,AL;8255方式设置
L1:MOVDX,0FFF1H
MOVAL,PB OUTDX,AL;位选通 CALLDELAY ROLPB,1;位选转换 MOVDX,0FFF2H INAL,DX;读开关状态 MOVPC,AL;开关状态暂存
MOVCX,8;移位8次查询开关状态,同时按下最高位优先
L2:RCRPC,1
JCL3 MOVAL,8
SUBAL,CL;获得开关位 XALT;查表获得显示段码 MOVDX,0FFF0H OUTDX,AL;显示开关位
L3:LOOPL2
JMPL1
10.128255工作在方式1,输入和输出时中断服务程序各完成什么功能?
【答】输入中断服务程序从8255输入数据寄存器读数据。输出中断服务程序向8255输出数据寄存器写 数据。
10.13有个1ms的脉冲信号源送8253的计数器1利用软件方式扩大定时1秒,每秒钟从8255的PA
口读入一组开关数并送PB口的LED管显示,设8253,8255的端口地址分别为40H~43H和 60H~63H,且只用10条地址线(A0~A9)用于端口译码。请完成:①硬件连接。②编写对8253 计数器1初始化程序段(仅50ms)。③编写对8255的初始化程序以及1秒到后从PA口读入一 个字节开关数并送PB口显示的程序段。 【答】8253计数器1输入为1ms脉冲,输出中断请求。
MOVAL,01100101B
OUT43H,AL;8253计数器1方式设置 MOVAL,10H
OUT41H,AL;计数值为1000,并启动计数器1计数 MOVAL,10010000B