实验内容
基础部分:
1编写实验程序,将DAC单元中提供的0V~5V信号源作为ADC0809的模拟输入量,进行A/D转换,转换结果通过8位LED进行显示。
拓展部分:
2分别用延时、查询和中断三种方式实现本实验的实验内容。
代码
基础
采用下面的一种方式即可
延时
A8255 EQU 0600H
B8255 EQU 0602H
C8255 EQU 0604H
CON8255 EQU 0606H
A0809 EQU 0640H
B0809 EQU 0642H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, CON8255
MOV AL, 90H ;A--IN,B--OUT
OUT DX, AL
MI:
MOV DX,B0809
MOV AL,01H
OUT DX,AL ;启动1通道
MOV DX, A0809 ;启动A/D采样
OUT DX, AL
CALL DELAY
IN AL, DX ;读A/D采样结果
MOV DX, B8255
OUT DX,AL ;送入8255B口
JMP MI
DELAY:
PUSH CX
PUSH AX
MOV CX,0FFFFH;
L1: LOOP L1
POP AX
POP CX
RET
CODE ENDS
END START
查询
A8255 EQU 0600H
B8255 EQU 0602H
C8255 EQU 0604H
CON8255 EQU 0606H
;0809使用IOY1片选信号
A0809 EQU 0640H
B0809 EQU 0642H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, CON8255
MOV AL, 90H ;A--IN,B--OUT
OUT DX, AL
X3:
MOV DX,B0809
MOV AL,01H
OUT DX,AL ;启动1通道
MOV DX, A0809
OUT DX, AL ;启动AD采样
X1:
MOV DX,A8255
IN AL,DX ;从8255A口读入EOC状态
TEST AL,80H ;如果是不是高电平,表示未完成转换
JNZ X1
X2:
MOV DX,A8255
IN AL,DX ;从8255A口读入EOC状态
TEST AL,80H
JZ X2 ;如果是高电平,表示装换未完成
MOV DX,A0809
IN AL,DX ;从ADC0809读入转换完成的数据
MOV DX, B8255
OUT DX,AL ;从8255B口输出转换完成的数据
JMP X3 ;循环转换
CODE ENDS
END START
中断
A8255 EQU 0600H
B8255 EQU 0602H
C8255 EQU 0604H
CON8255 EQU 0606H
A0809 EQU 0640H
B0809 EQU 0642H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX, CON8255
MOV AL, 90H
OUT DX, AL
;设置中断向量
MOV AX, OFFSET MIR6 ;ADC0809的EOC引脚连接MIR6
MOV SI, 0038H
MOV [SI], AX
MOV AX,CS
MOV SI,003AH
MOV [SI], AX
;设置ICW1~ICW4和OCW1
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
AA1:
CLI ;关中断
MOV DX,B0809
MOV AL,01H
OUT DX,AL ;启动1通道
MOV DX, A0809 ;启动AD采样
OUT DX, AL
CALL DELAY ;延时一小段时间之后开中断,保证每一次AD转换中断只响应一次
STI
JMP AA1
MIR6:
;STI
MOV DX,A0809 ;读入AD转换之后的值
IN AL,DX
MOV DX, B8255 ;从8255B口输出
OUT DX, AL
IRET
DELAY:
PUSH CX
PUSH AX
MOV CX,0FFFH
L1: LOOP L1
POP AX
POP CX
RET
CODE ENDS
END START