习题9 并行接口主要内容:8255的外部特性、内部结构,初始化编程,应用。
9.1 8255A的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提供控制信号和状态信号。
9.2 8255A的方式0一般使用在什么场合?在方式0时,如要使用应答信号进行联络,应该怎么办?【答】方式0的使用场合有两种,一种是同步传送,另一种是查询式传送。
在方式0情况下,没有规定固定的应答信号,所以,这时,将端口A端口B作为数据端口,把端口C的4个数位(高4位或者是低4位均可)规定为输出口,用来输出一些控制信号,而把端口C的另外4个数位规定为输入口,用来读入外设的状态。
就是这样,利用端口C来配合端口A和端口B 的输入/输出操作。
9.3当数据从8255A的端口C往数据总线上读出时,8255A的几个控制信号CS、A1、A0、RD、WR分别是什么?【答】 CS0、A11、A00、RD1 、WR0。
9.4 8255A的方式选择控制字和置1/置0控制字都是写入控制端口的,那么,它们是由什么来区分的?【答]】当8255A接收到写入控制口的控制字时,就会对最高位即标志位进行测试。
如为1,则将此字节作为方式选择控制字写入控制寄存器;如为0,则此字节作为对端口C的置1/置0控制来处理。
9.5 对8255A设置工作方式,8255A的控制口地址为00C6H。
要求端口A工作在方式1,输入;端口B工作在方式0,输出;端口C的高4位配合端口A工作;低4位为输入。
(口地址为80H~83H)【答】控制字:10110001=B1HMOV AL ,B1HOUT 83H ,AL9.6 设8255A的4个端口地址为00C0H,00C2H,00C4H,00C6H,要求用置0/置1方式对PC6置1,对PC4置0。
【答】MOV AL,00001101H ;对PC6置1的控制字MOV DX,00C6H ;控制地址DXOUT DX,AL ;对PC6置1操作MOV AL,00001000H ;对PC4置0的控制字OUT DX,AL9.7 编一初始化程序,使8255A的PC5端输出一个负跳变。
如果要求PC5端输出一个负脉冲则初始化程序又是什么情况?【答】初始化程序:MOV AL,0000 1011 H ;PC5置“1”控制字→ALMOV DX,046H ;控制口地址→DLOUT DX,AL ;置“1”控制字→控制寄存器MOV AL,00001010B ;PC5置“0”控制字→ALOUT DX , AL ;置“0”控制字→控制寄存器如果要求PC5输入一个负脉冲则再加两条指令:MOV A L ,00001011OUT DX,AL9.8 8255A与打印机的接口如图10-1,8255为工作方式0,试编写初始化程序。
若要将DL中的字符送到打印机打印,编写打印程序。
(口地址为60H~63H)图10-1【答】工作过程:当主机要往打印机输出字符时,先查询打印机忙信号,如果打印机正在处理一个字符或在打印一行字符,则忙信号为1,否则为0。
PP:MOV AL,81H ;8255工作方式字OUT 63H,AL ;A口方式0,输出,C4~7输出,C0~3输入MOV AL,00001111B ;PC7置1,禁止STBOUT 63H,ALLPST:IN AL,62H ;读C口AND AL,01H ;查PC0=0?JNZ LPST ;忙,等待;不忙,送数MOV AL,DL ;CL中字符送端口AOUT 60H,AL ;送数到A口MOV AL,00001110B ;将PC7置0(使STB有效)OUT 63H,AL ;AL= 0000 1100 BNOP ;延时MOV AL, 0000 1111 ;AL=0000 1111 BOUT 63H,AL ;再使STB(PC7)为19.9设一工业控制系统,有四个控制点,分别由四个对应的输入端控制,现用8255A的C口实现该系统的控制,如图10-2。
开关K0~K3打开则对应发光二极管L0~L3亮,表示系统该控制点运行正常;开关闭合则对应发光二极管不亮,说明该控制点出现故障。
编写8255A的初始化程序和这段控制程序。
图10-2【答】参考程序如下:MOV AL,10000001BOUT 63H,AL ;8255方式设置L1: IN AL,62H ;查询K0状态TEST AL,01HJZ L11MOV AL,00000001BOUT 63H,AL ;正常,L0亮JMP L2L11: MOV AL,00000000B ;不正常,L0灭OUT 63H,ALL2: IN AL,62H ;查询K1状态TEST AL,02HJZ L21MOV AL,00000011BOUT 63H,ALJMP L3L21: MOV AL,00000010BOUT 63H,ALL3: IN AL,62H ;查询K2状态TEST AL,04HJZ L31MOV AL,00000101BOUT 63H,ALJMP L4L31: MOV AL,00000100BOUT 63H,ALL4: IN AL,62H ;查询K3状态TEST AL,08HJZ L41MOV AL,00000111BOUT 63H,ALJMP L1L41: MOV AL,00000110BOUT 63H,ALJMP L1 ;循环查询K0状态10.108255芯片的A口和B口分别与8个LED灯和8个开关连接好,通过开关控制LED等的开和闭。
8255的端口地址为40, 42, 44和46H。
画出译码电路图,编写初始化程序和控制程序。
【答】参考程序如下:MOV AL,10000010BOUT 46H,AL ;8255方式设置L1: IN AL,42H ;读B口开关状态OUT 40H,AL ;写A口控制LEDJMP L19.11 如图10-3为用一片8255A控制八个8段共阴极LED数码管的电路。
现要求按下某个开关,其代表的数字(K1为1,K2为2,…K8为8)在数码管从左到右循环显示(已有一个延时子程序DELAY可以调用),直到按下另一个开关。
假定8255A的口A、B、C及控制口的地址依次为FFF0H~FFF3H。
编写完成上述功能的程序,应包括8255A的初始化、控制程序和数码管的显示代码表。
【答】参考程序:TAB DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH ;LED数码管1~8的显示段码PB DB 1 ;位选定义PC DB 0 ;开关状态暂存MOV BX,0图10-3MOV DS,BXMOV BX,OFFSET TAB ;段码表指针MOV AL,10001001BMOV DX,0FFF3HOUT DX,AL ;8255方式设置L1: MOV DX,0FFF1HMOV AL,PBOUT DX,AL ;位选通CALL DELAYROL PB,1 ;位选转换MOV DX,0FFF2HIN AL,DX ;读开关状态MOV PC,AL ;开关状态暂存MOV CX,8 ;移位8次查询开关状态,同时按下最高位优先L2: RCR PC,1JC L3MOV AL,8SUB AL,CL ;获得开关位XALT ;查表获得显示段码MOV DX,0FFF0HOUT DX,AL ;显示开关位L3: LOOP L2JMP L19.12 8255工作在方式1,输入和输出时中断服务程序各完成什么功能?【答】输入中断服务程序从8255输入数据寄存器读数据。
输出中断服务程序向8255输出数据寄存器写数据。
9.13 有个1 m s的脉冲信号源送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脉冲,输出中断请求。
MOV AL,01100101BOUT 43H,AL ;8253计数器1方式设置MOV AL,10HOUT 41H,AL ;计数值为1000,并启动计数器1计数MOV AL,10010000BOUT 63H,AL ;8255方式设置JMP $INTP: STI ;1秒中断IN AL,60H ;读A口OUT 61H,AL ;送B口显示IRET盛年不重来,一日难再晨。
及时宜自勉,岁月不待人。