实验内容
将 DAC
单元旋钮提供的 0-5V
信号源作为 ADC 0809
的输入。
旋转旋钮,通过 LED
显示单元的小灯显示 A/D
转换的结果。
实验接线
XD0-XD7
接 A/D
转换单元的 D0-D7
和 8255
的 D0-D7
,#IOW
和 #IOR
需要同时与 A/D
转换单元和 8266
连接。
A/D
转换单元的 CS
与 IOY1
连接,8255
的 CS
与 IOY0
连接。ABC
接地(GND
)。如下图所示:
代码
;; ADC0809 IOY0 ;; BASE OFFSET: 0600H A0809 EQU 0600H B0809 EQU 0602H ;; 8255 IOY1 ;; BASE OFFSET: 0640H A8255 EQU 0640H B8255 EQU 0642H C8255 EQU 0644H CON8255 EQU 0646H CODE SEGMENT ASSUME CS:CODE START: MOV DX, CON8255 MOV AL, 90H ;; A IN, B OUT OUT DX, AL LL: MOV DX, A0809 OUT DX, AL CALL DELAY IN AL, DX MOV DX, B8255 ;; OUTPUT TO 8255B OUT DX, AL JMP LL MOV AX, 4C00H INT 21H DELAY PROC NEAR MOV CX, 0FFFFH LOOP $ RET DELAY ENDP CODE ENDS END START
选做实验-查询方式
实验过程中使用的是延时等待方式。要使用查询方式,需要将 A/D
转换单元的 EOC
与 8255
的 PA7
相连。
根据 EOC
的时序,我们知道:在 A/D
转换开始前,EOC
为高电平;在 A/D
转换进行过程中,EOC
为低电平。当 EOC
重新回到高电平时,表示转换完成。由此编写代码即可。
接线
增加了一条 EOC
的接线。
8255
下方的黄线,因为不知道该怎么接所以反过来了(代码
;; ADC0809 IOY0 ;; BASE OFFSET: 0600H A0809 EQU 0600H B0809 EQU 0602H ;; 8255 IOY1 ;; BASE OFFSET: 0640H A8255 EQU 0640H B8255 EQU 0642H C8255 EQU 0644H CON8255 EQU 0646H CODE SEGMENT ASSUME CS:CODE START: MOV DX, CON8255 MOV AL, 90H ;; A IN, B OUT OUT DX, AL LL: MOV DX, A0809 OUT DX, AL ;; START ADC0809 WAIT_AD_START: MOV DX, A8255 IN AL, DX TEST AL, 80H JNZ WAIT_AD_START WAIT_AD2_FINISH: MOV DX, A8255 IN AL, DX TEST AL, 80H JZ WAIT_AD_FINISH MOV DX, A0809 IN AL, DX MOV DX, B8255 ;; OUTPUT TO 8255B OUT DX, AL JMP LL MOV AX, 4C00H INT 21H CODE ENDS END START
选做实验-中断方式
中断方式下,中断即可表示 A/D
转换完成。只需要将 EOC
与 MIR6
相连,复用上次实验中断相关的代码即可。
接线
A/D
转换单元最左边的绿线代码
;; ADC0809 IOY0 ;; BASE OFFSET: 0600H A0809 EQU 0600H B0809 EQU 0602H ;; 8255 IOY1 ;; BASE OFFSET: 0640H A8255 EQU 0640H B8255 EQU 0642H C8255 EQU 0644H CON8255 EQU 0646H CODE SEGMENT ASSUME CS:CODE START: MOV DX, CON8255 MOV AL, 90H ;; A IN, B OUT OUT DX, AL ;; MIR6 MOV AX, OFFSET MIR6 MOV SI, 38H MOV [SI], AX MOV AX, CS MOV SI, 3AH MOV [SI], AX ;; -------------------------------------------------- ;; INIT 8259 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 ;; -------------------------------------------------- LL: CLI MOV DX, A0809 OUT DX, AL ;; START ADC0809 CALL DELAY STI JMP LL MIR6: MOV DX, A0809 IN AL, DX MOV DX, B8255 OUT DX, AL IRET DELAY PROC NEAR MOV CX, 0FFFFH LOOP $ RET DELAY ENDP CODE ENDS END START