关于微机原理,8255和A⼀D转换器结合的一道题目。求大神解释代码意思。

2024-12-05 04:02:47
推荐回答(1个)
回答(1):

8255地址信息为0378H---037BH,
A B C这三个端口均工作方式0,
A口作为输入口,输入转换后的结果;
B口输出,用来输出通道地址,发出第之所存信号和启动转换信号;
C口低4位为输入口,用来读取转换状态,高4位没有使用。

INIT_8255 PROC NEAR
MOV DX, 037BH ;控制口地址
MOV AL, 91H ;控制字:A B C口均工作方式0,A输入,B输出,C低4位输入
OUT DX, AL ;写入8255
RET
INIT_8255 ENDP

数据采集:

START:
MOV AX, SEG DATA
MOV DS, AX ;设置数据段地址

MOV SI, OFFSET DATA ;设置数据存储首地址

CALL INIT_8255 ;初始化8255

MOV BL, 0 ;AD转换通道号

MOV CX, 8 ;预计循环八次

AGAIN:
MOV AL, BL ;通道号
MOV DX, 0379H ;B口地址
OUT DX, AL ;输出通道号

OR AL, 10H ;D4置一
OUT DX, AL ;输出
AND AL, 0EFH ;D4清零
OUT DX, AL ;输出
;上面四行,发出地址锁存信号和启动转换信号

NOP ;稍等

MOV DX, 037AH ;C口地址

WAIT1:
IN AL, BL ;--有错!改正如下
IN AL, DX ;从C口输入,这是状态

AND AL, 02H ;取出D3
JZ WAIT1 ;为零就是没有转换完,转移,继续读状态

MOV DX, 0379H ;为一,就???

MOV AL, BL ;这三行,看不懂
OR AL, 20H
OUT DX, AL

MOV DX, 0378H ;A口地址
IN AL, DX ;读入转换出来的数据
MOV [SI], AL ;存放

INC SI ;存放的地址加一
INC BL ;通道号码加一
LOOP AGAIN ;循环八次

MOV DX, 0379H ;B口地址
MOV AL, 0
OUT DX, AL ;向B口输出0,大概是关闭转换器

HLT ;停机