设8255A的A口和B口都工作在方式0,A口作为输出口,接有8个开关;B口为输出口,接有8个发光二极管.系统硬件电路中不断扫描开关Ki,当K0闭合时,点亮LED0,LED2,LED4,LED6,其他LED灯暗,当K1闭合时,点亮LED1,:LED3,LED5,LED7,其他LED暗;当开关K0和K1同时闭合时全灭.设8255A的端口地址为200H~206H.试编程实现上述控制.
参考程序:
CODE SEGMENT
ASSUME CS : CODE
START: MOV AL,90H ;8255A的方式选择控制字10010000B = 90H
MOV DX,206H ;206H为8255A的控制端口地址
OUT DX,AL ;把8255A的控制字写进控制端口
AGAIN: MOV DX,200H ;8255A的A口端口地址
IN AL,DX ;AL的值写进数据端口
TEST AL,03H ;检测AL中的值与03H = 0000 0011B是否一致,检测开关K0,K1的状态
JZ TURNOFF ;一样则跳转 TURNOFF 不一样执行下面的语句
TEST AL,02H ;比较AL?= 0000 0010B 检测K0的状态
JZ DISP_0 ;K0 = 1开关闭合 跳转DISP_0程序
TEST AL,02H ;比较AL?= 0000 0001B 检测K1的状态
JZ DISP_1 ;K1 = 1开关闭合 跳转DISP_1程序
JMP AGAIN ;重复程序
DISP_0: MOV AL,55H ;55H = 0101 0101B 控制LED灯的状态 偶位亮
MOV DX,202H ;端口地址赋值给DX寄存器
OUT DX,AL ;把LED灯的状态写入B口端口地址
JMP AGAIN ;跳转回主程序
DISP_1:MOV AL,0AAH ;0AAH = 1010 1010B 控制LED灯的状态 奇位亮
MOV DX,202H ;端口地址赋值给DX寄存器
OUT DX,AL ;把LED灯的状态写入B口端口地址
JMP AGAIN ;跳转回主程序
TURNOFF :
MOV AL,00H ;赋值 LEd灯的状态 全灭
MOV DX,202H
OUT DX,AL ;输出到B口端口地址
JMP AGAIN
CODE ENDS
END START