第九章A/D和D/A转换器接口9.1MCS-51单片机与D/A转换器的接口和应用9.1.1典型D/A转换器芯片DAC0832DAC0832是一个8位D/A转换器芯片,单电源供电,从+5V~+15V均可正常工作,基准电压的范围为±10V,电流建立时间为1µs,CMOS工艺,低功耗20mm。其内部结构如图9.1所示,它由1个8位输入寄存器、1个8位DAC寄存器和1个8位D/A转换器组成和引脚排列如图9.2所示。CS1WRAGNDDI3DI2DI1DI0VrefRfbDGNDVccILE2WRDI4DI5DI6DI7Iout2Iout1XFER1234567891011121314151617181920DAC0832图9.2DAC0832引脚图功能ILE&&&8位D/A转换器8位DAC寄存器8位数据输入寄存器VCC20IOUT212IOUT111Rfb93AGND1013141516567LsbD0D1D2D3D4D5D6D74VSS(DGND)Vref817181912XFER2WRCS1WR1LE2LE图9.1DAC0832的内部结构该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.2DAC0832工作方式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.3DAC0832单缓冲方式接口WR74LS373GDAC0832DI70CSXFER1WR2WRVccILEVrefRfbIout1Iout2AGNDDGND-++5VP2.7ALEP080C51Vout2.单缓冲方式应用举例【例9.1】锯齿波电压发生器在一些控制应用中,需要有一个线性增长的电压(锯齿波)来控制检测过程、移动记录笔或移动电子束等。对此可通过在DAC0832的输出端接运算放大器,由运算放大器产生锯齿波来实现,其电路连接图如图9.4所示。图9.4用DAC0832产生锯齿波电路CSDIODI71WR地址译码输出P0.7P0.0WRILEVCCVrefRfbIout1Iout22WRXFER-+-++10V-10V10k10k+5V1/2LM324DAC0832图中的DAC0832工作于单缓冲方式,其中输入寄存器受控,而DAC寄存器直通。假定输入寄存器地址为7FFFH,产生锯齿波的程序清单如下:MOVA,#00H;取下限值MOVDPTR,#7FFFH;指向0832口地址MM:MOVX@DPTR,A;输出INCA;延时NOPNOPNOPSJMPMM;反复执行上述程序就可得到如图9.5所示的锯齿波。图9.5D/A转换产生的锯齿波几点说明:(1)程序每循环一次,A加1,因此实际上锯齿波的上升边是由256个小阶梯构成的,但由于阶梯很小,所以宏观上看就如图中所画的先行增长锯齿波。FFHV00HTt(2)可通过循环程序段的机器周期数,计算出锯齿波的周期。并可根据需要,通过延时的方法来改变波形周期。若要改变锯齿波的频率,可在AJMPMM指令前加入延迟程序即可。延时较短时可用NOP指令实现(本程序就是如此),需要延时较长时,可以使用一个延长子程序。延迟时间不同,波形周期不同,锯齿波的斜率就不同。(3)通过A加1,可得到正向的锯齿波,反之A减1可得到负向的锯齿波。(4)程序中A的变化范围是0~255,因此得到的锯齿波是满幅度的。如要求得到非满幅锯齿波,可通过计算求的数字量的处置和终值,然后在程序中通过置初值和终值的方法实现。【例9.2】矩形波电压发生器采用单缓冲方式,口地址设为FEFFH.参考程序如下:ORG1100HSTART:MOVDPTR,#00FEH;送DAC0832口地址LOOP:MOVA,#dataH;送高电平数据MOVX@DPTR,ALCALLDELAYH;调用延时子程序MOVA,#dataL;送低电平数据MOVX@DPTR,ALCALLDELAYL;调用延时子程序SJMPLCALL执行上述程序就可得到如图9.5所示的矩形波。图9.5D/A转换产生的矩形波V#dateH#dateLT/2T/2几点说明:(1)以上程序产生的是矩形波,其低点平的宽度由延时子程序DELAYL所延时的时间来决定,高电平的宽度则由DELAYH所延时的时间决定。(2)改变延时子程序DELAYL和的DELAYH延时时间,就可改变矩形波上下沿的宽度。若DELAYL=DELAYH(两者延时一样),则输出的是方波。(3)改变上限值或下限值便可改变矩形波的幅值;单极性输出时为0~-5V或0~+5V;双极性输出时为-5V~+5V。【例9.3】三角波电压发生器利用DAC0832产生三角波的参考程序如下:MOVA,#00H;取下限值MOVXDPTR,#FEFFH;指向0832口地址SS1:MOVX@DPTR,A;输出NOP;延时NOPNOPSS2:INCA;转换值增量JNZSS1;未到峰值,则继续SS3:DECA;已到峰值,则取后沿MOVX@DPTR,A;输出NOP;延时NOPNOPJNZSS3;未到谷值,则继续SJMPSS2;已到谷值,则反复9.1.4双缓冲方式的接口与应用在多路D/A转换的情况下,若要求同步转换输出,必须采用双缓冲方式。DAC0832采用双缓冲方式时,数字量的输入锁存和D/A转换输出是分两步进行的。第一,CPU分时向各路D/A转换器输入要转换的数字量并锁存在各自的输入寄存器中。第二,CPU对所有的D/A转换器发出控制信号,使各路输入寄存器中的数据进入DAC寄存器,实现同步转换输出。图9.6为两片DAC0832与8031的双缓冲方式连接电路,能实现两路同步输出。图9.68031与DAC0832双缓冲方式接口电路CSXFERRfbIout1Iout21WR2WRWRDAC0832DAC0832RfbIout1Iout2CSXFERDI7DI01WR2WRDI7DI0-+-+VxVyP0.7P0.080C51P2.5P2.6P2.7实现两路同步输出的程序如下:MOVDPTR,#0DFFFH;送0832(1)输入锁存器地址MOVA,#data1;data1送0832(1)输入锁存器MOVX@DPTR,A;MOVDPTR,#0BFFFH;送0832(2)输入锁存器地址MOVA,#data2;data2送0832(2)输入锁存器MOVX@DPTR,A;MOVDPTR,#7FFFH;送两路DAC寄存器地址MOVX@DPTR,A;两路数据同步转换输出9.2MCS-51单片机与A/D转换器的接口和应用9.2.1典型A/D转换器芯片ADC08098路模拟信号的分时采集,片内有8路模拟选通开关,以及相应的通道抵制锁存用译码电路,其转换时间为100µs左右。1.ADC0809的内部逻辑结构ADC0809的内部逻辑结构图如图9-7所示。图9.7ADC0809内部逻辑结构图9.8ADC0809引脚图8位A/D转换器三态输出锁存缓冲器地址锁存与译码8位模拟开关Vref(+)12Vref(-)16ADC08097EOCMsbD7D01920211881517141113VccGNDOE910CLKSTART6ALE22ADDC23ADDB24ADDA25IN754321282726IN012345678910111213141516171819202122232425262728ADC0809IN3IN4IN5IN6IN7STARTEOCD3OECLOCKVccVref(+)GNDD1IN2IN1IN0ADDAADDBADDCALED7D6D5D4D0D2Vref(-)图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法。地址锁存与译码电路完成对A、B、C3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放、输出,因此可以直接与系统数据总线相连。表9-1为通道选择表,图9.9ADC0809的工作时序图表9-1通道选择表CBA000001010011100101110111被选择的通道IN0IN1IN2IN3IN4IN5IN6IN7图9.9ADC0809的工作时序图ALE地址AD模拟量输入INSTARTEOCOED0D7数字量输出data2.信号引脚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——参考电源参考电压用来与输入的模