求助--------------我的有错改下呀??????????????
编写8255初始化程序和键值读取程序,并将键值序号显示在一个LED七段数码管上入口地址是200H~207H用PC0~PC2控制行线PC4~PC6控制列线,PA0~PA6做输出到LED上,我编了一下可能有很多的错误请高手指正。CODE如下:
DATA SEGMENT
TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,7FH,6FH ;预置显示值
BUFFER DB ? ;预留一个字节装键值
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA ;初始化操作
MOV DS,AX
SET: MOV DX,206H;初始化8255
MOV AL,89H
OUT DX,AL
WAIT-IN: MOV AL,00H;检测按键所有行输出0
MOV DX,204;8255的 C口地址
OUT DX,AL
IN AL,DX;读列线
AND AL,70H
CMP AL,70H;比较是否有按键按下
JZ WAIT-IN;无就等待
DONE: CALL DAELAY;延时消除抖动
MOV BL,0;键号初始值为0
MOV CL,0FEH;扫描初始值
MOV DL,3;计数值行数
SCANR: MOV AL,CL;扫描一行
MOV DX,204H;C口地址
OUT DX,AL
ROL AL,1;修改行数
MOV CL,AL
IN AL,DX;读列数
AND AL,70H
CMP AL,70H ;判断列线状态
JNZ SCANL;有低转
ADD BL,3;没有使键号=键号值+列数
DEC DL
JNZ SCANR;行未完转
JMP HANDLE;扫描结束
SCANR: OR AL,0FH; 高位置1,避免出错
RCR AL,1
JNC HANDLE;列为低,确定按键值
INC BL
JMP SCANL;查找下一列
HANDLE MOV AL,BL;传按键
MOV BX,OFFSET TABLE;段码表首址
XLAT
MOV DX,200H ;A口地址
OUT DX,AL;送段码
CALL DELAY
MOV AH,04H
INT 21H
CODE ENDS
END STATRT
我感觉错误太多了,高手帮下忙啊,感激不尽