实验四 A/D转换实验


实验四 A/D转换实验

1. 实验内容

基础+扩展部分

编写实验程序,将 ADC 单元中提供的 0V~5V 信号源作为 ADC0809 的模拟输入量,进行 A/D 转换,转换结果通过 8 位 LED 进行显示。分别使用延时等待、查询和中断三种方式实现本实验的实验内容。

2. 实验原理

  1. 延时方式:又名等待方式、定时采样方式,即向A/D转换器发出启动命令后,进行软件延时(等待),经过等待后读A/D转换数据。

  2. 查询方式:向A/D转换器发出启动命令后,查询EOC状态。若EOC=1,则表示A/D转换已经结束,可以读结果;若EOC=0,则说明A/D转换正在进行中,应继续查询,直到EOC=1为止。

  3. 中断方式:向A/D转换器发出启动命令后,主程序可转去执行其他任务,一旦A/D转换结束,EOC由0变为1产生一个上升沿作为中断信号,在中断处理中读出A/D转换结果。

ADC0809工作时序

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

文章作者: Mathison2020
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mathison2020 !
  目录