请教关于8255A的问题
假设C口高位为输入 C口低位为输出
那么要输入输出的时候,如何使用指令呢?
要输入C口高位的时候 用 IN AL, C口地址
要输出C口地位的时候 用 OUT AL, C口地址
这样可以吗?
---------------------------------------------------
---------------------------------------------------
另有一题目:
下图中,PA口作为向打印机输出的数据口,工作于方式0,采用程序查询的控制方式。由PC0产生控制信号,PC7读取外设状态BUSY,8255的端口地址为90H~93H。则要求从内存2000H:3000H开始取出100个数据送打印机打印的控制程序为:
MOV AX,2000H ;段地址
MOV DS,AX
MOV BX,3000H ;段偏移
MOV CX,100 ;循环次数
MOV AL,88H ;控制字(A口方式0输出、C口高位输入、C口低位输出)
OUT 93H,AL ;输出控制字
LOP:IN AL,92H ;输入C口
TEST AL,80H ;测试最高位是否1(BUSY)
JNZ LOP
MOV AL,[BX] ;取一位数据
OUT 90H,AL ;输出到A口
MOV AL,01H ;设置C口最低位(形成一个脉冲)
OUT 93H,AL ;!!我的问题是 这里用OUT 92H, AL是否可以? 如果不可以,为什么?
MOV AL,00H
OUT 93H,AL
MOV AL,01H
OUT 93H,AL
INC BX
LOOP LOP
MOV AH,4CH
INT 21H
我的问题是 要输出C口最低位时,用 OUT 92H, AL 是否可以? 如果不可以,为什么?
-------------------
[解决办法]
第一个问题,可以这么操作,只是输出时不是工作在输出方式的位上没有变化,而输入时需要将那些读入的数据中不是输入的位屏蔽一下。
第二个问题,也可以,只不过这样做会影响其它位,而位控方式不会影响到其它位,清净一点。