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

由于本人要把这段代码背下来,求讲解的越详细越好,每部都是干什么用的。最后简单总结下8255和A/D转换器结合实现了什么功能。

题目:8255地址信息为0378H---037BH,A B C这三个端口均工作方式0,A口作为输入口,输入转换后的结果;B口输出,用来输出通道地址,发出第之所存信号和启动转换信号;C口低4位为输入口,用来读取转换状态,高4位没有使用。
INIT_8255 PROC NEAR
MOV DX,037BH
MOV AL,91H
OUT DX,AL
RET
INIT_8255 ENDP
数据采集:
START:MOV AX,SEG DATA
MOV DS,AX
MOV SI,OFFSET DATA
CALL INIT_8255; 初始化8255
MOV BL,0
MOV CX,8
AGAIN:MOV AL,BL
MOV DX,0379H
OUT DX,AL
OR AL,10H
OUT DX,AL
AND AL,0EFH
OUT DX,AL
NOP
MOV DX,037AH

WAIT1:IN AL,BL
AND AL,02H
JZ WAIT1
MOV DX,0379H
MOV AL,BL
OR AL,20H
OUT DX,AL
MOV DX,0378H
IN AL,DX
MOV [SI],AL
INC SI
INC BL
LOOP AGAIN
MOV DX,0379H
MOV AL,0
OUT DX,AL
HLT

第1个回答  2014-04-11
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 ;停机本回答被提问者采纳
相似回答