04/05/2016

微机系统与接口实验(四)—A/D转换实验

1. 实验目的

  • 学习理解模数信号转换的基本原理。
  • 掌握模数转换芯片ADC0809的使用方法。

2. 实验内容

  • 题目:编写试验程序,将DAC单元中提供的0V~5V信号源作为ADC0809的模拟输入量,进行A/D转换,转换结果通过8位LED进行显示。

3. 实验扩展

  • 分别使用延时等待,查询和中断三种方式,实现本实验的实验内容。

4. 延时等待A/D转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
SSTACK SEGMENT STACK
    DW 64 DUP(?)
SSTACK ENDS
 
CODE SEGMENT
    ASSUME CS:CODE
 
START: 
    MOV DX, 0686H  ;8255控制端口地址,选取的IOY2端口
    MOV AL, 90H    ;8255控制字,90H=10010000B,表示A口输入,B口输出
    OUT DX, AL     ;将上述控制字写入控制端口
 
MI:
    MOV DX, 640H   ;启动A/D采样
    OUT DX, AL
 
    CALL DELAY
    IN AL, DX      ;读A/D采样结果
 
    MOV DX, 0682H
    OUT DX,AL
    JMP MI
 
DELAY:             ;延时程序
    PUSH CX        ;保护现场
    PUSH AX
    MOV CX,0FFFFH;
L1:LOOP L1    
    POP AX 
    POP CX 
    RET
 
CODE ENDS 
    END START

5. 查询方式A/D转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
CODE SEGMENT
    ASSUME CS:CODE
START:
    MOV DX, 0686H  ;8255初始化,同上
    MOV AL, 90H
    OUT DX, AL
 
X3: 
    MOV DX, 0640H  ;启动AD采样
    OUT DX, AL
 
X1: 
    MOV DX,0680H
    IN AL,DX       ;从8255A口读入EOC状态
    TEST AL,80H    ;检测EOC是否为高电平
    JNZ X1         ;如果不是低电平,表示未开始转换,跳转继续查询
 
X2:
    MOV DX,0680H
    IN AL,DX       ;从8255A口读入EOC状态   
    TEST AL,80H    ;检测EOC是否为高电平
    JZ X2          ;如果是高电平,表示装换完成
 
    MOV DX,0640H
    IN AL,DX       ;从ADC0809读入转换完成的数据
    MOV DX, 0682H
    OUT DX,AL      ;从8255B口输出转换完成的数据
    JMP X3         ;循环转换
    ;此处对EOC状态的判断详见《微型计算机原理与接口技术》P2274图7.4.8
CODE ENDS 
    END START

6. 中断方式A/D转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
CODE SEGMENT
    ASSUME CS:CODE
START: 
MOV AX, 0000H
    MOV DS, AX
 
    MOV DX, 0686H
    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
 
    CLI
    MOV AL, 11H
    OUT 20H, AL
    MOV AL, 08H
    OUT 21H, AL
    MOV AL,04H
    OUT 21H, AL
    MOV AL, 05H
    OUT 21H, AL
    MOV AL, 10111111B
    OUT 21H, AL
    STI
    ;8255与8259初始化,详见实验三
 
AA1:
    CLI            ;关闭中断
    MOV DX, 0640H  ;启动AD采样
    OUT DX, AL
    CALL DELAY     ;延时一小段时间之后开中断,保证每一次AD转换中断只响应一次
    STI
    JMP AA1
    ;此处对中断的操作以及延时的调用原因详见《微型计算机原理与接口技术》P277
MIR6:
    STI
    MOV DX,0640H   ;读入AD转换之后的值
    IN AL,DX
    MOV DX, 0682H  ;从8255B口输出
    OUT DX, AL
    MOV AL, 20H
    OUT 20H, AL
    IRET
 
DELAY:
    PUSH CX
    PUSH AX
    MOV CX,0FFFH
L1:
    LOOP L1
    POP AX
    POP CX
    RET
 
CODE ENDS
    END START
Share

You may also like...

8 Responses

  1. ADC0809说道:

    嗯,有道理

  2. 有关部门说道:

    啦啦

  3. 阿德说道:

    大神接线怎么办

  4. YatesXu说道:

    感谢大神。。ps.这个实验的扩展是不是写错了

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据