第九章
A/D和 D/A转换器接口
9.1 MCS-51单片机与 D/A转换器的
接口和应用
9.1.1 典型 D/A转换器芯片 DAC0832
DAC0832是一个 8位 D/A转换器芯片, 单电源供电, 从
+5V~ +15V均可正常工作, 基准电压的范围为 ± 10V,电流
建立时间为 1μs,CMOS工艺, 低功耗 20mm。 其内部结构如图
9.1所示, 它由 1个 8位输入寄存器, 1个 8位 DAC寄存器和 1个
8位 D/A转换器组成和引脚排列如图 9.2所示 。
CS
1
WR
AGND
DI
3
DI
2
DI
1
DI
0
V
ref
R
fb
DGND
V
cc
ILE
2
WR
DI
4
DI
5
DI
6
DI
7
I
out2
I
out1
XFER
1
2
3
4
5
6
7
8
9
10 11
12
13
14
15
16
17
18
19
20
DAC0832
图9, 2 D A C 0 8 3 2 引脚图功能
ILE
?
?
?
?
?
?



8 位D / A 转换器
8 位D A C 寄存器
8 位数据输入寄存器
V
CC
20
I
OUT2
12
I
OUT1
11
R
fb
9
3
AGND
1013141516567
Lsb D0 D1 D2 D3 D4 D5 D6 D7
4
V
SS
(DGND)
V
ref
8
17
18
19
1
2
XFER
2
WR
CS
1
WR
1
LE
2
LE
图9, 1 D A C 0 8 3 2 的内部结构
该 D/A转换器为 20引脚双列直插式封装,各引脚含义如下:
(1)D7~ D0—— 转换数据输入。
(2)CS—— 片选信号(输入),低电平有效。
(3)ILE—— 数据锁存允许信号(输入),高电平有效。
(4)WR1—— 第一信号(输入),低电平有效。该信号与 ILE
信号共同控制输入寄存器是数据直通方式还是数据锁存方式:
当 ILE=1和 XFER=0时,为输入寄存器直通方式;当 ILE=1和 WR1
=1时,为输入寄存器锁存方式。
(5) WR2 —— 第 2写信号 (输入 ),低电平有效,该信号与信号合
在一起控制 DAC寄存器是数据直通方式还是数据锁存方式,当
WR2=0和 XFER=0时,为 DAC寄存器直通方式 ; 当 WR2=1和 XFER=0
时,为 DAC寄存器锁存方式。
(6)XFER—— 数据传送控制信号 (输入 ),低电平有效 。
(7)Iout2—— 电流输出, 1”。当数据为全, 1”时,输出电流最
大; 为全, 0”时输出电流最小。
(8)Iout2—— 电流输出, 2”。
DAC转换器的特性之一是,Iout1 +Iout2=常数。
(9)Rfb—— 反馈电阻端
既运算放大器的反馈电阻端,电阻( 15KΩ )已固化在芯
片中。因为 DAC0832是电流输出型 D/A转换器,为得到电压的转
换输出,使用时需在两个电流输出端接运算放大器,Rfb 即
为运算放大器的反馈电阻,运算放大器的接法如图 9.3所示。
(10)Vref—— 基准电压,是外加高精度电压源,与芯片内的电
阻网络相连接,该电压可正可负,范围为 -10V~ +10V.
(11)DGND—— 数字地
(12)AGND—— 模拟地
9.1.2 DAC0832工作方式
DAC0832利用 WR1, WR2, ILE,XFER 控制信号可以构
成三种不同的工作方式。
1)直通方式 —— WR1= WR2 =0时,数据可以从输入端经 两
个寄存器直接进入 D/A转换器。
2)单缓冲方式 —— 两个寄存器之一始终处于直通,即 WR1=0
或 WR2=0,另一个寄存器处于受控状态。
3)双缓冲方式 —— 两个寄存器均处于受控状态。这种 工
作方式适合于多模拟信号同时输出的应用场合。
9.1.3 单缓冲方式的接口与应用
1.单缓冲方式连接
所谓单缓冲方式就是使 DAC0832的两个输入寄存器中有
一个(多位 DAC寄存器)处于直通方式,而另一个处于受控
锁存方式。
单缓冲方式连接 如图 9.3所示。
为使 DAC寄存器处于直通方式,应使 WR2 =0和 XFER=0。为
此可把这两个信号固定接地,或如电路中把 WR2与 WR1相连,
把 XFER与 CS相连。
为使输入寄存器处于受控锁存方式,应把 WR1接 80C51的
WR,ILE接高电平。此外还应把 CS接高位地址线或地址译码
输出,以便于对输入寄存器进行选择。
图 9.3 DAC0832单缓冲方式接口
WR
74LS373
G
DAC0832
DI
7 0
CS
X F E R
1
WR
2
WR
V
cc
ILE
V
ref
R
fb
I
out1
I
out2
AGND
DGND
-
+
+5V
P
2.7
ALE
P0
80C51
?
?
?
V
out
2.单缓冲方式应用举例
【 例 9.1】 锯齿波电压发生器
在一些控制应用中,需要有一个线性增长的电压(锯齿波)
来控制检测过程、移动记录笔或移动电子束等。对此可通过
在 DAC0832的输出端接运算放大器,由运算放大器产生锯齿波
来实现,其电路连接图如图 9.4所示。
图 9.4 用 DAC0832产生锯齿波电路
CS
D I
O
D I
7
1
WR
地 址
译 码 输 出
P 0, 7 P 0, 0
WR
I L E V
C C
V
r e f
R
f b
I
o u t 1
I
o u t 2
2
WR X F ER
-
+
-
+
+ 1 0 V
- 1 0 V
1 0 k
1 0 k
?
?
+ 5 V?
1 / 2 L M 3 2 4
D A C 0 8 3 2
图中的 DAC0832工作于单缓冲方式,其中输入寄存器受控,
而 DAC寄存器直通。假定输入寄存器地址为 7FFFH,产生
锯齿波的程序清单如下:
MOV A,#00H ;取下限值
MOV DPTR,#7FFFH ;指向 0832口地址
MM,MOVX @DPTR,A ;输出
INC A ;延时
NOP
NOP
NOP
SJMP MM ;反复
执行上述程序就可得到如图 9.5所示的锯齿波。
图 9.5 D/A 转换产生的锯齿波
几点说明:
(1)程序每循环一次,A加 1,因此实际上锯齿波的上升边是由
256个小阶梯构成的,但由于阶梯很小,所以宏观上看就如图
中所画的先行增长锯齿波。
F F H
V
0 0 H
T
t
( 2)可通过循环程序段的机器周期数,计算出锯齿波的周
期。并可根据需要,通过延时的方法来改变波形周期。若要
改变锯齿波的频率,可在 AJMP MM指令前加入延迟程序即可。
延时较短时可用 NOP指令实现(本程序就是如此),需要延
时较长时,可以使用一个延长子程序。延迟时间不同,波形
周期不同,锯齿波的斜率就不同。
( 3)通过 A加 1,可得到正向的锯齿波,反之 A减 1可得到负
向的锯齿波。
( 4) 程序中 A的变化范围是 0~ 255,因此得到的锯齿波是
满幅度的。如要求得到非满幅锯齿波,可通过计算求的数字
量的处置和终值,然后在程序中通过置初值和终值的方法实
现。
【 例 9.2】 矩形波电压发生器
采用单缓冲方式,口地址设为 FEFFH.
参考程序如下:
ORG 1100H
START,MOV DPTR,#00FEH ;送 DAC0832口地址
LOOP,MOV A,#dataH ;送高电平数据
MOVX @ DPTR,A
LCALL DELAYH ;调用延时子程序
MOV A,#dataL ;送低电平数据
MOVX @ DPTR,A
LCALL DELAYL ;调用延时子程序
SJMP LCALL
执行上述程序就可得到如图 9.5所示的矩形波。
图 9.5 D/A转换产生的矩形波
V
# d a t e H
# d a t e L
T / 2 T / 2
几点说明:
( 1)以上程序产生的是矩形波,其低点平的宽度由延
时子程序 DELAYL所延时的时间来决定,高电平的宽度
则由 DELAYH所延时的时间决定。
( 2) 改变延时子程序 DELAYL和的 DELAYH延时时间,
就可改变矩形波上下沿的宽度。若 DELAYL=DELAYH(两
者延时一样),则输出的是方波。
( 3) 改变上限值或下限值便可改变矩形波的幅值;
单极性输出时为 0~ -5V或 0~ +5V;双极性输出时为 -
5V~ +5V。
【 例 9.3】 三角波电压发生器
利用 DAC0832产生三角波的参考程序如下:
MOV A,#00H ;取下限值
MOVX DPTR,#FEFFH ;指向 0832口地址
SS1,MOVX @DPTR,A ;输出
NOP ;延时
NOP
NOP
SS2,INC A ;转换值增量
JNZ SS1 ;未到峰值,则继续
SS3,DEC A ;已到峰值,则取后沿
MOVX @DPTR,A ;输出
NOP ;延时
NOP
NOP
JNZ SS3 ;未到谷值,则继续
SJMP SS2 ;已到谷值,则反复
9.1.4 双缓冲方式的接口与应用
在多路 D/A转换的情况下,若要求同步转换输出,必
须采用双缓冲方式。 DAC0832采用双缓冲方式时,数字量
的输入锁存和 D/A转换输出是分两步进行的。
第一,CPU分时向各路 D/A转换器输入要转换的数字
量并锁存在各自的输入寄存器中。
第二,CPU对所有的 D/A转换器发出控制信号,使各路
输入寄存器中的数据进入 DAC寄存器,实现同步转换输出。
图 9.6为两片 DAC0832与 8031的双缓冲方式连接电路,
能实现两路同步输出。
图 9.6 8031与 DAC0832双缓冲方式接口电路
CS
XFER
R
fb
I
out1
I
out2
1
WR
2
WR
WR
DAC0832
DAC0832
R
fb
I
out1
I
out2
CS
XFER
DI
7
DI
0
1
WR
2
WR
DI
7
DI
0
-
+
-
+
V
x
V
y
P0.7 P0.0
80C51
P2.5
P2.6
P2.7
实现两路同步输出的程序如下:
MOV DPTR,#0DFFFH;送 0832( 1) 输入锁存器地址
MOV A,#data1 ; data1送 0832( 1) 输入锁存器
MOVX @DPTR,A ;
MOV DPTR,#0BFFFH;送 0832( 2) 输入锁存器地址
MOV A,#data2 ; data2送 0832( 2) 输入锁存器
MOVX @DPTR,A ;
MOV DPTR,#7FFFH ;送两路 DAC寄存器地址
MOVX @DPTR,A ;两路数据同步转换输出
9.2 MCS-51单片机与 A/D转换器的
接口和应用
9.2.1 典型 A/D转换器芯片 ADC0809
8路模拟信号的分时采集,片内有 8路模拟选通开关,
以及相应的通道抵制锁存用译码电路,其转换时间为
100μs左右。
1.ADC0809的内部逻辑结构
ADC0809的内部逻辑结构图如图 9-7所示。
图 9.7 ADC0809内部逻辑结构 图 9.8 ADC0809引脚图
8位
A/D



三态
输出
锁存
缓冲器地址
锁存

译码
?
?
?
?
?
?
?
?
8位
模拟
开关
V
ref
(+)
12
V
ref
(-)
16
ADC0809
7
EOC
Msb
D
7
D
0
19
20
21
18
8
15
17
14
11
13
V
cc
GND
OE
910
CLKSTART
6
ALE
22
ADDC
23
ADDB
24
ADDA
25
IN
7
5
4
3
2
1
28
27
26IN
0
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
ADC0809
IN
3
IN
4
IN
5
IN
6
IN
7
START
EOC
D
3
OE
CLOCK
V
cc
V
ref(+)
GND
D
1
IN
2
IN
1
IN
0
ADDA
ADDB
ADDC
ALE
D
7
D
6
D
5
D
4
D
0
D
2
V
ref(-)
图中多路开关可选通 8个
模拟通道,允许 8路模拟
量分时输入,共用一个
A/D转换器进行转换,这
是一种经济的多路数据采
集方法。地址锁存与译码
电路完成对 A,B,C 3个
地址位进行锁存和译码,
其译码输出用于通道选择,
其转换结果通过三态输出
锁存器存放、输出,因此
可以直接与系统数据总线
相连。表 9-1为通道选择
表,图 9.9 ADC0809的工
作时序图
表 9-1 通道选择表
C B A
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
被 选 择 的 通 道
I N
0
I N
1
I N
2
I N
3
I N
4
I N
5
I N
6
I N
7
图 9.9 ADC0809的工作时序图
A L E
地 址 A D
模 拟 量
输 入
I N
S T A R T
E O C
O E
D 0 D 7
数 字 量 输 出
d a t a
2,信号引脚
ADC0809芯片为 28引脚为双列直插式封装,其引脚排列
见图 9.8。
对 ADC0809主要信号引脚的功能说明如下:
? IN7~ IN0—— 模拟量输入通道
? A,B,C—— 地址线。 通道端口选择线,A为低地址,
C为 高地址,引脚图中为 ADDA,ADDB和 ADDC。其地址状态
与通道对应关系见表 9-1。
? ALE—— 地址锁存允许信号。对应 ALE上跳沿,A,B、
C地址状态送入地址锁存器中。
? START—— 转换启动信号。 START上升沿时,复位
ADC0809; START下降沿时启动芯片,开始进行 A/D转换;在
A/D转换期间,START应保持低电平。本信号有时简写为 ST.
? D7~ D0—— 数据输出线。为三态缓冲输出形式,可以
和单片 机的数据线直接相连。 D0为最低位,D7为最高
? OE—— 输出允许信号 。 用于控制三态输出锁存器向单
片机输出转换得到的数据 。 OE=0,输出数据线呈高阻; OE=1,
输出转换得到的数据 。
? CLK —— 时钟信号。 ADC0809的内部没有时钟电路,所
需时钟信号由外界提供,因此有时钟信号引脚。通常使用频
率为 500KHz的时钟信号。
? EOC—— 转换结束信号。 EOC=0,正在进行转换; EOC=1,
转换结束。使用中该状态信号即可作为查询的状态 标
志,又可作为中断请求信号使用。
? Vcc—— +5V电源 。
? Vref—— 参考电源参考电压用来与输入的模拟信号进
行比较, 作为逐次逼近的基准 。 其典型值为 +5V(Vref(+)=+5V,
Vref(-)=-5V)。
9.2.2 MCS-51单片机与 ADC0809的接口
ADC0809与 MCS-51单片机的连接如图 9.10所示 。 电路
连接主要涉及两个问题 。 一是 8路模拟信号通道的选择,
二是 A/D转换完成后转换数据的传送 。
1,8路模拟通道选择
图 9.10 ADC0809与 MCS-51的连接
?
?
?
A
0
A
7
+5V
GND
IN
0
IN
7
A
B
C
V
R
(+)
V
R
(-)
CLK
D
0
D
7
EOC
ST
ALE
OE
ADC0809
74LS373
ALE
P
2.0
1
I N T
WR
RD
P
0
80C51
? 2
+
-
A
0
A
1
A
2
如图 9.11所示模拟通道选择信号 A,B,C分别接最低三位
地址 A0,A1,A2即( P0.0,P0.1,P0.2),而地址锁存允许
信号 ALE由 P2.0控制,则 8路模拟通道的地址为 0FEF8H~
0FEFFH.此外,通道地址选择以 WR作写选通信号,这一部
分电路连接如图 9.12所示。
图 9.11 ADC0809的部分信号连接 图 9.12 信号的时间配合
?
?
?
P
2, 0
WR
A
0
A
1
A
3
A L E
S T A R T
A
B
C
WR
A L E
S T A R T
寄 存 器 清, 0,
地 址 锁 存
A / D 启 动
从图中可以看到,把 ALE信号与 START信号接在一起
了,这样连接使得在信号的前沿写入(锁存)通道地址,
紧接着在其后沿就启动转换。图 9.19是有关信号的时间
配合示意图。
启动 A/D转换只需要一条 MOVX指令。在此之前,要将
P2.0清零并将最低三位与所选择的通道好像对应的口地址
送入数据指针 DPTR中。例如要选择 IN0通道时,可采用如
下两条指令,即可启动 A/D转换:
MOV DPTR,#FE00H ;送入 0809的口地址
MOVX @DPTR,A ;启动 A/D转换( IN0)
注意:此处的 A与 A/D转换无关,可为任意值。
2.转换数据的传送
A/D转换后得到的数据应及时传送给单片机进行处理 。
数据传送的关键问题是如何确认 A/D转换的完成, 因为只有
确认完成后, 才能进行传送 。 为此可采用下述三种方式 。
( 1) 定时传送方式
对于一种 A/D转换其来说,转换时间作为一项技术指标
是已知的和固定的。例如 ADC0809转换时间为 128μs,相当
于 6MHz的 MCS-51单片机共 64个机器周期。可据此设计一个
延时子程序,A/D转换启动后即调用此子程序,延迟时间一
到,转换肯定已经完成了,接着就可进行数据传送。
( 2) 查询方式
A/D转换芯片由表明转换完成的状态信号,例如
ADC0809的 EOC端。因此可以用查询方式,测试 EOC的状态,
即可却只转换是否完成,并接着进行数据传送。
( 3) 中断方式
把表明转换完成的状态信号 ( EOC) 作为中断请求
信号, 以中断方式进行数据传送 。
不管使用上述那种方式, 只要一旦确定转换完成,
即可通过指令进行数据传送 。 首先送出口地址并以 RD
信号有效时, OE信号即有效, 把转换数据送上数据总
线, 供单片机接受 。
不管使用上述那种方式, 只要一旦确认转换结束,
便可通过指令进行数据传送 。 所用的指令为 MOVX 读指
令, 仍以图 9-17所示为例, 则有
MOV DPTR,#FE00H
MOVX A,@DPTR
该指令在送出有效口地址的同时,发出有效信号
RD,使 0809的输出允许信号 OE有效,从而打开三态门
输出,是转换后的数据通过数据总线送入 A累加器中。
这里需要说明的示, ADC0809的三个地址端 A,B,C即
可如前所述与地址线相连, 也可与数据线相连, 例如与 D0~
D2相连 。 这是启动 A/D转换的指令与上述类似, 只不过 A的内
容不能为任意数, 而必须和所选输入通道号 IN0~ IN7相一致 。
例如当 A,B,C分别与 D0,D1,D2相连时, 启动 IN7的 A/D转换
指令如下:
MOV DPTR,#FE00H ;送入 0809的口地址
MOV A, #07H ; D2D1D0=111选择 IN7通道
MOVX
@DPTR,A ;启动 A/D转换
9.2.3 A/D转换应用举例
设有一个 8路模拟量输入的巡回监测系统, 采样数据
依次存放在外部 RAM 0A0H~ 0A7H单元中,按图 9.10所示的
接口电路, ADC0809的 8个通道地址为 0FEF8H~ 0FEFFH.其
数据采样的初始化程序和中断服务程序 ( 假定只采样一
次 ) 如下:
初始化程序:
MOV R0,#0A0H ;数据存储区首地址
MOV R2,#08H ; 8路计数器
SETB IT1 ;边沿触发方式
SETB EA ;中断允许
SETB EX1 ;允许外部中断 1中断
MOV DPTR,#0FEF8H ; D/A转换器地址
LOOP,MOVX @DPTR,A ;启动 A/D转换
HERE,SJMP
HERE ; 等待中断
中断服务程序:
DJNZ R2,ADEND
MOVX A,@DPTR ;数据采样
MOVX @R0,A ;存数
INC DPTR ;指向下一模拟通道
INC R0 ;指向数据存储器下一单元
MOVX @DPTR,A
ADEND,RETI