首页 - 信息 - 指出DAC0832的端口地址(指出dac0832的端口地址编写三角波信号输出控制程序)

指出DAC0832的端口地址(指出dac0832的端口地址编写三角波信号输出控制程序)

2023-09-24 21:18

指出DAC0832的端口地址(指出dac0832的端口地址编写三角波信号输出控制程序)

#define DAC0832 XBYTE[0x7fff] 这个定义起什么作用~

XBYTE 的作用,可以用来定义绝对地址,是P0口和P2口的,其中P2口对应的是高位,P0口对应的是地位
如 XBYTE[0x1234] = 0x56;
则等价于
mov dptr,#1234h
mov @dptr,#56h
P0口和P2口共同作用,可以作为外部存储器的地址线
P2接地址总线的高8位(A15~A8),P0接地址总线的低8位(A7~A0)同时接数据总线,对片外地址由P2P0构成,当dac0832的cs'接p2^7时低电平有效,所以P2最大为01111111=0x7f(最大为P2^6~P2^0=1),P0最大为11111111=0xff,所以为XBYTE[0x7fff],若cs'接p2^6则为XBYTE[0xbfff],若cs'接p2^6则为XBYTE[0xbfff]。

来自:单片机软硬件交流群 172012730 发广告的绕道追问

超级谢谢~懂很多了!

DAC0832的输出形式

如图9-58所示, 由运算放大器进行电流→电压转换,使用内部反馈电阻。输出电压值VOUT和输入数字量D的关系:
VOUT = - VREF ×D/256
D = 0~255, VOUT = 0 ~ - VREF ×255/256
VREF = -5V, VOUT =0~5×(255/256)V
VREF = +5V, VOUT = 0 ~ -5×(255/256)V 如果实际应用系统中要求输出模拟电压为双极性,则需要用转换电路实现。如图9-59所示。
其中 R2=R3=2R1
VOUT= 2×VREF×D/256 -VREF= (2D/256-1)VREF
D = 0, VOUT= -VREF;
D = 128, VOUT= 0;
D = 255, VOUT= (2×255/256-1)×VREF= (254/255)VREF
即:输入数字为0~255时,输出电压在- VREF ~+ VREF之间变化。
1. 运算放大器
运算放大器有三个特点:
⑴开环放大倍数非常高,一般为几千,甚至可高达10万。在正常情况下,运算放大器所需要的输入电压非常小。
⑵输入阻抗非常大。运算放大器工作时,输入端相当于一个很小的电压加在一个很大的输入阻抗上,所需要的输入电流也极小。
⑶输出阻抗很小,所以,它的驱动能力非常大。
2.由电阻网络和运算放大器构成的D/A转换器
利用运算放大器各输入电流相加的原理,可以构成如图10.7所示的、由电阻网络和运算放大器组成的、最简单的4位D/A转换器。图中,V0是一个有足够精度的标准电源。运算放大器输入端的各支路对应待转换资料的D0,D1,…,Dn-1位。各输入支路中的开关由对应的数字元值控制,如果数字元为1,则对应的开关闭合;如果数字为0,则对应的开关断开。各输入支路中的电阻分别为R,2R,4R,…这些电阻称为权电阻。
假设,输入端有4条支路。4条支路的开关从全部断开到全部闭合,运算放大器可以得到16种不同的电流输入。这就是说,通过电阻网络,可以把0000B~1111B转换成大小不等的电流,从而可以在运算放大器的输出端得到相应大小不同的电压。如果数字0000B每次增1,一直变化到1111B,那么,在输出端就可得到一个0~V0电压幅度的阶梯波形。
3.采用T型电阻网络的D/A转换器
从图10.7可以看出,在D/A转换中采用独立的权电阻网络,对于一个8位二进制数的D/A转换器,就需要R,2R,4R,…,128R共8个不等的电阻,最大电阻阻值是最小电阻阻值的128倍,而且对这些电阻的精度要求比较高。如果这样的话,从工艺上实现起来是很困难的。所以,n个如此独立输入支路的方案是不实用的。
在DAC电路结构中,最简单而实用的是采用T型电阻网络来代替单一的权电阻网络,整个电阻网络只需要R和2R两种电阻。在集成电路中,由于所有的组件都做在同一芯片上,电阻的特性可以做得很相近,而且精度与误差问题也可以得到解决。
图10.8是采用T型电阻网络的4位D/A转换器。4位元待转换资料分别控制4条支路中开关的倒向。在每一条支路中,如果(资料为0)开头倒向左边,支路中的电阻就接到地;如果(资料为1)开关倒向右边,电阻就接到虚地。所以,不管开关倒向哪一边,都可以认为是接“地”。不过,只有开关倒向右边时,才能给运算放大器输入端提供电流。
T型电阻网络中,节点A的左边为两个2R的电阻并联,它们的等效电阻为R,节点B的左边也是两个2R的电阻并联,它们的等效电阻也是R,…,依次类推,最后在D点等效于一个数值为R的电阻接在参考电压VREF上。这样,就很容易算出,C点、B点、A点的电位分别为-VREF/2,-VREF/4,-VREF/8。
在清楚了电阻网络的特点和各节点的电压之后,再来分析一下各支路的电流值。开关S3,S2,S1,S0分别代表对应的1位二进制数。任一资料位Di=1,表示开关Si倒向右边;Di=0,表示开关Si倒向左边,接虚地,无电流。当右边第一条支路的开关S3倒向右边时,运算放大器得到的输入电流为-VREF/(2R),同理,开关S2,S1,S0倒向右边时,输入电流分别为-VREF/(4R),-VREF/(8R),-VREF/(16R)。
如果一个二进制数据为1111,运算放大器的输入电流
I=-VREF/(2R)-VREF/(4R)-VREF/(8R)-VREF/(16R)
=-VREF/(2R)(20+2-1+2-2+2-3)
=-VREF/(24R)(23+22+21+20)
相应的输出电压
V0=IR0=-VREFR0(24R)(23+22+21+20)
将资料推广到n位,输出模拟量与输入数字量之间关系的一般表达式为:
V0=-VREFR0/(2nR)(Dn-12n-1+Dn-2 2n-2+…+D121+D020) (Di=1或0)
上式表明,输出电压V0除了和待转换的二进制数成比例外,还和网络电阻R、运算放大器反馈电阻R0、标准参考电压VREF有关。
2. D/A转换器性能参数
在实现D/A转换时,主要涉及下面几个性能参数。
⑴分辨率。分辨率是指最小输出电压(对应于输入数字量最低位增1所引起的输出电压增量)和最大输出电压(对应于输入数字量所有有效位全为1时的输出电压)之比,
例如,4位DAC的分辨率为1/(16-1)=1/15=6.67%(分辨率也常用百分比来表示)。8位DAC的分辨率为1/255=0.39%。显然,位数越多,分辨率越高。
⑵转换精度。如果不考虑D/A转换的误差,DAC转换精度就是分辨率的大小,因此,要获得高精度的D/A转换结果,首先要选择有足够高分辨率的DAC。
D/A转换精度分为绝对和相对转换精度,一般是用误差大小表示。DAC的转换误差包括零点误差、漂移误差、增益误差、噪声和线性误差、微分线性误差等综合误差。
绝对转换精度是指满刻度数字量输入时,模拟量输出接近理论值的程度。它和标准电源的精度、权电阻的精度有关。相对转换精度指在满刻度已经校准的前提下,整个刻度范围内,对应任一模拟量的输出与它的理论值之差。它反映了DAC的线性度。通常,相对转换精度比绝对转换精度更有实用性。
相对转换精度一般用绝对转换精度相对于满量程输出的百分数来表示,有时也用最低位(LSB)的几分之几表示。例如,设VFS为满量程输出电压5V,n位DAC的相对转换精度为±0.1%,则最大误差为±0.1%VFS=±5mV;若相对转换精度为±1/2LSB,LSB=1/2n,则最大相对误差为±1/2n+1VFS。
⑶非线性误差。D/A转换器的非线性误差定义为实际转换特性曲线与理想特性曲线之间的最大偏差,并以该偏差相对于满量程的百分数度量。转换器电路设计一般要求非线性误差不大于±1/2LSB。
⑷转换速率/建立时间。转换速率实际是由建立时间来反映的。建立时间是指数字量为满刻度值(各位全为1)时,DAC的模拟输出电压达到某个规定值(比如,90%满量程或±1/2LSB满量程)时所需要的时间。
建立时间是D/A转换速率快慢的一个重要参数。很显然,建立时间越大,转换速率越低。不同型号DAC的建立时间一般从几个毫微秒到几个微秒不等。若输出形式是电流,DAC的建立时间是很短的;若输出形式是电压,DAC的建立时间主要是输出运算放大器所需要的响应时间。
10.3.3 DAC0832及接口电路
DAC0832是美国资料公司研制的8位双缓冲器D/A转换器。芯片内带有资料锁存器,可与数据总线直接相连。电路有极好的温度跟随性,使用了COMS电流开关和控制逻辑而获得低功耗、低输出的泄漏电流误差。芯片采用R-2RT型电阻网络,对参考电流进行分流完成D/A转换。转换结果以一组差动电流IOUT1和IOUT2输出。
1.DAC0832的内部结构
DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的锁存信号为ILE;第二级锁存器称为DAC寄存器,它的锁存信号为传输控制信号 。因为有两级锁存器,DAC0832可以工作在双缓冲器方式,即在输出模拟信号的同时采集下一个数字量,这样能有效地提高转换速度。此外,两级锁存器还可以在多个D/A转换器同时工作时,利用第二级锁存信号来实现多个转换器同步输出。
ILE为高电平、WR1 和 CS为低电平时, LE1为高电平,输入寄存器的输出跟随输入而变化;此后,当WR1 由低变高时, LE1为低电平,资料被锁存到输入寄存器中,这时的输入寄存器的输出端不再跟随输入资料的变化而变化。对第二级锁存器来说, WR2和XFER 同时为低电平时, LE2为高电平,DAC寄存器的输出跟随其输入而变化;此后,当WR2 由低变高时, LE2变为低电平,将输入寄存器的资料锁存到DAC寄存器中。
2. DAC0832的引脚特性
DAC0832是20引脚的双列直插式芯片。各引脚的特性如下:
CS——片选信号,和允许锁存信号ILE组合来决定 是否起作用,低有效。
ILE——允许锁存信号,高有效。
WR1——写信号1,作为第一级锁存信号,将输入资料锁存到输入寄存器(此时, 必须和 、ILE同时有效),低有效。
WR2——写信号2,将锁存在输入寄存器中的资料送到DAC寄存器中进行锁存(此时,传输控制信号 必须有效)低有效。
XFER——传输控制信号,低有效。
DI7~DI0——8位数据输入端。
IOUT1——模拟电流输出端1。当DAC寄存器中全为1时,输出电流最大,当DAC寄存器中全为0时,输出电流为0。
IOUT2——模拟电流输出端2。IOUT1+IOUT2=常数。
Rfb——反馈电阻引出端。DAC0832内部已经有反馈电阻,所以,RFB端可以直接接到外部运算放大器的输出端。相当于将反馈电阻接在运算放大器的输入端和输出端之间。
VREF——参考电压输入端。可接电压范围为±10V。外部标准电压通过VREF与T型电阻网络相连。
VCC——芯片供电电压端。范围为+5V~+15V,最佳工作状态是+15V。
AGND——模拟地,即模拟电路接地端。
DGND——数字地,即数字电路接地端。
3.DAC0832的工作方式
DAC0832进行D/A转换,可以采用两种方法对数据进行锁存。
第一种方法是使输入寄存器工作在锁存状态,而DAC寄存器工作在直通状态。具体地说,就是使 和 都为低电平,DAC寄存器的锁存选通端得不到有效电平而直通;此外,使输入寄存器的控制信号ILE处于高电平、 处于低电平,这样,当 端来一个负脉冲时,就可以完成1次转换。
第二种方法是使输入寄存器工作在直通状态,而DAC寄存器工作在锁存状态。就是使 和 为低电平,ILE为高电平,这样,输入寄存器的锁存选通信号处于无效状态而直通;当WR2 和XFER 端输入1个负脉冲时,使得DAC寄存器工作在锁存状态,提供锁存数据进行转换。
根据上述对DAC0832的输入寄存器和DAC寄存器不同的控制方法,DAC0832有如下3种工作方式:
⑴单缓冲方式。单缓冲方式是控制输入寄存器和DAC寄存器同时接收资料,或者只用输入寄存器而把DAC寄存器接成直通方式。此方式适用只有一路模拟量输出或几路模拟量异步输出的情形。
⑵双缓冲方式。双缓冲方式是先使输入寄存器接收资料,再控制输入寄存器的输出资料到DAC寄存器,即分两次锁存输入资料。此方式适用于多个D/A转换同步输出的情节。
⑶直通方式。直通方式是资料不经两级锁存器锁存,即 CS*,XFER* ,WR1* ,WR2* 均接地,ILE接高电平。此方式适用于连续反馈控制线路和不带微机的控制系统,不过在使用时,必须通过另加I/O接口与CPU连接,以匹配CPU与D/A转换。
4. DAC0832的应用举例
⑴DAC0832实现一次D/A转换,可以采用下面程序段。设定要转换的数据放在1000H单元中。
MOV BX,100H
MOV AL,[BX] ;取转换资料
OUT DX,AL
⑵在实际应用中,经常需要用到一个线性增长的电压去控制某一个检测过程,或者作为扫描电压去控制一个电子束的移动。执行下面的程序段,利用D/A转换器产生一个锯齿波电压,实现此类控制作用。
MOV DX,PORTA ;PORTA为D/A转换器端口地址
MOV AL,OFFH ;置初值
ROTAT:INC AL
OUT DX,AL ;往D/A转换器输出资料
CALL DELP ;调用延迟子程序
JMP ROTAT
DELY: MOV CX, DATA ;置延迟常数DATA
DELY1: LOOP DELY1
RET
如果需要一个负向的锯齿波,只要将指令INC AL改成DEC AL就可以了。
⑶从两个不相关的文件中输出一批X-Y资料,驱动X-Y记录仪,或者控制加工复杂零件的走刀(X轴)和进刀(Y轴)。这些在控制过程中是很有用的。下面程序驱动X-Y记录仪的100点输出,并用软件驱动记录仪的抬笔和放笔控制。
MOV SI, XDATA ;X轴资料指针→SI
MOV DI, YDATA ;Y轴资料指针→DI
MOV CX, 100
WE0: MOV AL,[SI]
OUT PORTX, AL ;往X轴的D/A转换器输出资料
MOV AL,[DI]
OUT PORTY,AL;往Y轴的D/A转换器输出资料
CALL DELY1 ;调延迟子程序1,等待笔移动
MOV AL,01H
OUT PORTM,AL;输出升脉冲,控制笔放下
CALL DELY2 ;调延迟子程序2,等待完成
MOV AL,00H
OUT PORTM,AL;输出降脉冲,控制笔抬起
CALL DELY2 ;调延迟子程序2,等待完成
INC SI
INC DI
LOOP WE0
HLT
DELY1:┇
RET
DELY2:┇
RET
XDATA DB…
YDATA DB…
(4).利用C语言编程:
#pragma db oe sb
#i nclude
#i nclude
#define DAC0832 XBYTE[0x7fff] /* 定义DAC0832端口地址 */
#define uchar unsigned char
void delay(uchar t) { /* 延时函数 */
while(t--);
}
void saw(void) { /* 锯齿波发生函数 */
uchar i;
for (i=0;i<255;i++) {
DAC0832=i;
}
}
void square(void) { /* 方波发生函数 */
DAC0832=0x00;
delay(0x10);
DAC0832=0xff;
delay(0x10);
}
void main(void) {
uchar i,j;
i=j=0xff;
while(i--) {
saw(); /* 产生一段锯齿波 */
}
while(j--) {
square(); /* 产生一段方波 */
}
}

DAC0832.与单片机连接做数模转换。对于DAC0832端口定义,和内存定义的疑惑?

DAC0832是将单片机输入的数据转换为电流输出,不是接收数据的,接收数据的是AD转换芯片。
XBYTE[]将外部的内存单元编程不同的地址,#define
DAC0832
XBYTE[OxFFFE]这个就可以操作DAC0832来改变地址0xfffe的单元的值。0xfffe是DAC0832这个外部的内存单元的地址,既然是外部的内存单元,和单片机内存不是同一东西,他的地址和单片机的内存地址编码无关。

设DAC0832的端口地址为0FFF0H,请写出用该芯片输出上三角波的核心代码

DAC832是一个数模转换芯片,要用它产生三角波,只需要将AD转换的值从低到高,再从高到低传送给它就可以实现了,以下是具体例程:
ORG 0000H
JMP START
ORG 0030H
START:
CLR A
LOOP: ;该循环产生上升波形
MOV P1, A ;输出,D/A 转换
INC A
CALL DELAY ;延时
CJNE A,#250,LOOP
LOOP1: ;该循环产生下降波形
DEC A
MOV P1,A
JNZ LOOP1
SJMP START
DELAY: ;延时子程序
MOV R6, #2
DEL1:
MOV R7, #250
DEL2:
DJNZ R7, DEL2 ;内循环250遍
DJNZ R6, DEL1 ;外循环2遍
RET
END

以上就是小编对于指出DAC0832的端口地址(指出dac0832的端口地址编写三角波信号输出控制程序)问题和相关问题的解答了,指出DAC0832的端口地址(指出dac0832的端口地址编写三角波信号输出控制程序)的问题希望对你有用!