实验四 A/D转换实验
1. 实验内容
基础+扩展部分
编写实验程序,将 ADC 单元中提供的 0V~5V 信号源作为 ADC0809 的模拟输入量,进行 A/D 转换,转换结果通过 8 位 LED 进行显示。分别使用延时等待、查询和中断三种方式实现本实验的实验内容。
2. 实验原理
延时方式:又名等待方式、定时采样方式,即向A/D转换器发出启动命令后,进行软件延时(等待),经过等待后读A/D转换数据。
查询方式:向A/D转换器发出启动命令后,查询EOC状态。若EOC=1,则表示A/D转换已经结束,可以读结果;若EOC=0,则说明A/D转换正在进行中,应继续查询,直到EOC=1为止。
中断方式:向A/D转换器发出启动命令后,主程序可转去执行其他任务,一旦A/D转换结束,EOC由0变为1产生一个上升沿作为中断信号,在中断处理中读出A/D转换结果。
3. 连线
ABC口连接系统总线 XA1-XA3(本实验中使用IN0,即000,因此也可以直接接地)
EOC口需先经过机箱左侧的转换单元,再接到8255A口的PA7上。
8255连线见实验一
4. 实验代码
(1) 延时方式:
P8255A EQU 0600H
P8255B EQU 0602H
P8255C EQU 0604H
P8255MODE EQU 0606H
ADC0809A EQU 0640H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, P8255MODE
MOV AL, 80H
OUT DX, AL
MAIN:
MOV DX, ADC0809A
OUT DX, AL ;启动A/D转换
CALL DELAY ;延时一段时间等待转换结果
IN AL, DX ;读A/D转换结果
MOV DX, P8255B
OUT DX, AL ;输出到LED上
JMP MAIN
DELAY:
MOV CX, 0FFFFH
LOOP $
RET
CODE ENDS
END START
(2) 查询方式:
P8255A EQU 0600H
P8255B EQU 0602H
P8255C EQU 0604H
P8255MODE EQU 0606H
ADC0809A EQU 0640H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, P8255MODE
MOV AL, 90H
OUT DX, AL
MAIN:
MOV DX, ADC0809A
OUT DX, AL ;启动A/D转换
JUDGE:
MOV DX, P8255A
IN AL, DX ;读EOC
CMP AL, 80H ;判断EOC是否为高电平
JNZ JUDGE ;若不为高则继续查询等待
MOV DX, ADC0809A
IN AL, DX ;读A/D转换结果
MOV DX, P8255B
OUT DX, AL ;输出到LED上
CALL DELAY
JMP MAIN
DELAY:
PUSH CX
MOV CX, 0FFFH
LOOP $
POP CX
RET
CODE ENDS
END START
(3) 中断方式
P8255A EQU 0600H
P8255B EQU 0602H
P8255C EQU 0604H
P8255MODE EQU 0606H
ADC0809A EQU 0640H
ADC0809B EQU 0642H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, P8255MODE
MOV AL, 90H
OUT DX, AL
LEA AX, MIR6
MOV SI, 0038H
MOV [ES:SI], AX
MOV AX, CS
MOV SI, 003AH
MOV [ES:SI], AX
CLI
MOV AL, 11H
OUT 20H, AL
MOV AL, 08H
OUT 21H, AL
MOV AL, 04H
OUT 21H, AL
MOV AL, 07H
OUT 21H, AL
MOV AL, 2FH
OUT 21H, AL
STI
MAIN:
CLI
;MOV DX, ADC0809B
;MOV AL, 01H
OUT DX, AL
MOV DX, ADC0809A
OUT DX, AL ;启动A/D转换
CALL DELAY
STI
JMP MAIN
MIR6: ;检测到EOC上升沿,进入中断
MOV DX, ADC0809A
IN AL, DX ;读A/D转换结果
MOV DX, P8255B
OUT DX, AL ;输出到LED上
IRET
DELAY:
PUSH CX
MOV CX, 0FFFH
LOOP $
POP CX
RET
CODE ENDS
END START