1、第11章 AT89S51单片机与D/A、 A/D 转换器接口,11.1 AT89S51单片机与DAC接口 11.1.1 D/A转换器简介 1概述购买和使用D/A转换器要注意几个问题。 (1)D/A转换器输出形式有两种输出形式。一种是电压输出,即给D/A转换器输入是数字量,而输出为电压。另一种是电流输出。对电流输出D/A转换器,如需要模拟电压输出,可在其输出端加一个由运算放大器构成I-V转换电路,将电流输出转换为电压输出。 (2)D/A转换器与单片机接口形式单片机与D/A转换器连接,早期多采用8位数字量并行传输并行接口,现在除并行接口外,带有串行口D/A转换器品种也不断增多。除了通用UART串行
2、口外,目前较为流行还有I2C串行口和SPI串行口等。所以在选择单片D/A转换器时,要考虑单片机与D/A转换器接口形式。,2主要技术指标(1)分辨率指单片机输入给D/A转换器单位数字量变化,所引起模拟量输出变化,通常定义为输出满刻度值与2n之比(n为D/A转换器二进制位数)。习惯上用输入数字量二进制位数表示。位数越多,分辨率越高,即D/A转换器对输入量变化敏感程度越高。例如,8位D/A转换器,若满量程输出为10V,根据分辨率定义,则分辨率为10V/2n,分辨率为:10V/256=39.1mV ,即输入二进制数最低位变化可引起输出模拟电压变化39.1mV,该值占满量程0.391%,常用符号1LSB
3、表示。同理: 10位D/A转换 1 LSB = 9.77mV = 0.1%满量程 12位D/A转换 1 LSB = 2.44mV = 0.024%满量程 16位D/A转换 1 LSB = 0.076mV = 0.00076%满量程 使用时,应根据对D/A转换器分辨率需要来选定D/A转换器位数。,(2)建立时间描述D/A转换器转换快慢一个参数,用于表明转换时间或转换速度。其值为从输入数字量到输出达到终值误差(1/2)LSB时所需时间。电流输出转换时间较短,而电压输出转换器,由于要加上完成I-V转换运算放大器延迟时间,因此转换时间要长一些。快速D/A转换器转换时间可控制在1s以下。 (3)转换精度
4、理想情况下,转换精度与分辨率基本一致,位数越多精度越高。但由于电源电压、基准电压、电阻、制造工艺等各种因素存在着误差。严格讲,转换精度与分辨率并不完全一致。只要位数相同,分辨率则相同,但相同位数不同转换器转换精度会有所不同。例如,某种型号8位DAC精度为0.19%,而另一种型号8位DAC精度为0.05%。,11.1.2 AT89S51与8位D/A转换器0832接口设计 1DAC0832芯片介绍 (1)DAC0832特性美国国家半导体公司DAC0832芯片是具有两个输入数据寄存器8位DAC,它能直接与AT89S51单片机连接,主要特性如下。 分辨率为8位。 电流输出,建立时间为1s。 可双缓冲输
5、入、单缓冲输入或直接数字输入。 单一电源供电(+5V+15V)。 低功耗,20mW。 (2)DAC0832引脚及逻辑结构 引脚如图11-1所示,DAC0832逻辑结构如图11-2所示。,图11-1 DAC0832引脚图,图11-2 DAC0832逻辑结构,引脚功能: DI0DI7:8位数字信号输入端,与单片机数据总线P0口相连,用于接收单片机送来待转换为模拟量数字量,DI7为最高位。:片选端,当 为低电平时,本芯片被选中。 ILE :数据锁存允许控制端,高电平有效。:第一级输入寄存器写选通控制,低电平有效。当 =0,ILE=1, =0时,待转换数据信号被锁存到第一级8位输入寄存器中。:数据传送
6、控制,低电平有效。:DAC寄存器写选通控制端,低电平有效。当 =0, =0时,输入寄存器中待转换数据传入8位DAC寄存器中。 IOUT1:D/A转换器电流输出1端,输入数字量全为“1”时,IOUT1最大,输入数字量全为“0”时,IOUT1最小。,IOUT2:D/A转换器电流输出2端,IOUT2 + IOUT1 = 常数。 Rfb:外部反馈信号输入端,内部已有反馈电阻Rfb,根据需要也可外接反馈电阻。 VCC:电源输入端,在+5V+15V范围内。 DGND:数字信号地。 AGND:模拟信号地,最好与基准电压共地。“8位输入寄存器”用于存放单片机送来数字量,使输入数字量得到缓冲和锁存,由 加以控制
7、; “8位DAC寄存器”用于存放待转换数字量,由 控制; “8位D/A转换电路”受“8位DAC寄存器”输出数字量控制,输出和数字量成正比模拟电流。因此,需外接I-V转换运算放大器电路,才能得到模拟输出电压。,2AT89S51单片机与DAC0832接口电路设计设计接口电路时,常用单缓冲方式或双缓冲方式单极性输出。 (1)单缓冲方式指DAC0832内部两个数据缓冲器有一个处于直通方式,另一个处于受AT89S51单片机控制锁存方式。在实际应用中,如果只有一路模拟量输出,或虽是多路模拟量输出但并不要求多路输出同步情况下,可采用单缓冲方式。 图11-3所示是单极性模拟电压输出电路,由于DAC0832是8
8、位(28=256)D/A转换器,由基尔霍夫定律列出方程组可解得0832输出电压vo与输入数字量B关系为,图11-3 单缓冲方式下单片机与DAC0832接口电路,输出模拟电压vo和输入数字量B以及基准电压VREF成正比,且B为0时,vo也为0,输入数字量为255时,vo为最大绝对值输出,且不会大于VREF。 图11-3中, 和 接地,故DAC0832“8位DAC寄存器” 工作于直通方式。 “8位输入寄存器”受 和 端控制,而且 由译码器输出端FEH送来。单片机执行如下两条指令就可在 和 上产生低电平信号,使DAC0832接收AT89S51送来数字量。 MOV R0,#0FEH ;DAC端口地址F
9、EHR0 MOVX R0,A ;单片机的 WR和译码器FEH输出端有效,【例11-1】 DAC0832用作波形发生器。根据图11-3,分别写出产生锯齿波、三角波和矩形波程序。 在图11-3中,运算放大器A输出端Vout直接反馈到Rfb,故这种接线产生模拟输出电压是单极性的。 锯齿波产生ORG 2000H START: MOV R0,#0FEH ;DAC地址FEH R0MOV A,#00H ;数字量A LOOP: MOVX R0,A ;数字量D/A转换器INC A ;数字量逐次加1SJMP LOOP,当输入数字量从0开始,逐次加1进行D/A转换,模拟量与其成正比输出。当A = FFH时,再加1则
10、溢出清0,模拟输出又为0,然后又重新重复上述过程,如此循环,输出波形就是锯齿波。实际上,每一上升斜边要分成256个小台阶,每个小台阶暂留时间为执行后三条指令所需要时间。因此 “INC A”指令后插入NOP指令或延时程序,则可改变锯齿波频率。,图11-4 DAC0832产生锯齿波输出, 三角波产生ORG 2000H START:MOV R0,#0FEHMOV A,#00H UP: MOVX R0,A ;产生三角波上升边INC AJNZ UP DOWN:DEC A ;A=0时减1为FFH, 产生三角波下降边MOVX R0,AJNZ DOWN SJMP UP 输出三角波如图11-5所示。图11-5
11、DAC0832产生三角波输出, 矩形波产生 ORG 2000H START: MOV R0,#0FEH LOOP: MOV A,#data1 ;#data1为上限电平对应的数字量MOVX R0,A ;置矩形波上限电平LCALL DELAY1 ;调用高电平延时程序MOV A,#data2 ;#data2为下限电平对应的数字量MOVX R0,A ;置矩形波下限电平LCALL DELAY2 ;调用低电平延时程序SJMP LOOP ;重复进行下一个周期输出矩形波如图11-6所示。 DELAY1、DELAY2为两个延时程序,分别决定输出矩形波高、低电平时持续宽度。矩形波频率也可用延时方法改变。,图11-
12、6 DAC0832产生矩形波输出 (2)双缓冲方式多路D/A转换要求同步输出时,必须采用双缓冲同步方式。此方式工作时,数字量输入锁存和D/A转换输出是分两步完成。单片机必须通过 来锁存待转换数字量,通过 来启动D/A转换(见图11-2)。因此,双缓冲方式下,DAC0832应该为单片机提供两个I/O端口。,AT89S51单片机和DAC0832在双缓冲方式下连接如图11-7所示。 1#DAC0832因 和译码器FDH相连而占有FDH和FFH两个I/O端口地址,而2#DAC0832的两个端口地址为FEH和FFH。其中,FDH和FEH分别为1#和2#DAC0832数字量输入控制端口地址,而FFH为动D
13、/A转换端口地址。若把图11-7中DAC输出模拟电压Vx和Vy来控制X-Y绘图仪,则应把Vx和Vy分别加到X-Y绘图仪X通道和Y通道,而X-Y绘图仪由X、Y两个方向步进电机驱动,其中一个电机控制绘笔沿X方向运动;另一个电机控制绘笔沿Y方向运动。 因此对X-Y绘图仪控制有一基本要求:就是两路模拟信号要同步输出,使绘制曲线光滑。如果不同步输出,例如先输出X通道模拟电压,再输出Y通道模拟电压,则绘图笔先向X方向移动,再向Y方向移动,此时绘制曲线就是阶梯状的。通过本例,也就不难理解DAC设置双缓冲方式目的所在。,19,图11-7 单片机和两片DAC0832双缓冲方式接口电路,【例11-2】设AT89S
14、51内部RAM中有两个长度为20数据块,其起始地址为分别为addr1和addr2,根据图11-7,编写能把addr1和addrr2中数据从1#和2#DAC0832同步输出程序。程序中addr1和addr2中数据,即为绘图仪所绘制曲线x、y坐标点。 由图11-7可知,DAC0832各端口地址为:FDH:1#DAC0832数字量输入控制端口FEH:2#DAC0832数字量输入控制端口FFH:1#和2#DAC0832启动D/A转换端口首先使工作寄存器0区R1指向addr1;1区R1指向addr2;0区工作寄存器R2存放数据块长度;0区和1区工作寄存器区R0指向DAC端口地址。程序如下:,ORG 20
15、00Haddr1 DATA 20H ;定义存储单元addr2 DATA 40H ;定义存储单元DTOUT:MOV R1,#addr1 ;0区R1指向addr1MOV R2,#20 ;数据块长度送0区R2SETB RS0 ;切换到工作寄存器1区MOV R1,#addr2 ;1区R1指向addr2CLR RS0 ;返回工作寄存器0区NEXT:MOV R0,#0FDH ;0区R0指向1#DAC数字量控制端口MOV A,R1 ;addr1中数据送AMOVX R0,A ;addr1中数据送1#DACINC R1 ;修改addr1指针0区R1SETB RS0 ;转入1区MOV R0,#0FEH ;1区R0
16、指向2#DAC0832数字量控制端口MOV A,R1 ;addr2中数据送A,MOVX R0,A ;addr2中数据送2#DAC0832INC R1 ;修改addr2指针1区R1INC R0 ;1区R0指向DAC启动D/A转换端口MOVX R0,A ;启动DAC进行转换CLR RS0 ;返回0区DJNZ R2,NEXT ;若未完, 则跳转NEXTLJMP DTOUT ;若送完, 则循环 3DAC0832双极性电压输出在双极性电压输出场合下,可以按照图11-8所示接线。图中,DAC0832数字量由单片机送来,A1和A2均为运算放大器,vo通过2R电阻反馈到运算放大器A2输入端,G点为虚拟地,其他
17、电路如图11-8所示。由基尔霍夫定律列出的方程组可解得,由上式知,当单片机输出给DAC0832数字量B128时,即数字量最高位b7为1 ,输出模拟电压vo为正;当单片机输出给DAC0832数字量B128时,即数字量最高位为0,则vo输出电压为负。图11-8 双极性DAC接法,11.1.3 AT89S51与12位D/A转换器AD667接口设计8位分辨率不够时,可以采用高于8位分辨率DAC,例如,10位、12位、14位、16位(例如AD669)DAC。AD667是一种分辨率为12位并行输入、电压输出型D/A转换器,建立时间3s。输入方式为双缓冲输入;输出方式 为电压输出,通过硬件编程可 输出+5V
18、、+10V、2.5V、5V 和10V;内含高稳定基准电 压源,可方便地与4位、8位或 16位微处理器接口;双电源工 作电压为12V15V。 1引脚介绍 图11-9 AD667引脚图,AD667为28脚双列直插式封装,图11-9所示为双列直插式封装引脚图,表11-1为其引脚说明。,(1)内部功能结构图11-10所示为AD667内部功能结构框图。,图11-10 AD667内部功能结构框图,(2)应用特性 模拟电压输出范围配置AD667通过片外引脚不同电路连接,可获得不同输出电压量程范围。单极性工作时,可以获得05V和010V电压。双极性工作时,可获得2.5V、5.0V和10V电压。具体量程配置可由
19、引脚1、2、3、9不同连接实现,见表11-2。由于AD667内置量程电阻与其他元器件具有热跟踪性能,所以AD667增益和偏置漂移非常小。在电路运行之前,为保证转换精度,首先要进行电路调零和增益调节。,电路调零 数字输入量全为“0”时,调节50k电位器RP1,使其模拟电压输出端(VOUT)电压为0.000V。在大多数情况下,并不需要调零,只要把脚4与脚5相连(接地)即可。 增益调节 数字输入量全为“1”时,调节100电位器RP2 ,使其模拟电压输出为9.9976V,即满量程10.000V减去1LSB(约为2.44mV)所对应模拟输出量。, 单极性电压输出图11-11为010V单极性电压输出电路原
20、理图。,图11-11 010V单极性电压输出电路原理图, 双极性电压输出 图11-12为-5V+5V双极性电压输出电路。在电路运行之前,为保证转换精度,首先要进行偏置调节和增益调节。偏置调节 数字输入量全为“0”时,调节100电位器RP1 ,使其模拟电压输出端电压为5.000V。增益调节 数字输入量全为“1” ,调节电位器RP2 ,使其模拟输出电压值为4.9976V,即正满量程电压输出5.000V减去1LSB(约为2.44mV)所对应模拟输出量。 内部/外部基准电压源使用AD667有内置低噪声基准电源,其绝对精度和温度系数都是通过激光修正,具有长期稳定性。片内基准电源可提供片内D/A转换器所需
21、基准电流,还可通过缓冲电路驱动外部电路,一般可向外部负载提供0.1mA驱动电流。,图11-12 5V双极性电压输出电路原理图, 接地与动态电容接法AD667把模拟地AGND与电源地PGND分开,可以减少器件低频噪声和增强高速性能。把地回路分开目的是为了尽量减少低电平信号路径中电流。AGND是输出放大器地端,应与系统中模拟输出电压基准地直接相连,任何由输出放大器驱动负载都应该接在模拟地引脚上。电源地PGND可以与模拟电源接地点就近连接。最后AGND与PGND在一点上进行连接,一般连接到电源地PGND上。 另外,AD667电源引脚到模拟地引脚间应加上适当去耦电容。在输出放大器反馈电阻两端加一个20
22、pF小电容,可以明显改善输出放大器动态性能。, 数字输入控制与数据代码AD667总线接口逻辑由4个独立可寻址锁存器组成,其中有3个4位输入数据锁存器(第一级锁存器)和1个12位DAC锁存器(第二级锁存器)。利用3个4位锁存器可以直接从4位、8位或16位微处理器总线分次或一次加载12位数字量;一旦数字量被装入12位输入数据锁存器,就可以把12位数据传入第二级DAC锁存器,这种双缓冲结构可以避免产生错误模拟输出。4个锁存器由4个地址输入A0A3和 控制,所有控制都是低电平有效,对应关系见表11-3。所有锁存器都是电平触发,也就是说,当对应控制信号都有效时,锁存器输出跟踪输入数据;当任何一个控制信号
23、无效时,数据就被锁存。它允许一个以上锁存器被同时锁存。,建议任何未使用数据和控制引脚最好与电源地相连,以改善抗噪声干扰特性。AD667使用正逻辑二进制输入编码,大于2.0V输入电压表示逻辑“1”,而小于0.8V输入电压表示逻辑“0”。单极性输出时,输入编码采用直接二进制编码,全“0”数据输入000H产生零模拟输出;全“1”数据输入FFFH产生比满量程少1LSB模拟输出。双极性输出时,输入编码采用偏移二进制编码,数据输入为000H时,产生负满量程输出;数据输入为FFFH时,产生比满量程少1LSB的模拟输出;数据输入为800H时,模拟输出为0。其中1LSB为最低位对应模拟电压。双极性输出时输入与输
24、出关系如图11-13所示,输入数字量N与输出模拟电压VOUT关系为:,式中,VR为输出电压量程。 与单片机接口数据格式AD667与单片机接口数据格式为左对齐或右对齐数据格式。 左对齐数据格式为:右对齐数据格式为:,图11-13 双极性输出与输入关系,2AD667与AT89S51单片机接口,图11-14 AD667与AT89S51单片机接口电路,单片机把AD667所占3个端口地址视为外部数据存储器3个单元,对其进行选通,完成对AD667数据传送锁存及转换功能。假定低8位数据存20H单元,高4位数据存21H低4位,D/A转换程序如下:MOV A,20HMOV DPTR,#7FFEHMOVX DPT
25、R,A ;低8位进第一级锁存器MOV A,21HMOV DPTR,#7FFDHMOVX DPTR,A ;高4位进第一级锁存器MOV DPTR,#7FFBHMOVX DPTR,A ;启动第二级锁存器RET,11.1.4 AT89S51与串行输入12位D/A转换器AD7543接口设计 1. AD7543简介美国AD公司为异步串行口设计12位价廉D/A转换器。直接与AT89S51串行口相连,结构如图11-15所示。AD7543片内由12位串行输入并行输出移位寄存器(寄存器A)和12位DAC输入寄存器(寄存器B)组成。在选通信号前沿或后沿(可选择)定时把SRI引脚上串行数据装入寄存器A,一旦寄存器A装
26、满,在加载脉冲控制下,寄存器A数据便装入寄存器B中。 AD7543引脚如图11-16所示,功能如下: OUT1:AD7543电流输出引脚1。 OUT2:AD7543电流输出引脚2。 AGND:模拟地。,图11-15 AD7543片内结构,STB1:寄存器A选通控制信号。:寄存器B加载1输入。当 和 为低电平时,寄存器A内容送到寄存器B。SRI:单片机输入到寄存器A串行数据输入引脚。:寄存器B加载2输入。:寄存器A选通3输入。 STB4:寄存器A选通4输入。 DGND:数字地。:寄存器B清除输入,用于异步地将寄存器B复位至000H。 VDD:+5V电源。 VREF:基准电压输入。 Rfb:DAC
27、反馈输入引脚。,图11-16 AD7543引脚,2. AD7543与AT89S51接口接口电路如图11-17所示,图中只给出与D/A转换有关电路。,图11-17 AD7543与AT89S51接口电路,图11-17中单片机串行口直接与AD7543相连,串行口选用方式0,其TXD端移位脉冲负跳变将RXD输出串行位数据移入AD7543,利用地址译码器输出信号产生 ,从而将AD7543移位寄存器A中内容移入到寄存器B中,并启动D/A转换。由于AD7543的12位数据是高至低逐位串行输入的,而AT89S51串行口方式0是低至高逐位串行输出的,因此在数据传输到AD7543之前必须重新装配。下面是单片机驱动
28、程序,假设AD7543端口地址为“addrH”,数据缓冲器单元地址为dbufh(高4位)和dbufl(低8位)。 OUTDA: MOV A,#dbufh ;取高4位数据ACALL ASMB ;调用装配子程序MOV SBUF,A ;串行口输出MOV A,#dbufl ;取低8位数据,ACALL ASMB ;调用装配子程序MOV SBUF,A ;串行口输出MOV DPTR,#addrH ;AD7543端口地址送数据指针MOVX DPTR,A ;将AD7543寄存器A送寄存器BRET ASMB: MOV R6,#00H ;装配子程序MOV R7,#08HCLR C AL0: RLC AXCH A,R
29、6RRC AXCH A,R6DJNZ R7,AL0XCH A,R6RET,11.2 AT89S51单片机与ADC接口 11.2.1 A/D转换器简介 1A/D转换器概述目前部分单片机片内集成了A/D转换器,在片内A/D转换器不能满足需要,还是需外扩。另外作为扩展A/D转换器基本方法,读者还是应当掌握。尽管A/D转换器种类很多,但目前广泛应用在单片机应用系统中的主要有逐次比较型转换器和双积分型转换器,此外-式转换器逐渐得到重视和较为广泛应用。逐次比较型A/D转换器,在精度、速度和价格上都适中,是最常用A/D转换器。,双积分型A/D转换器,具有精度高、抗干扰性好、价格低廉等优点,与逐次比较型A/D
30、转换器相比,转换速度较慢,近年来在单片机应用领域中也得到广泛应用。 -式ADC具有积分式与逐次比较型ADC双重优点。它对工业现场串模干扰具有较强抑制能力,不亚于双积分ADC,它比双积分ADC有较高转换速度,与逐次比较型ADC相比,有较高信噪比,分辨率高,线性度好,不需要采样保持电路。由于上述优点,式ADC得到了重视,已有多种式A/D芯片可供用户选用。A/D转换器按照输出数字量有效位数分为4位、8位、10位、12位、14位、16位并行输出以及BCD码输出 3位半、4位半、5位半等多种。,目前,除并行输出A/D转换器外,随着单片机串行扩展方式的日益增多,带有同步SPI串行接口A/D转换器使用也逐渐
31、增多。串行输出A/D转换器具有占用端口线少、使用方便、接口简单等优点,因此,读者要给予足够重视。较为典型串行A/D转换器为美国TI公司TLC549(8位)、TLC1549(10位)以及TLC1543(10位)和TLC2543(12位)。单片机与串行A/D转换器接口设计,涉及同步串行口SPI内容,本章不做介绍,感兴趣读者,请见第12章。本章仅介绍单片机与各种并行输出A/D转换器接口设计。A/D转换器按照转换速度可大致分为超高速(转换时间1ns)、高速(转换时间1s)、中速(转换时间1ms)、低速(转换时间1s)等几种不同转换速度芯片。为适应系统集成需要,有些转换器还将多路转换开关、时钟电路、基准
32、电压源、二十进制译码器和转换电路集成在一个芯片内,为用户提供很多方便。,2A/D转换器主要技术指标 (1)转换时间和转换速率A/D完成一次转换所需要时间。转换时间倒数为转换速率。 (2)分辨率在A/D转换器中,分辨率是衡量A/D转换器能够分辨出输入模拟量最小变化程度技术指标。分辨率取决于A/D转换器位数,习惯上用输出二进制位数或BCD码位数表示。例如,A/D转换器AD1674满量程输入电压为5V,输出12位二进制数,即用212个数进行量化,其分辨率为1LSB,也即5V/212=1.22mV,其分辨率为12位,或A/D转换器能分辨出输入电压1.22mV变化。又如,双积分型输出BCD 码A/D转换
33、器MC14433,其满量程输入电压为2V,其输出最大十进制数为1999,分辨率为三位半(BCD 码),如果换算成二进制位数表示,其分辨率约为11位,因为1999最接近于211=2048。,量化过程引起的误差称为量化误差。是由于有限位数字量对模拟量进行量化而引起误差。理论上规定为一个单位分辨率-1/2+1/2LSB ,提高A/D位数既可以提高分辨率,又能够减少量化误差。 (3)转换精度A/D转换器转换精度定义为一个实际A/D转换器与一个理想A/D转换器在量化值上差值,可用绝对误差或相对误差表示。 11.2.2 AT89S51与逐次比较型8位A/D转换器ADC0809接口 1ADC0809引脚及功
34、能逐次比较型8路模拟输入、8位数字量输出A/D转换器,其引脚如图11-18所示。,图11-18 ADC0809引脚图,图11-19 ADC0809结构框图,共28引脚,双列直插式封装。引脚功能如下:IN0IN7:8路模拟信号输入端。D0D7:转换完毕8位数字量输出端。A、B、C与ALE:控制8路模拟输入通道切换。A、B、C分别与单片机的三条地址线相连,三位编码对应8个通道地址端口。C、B、A = 000111分别对应IN0IN7通道地址。各路模拟输入之间切换由软件改变C、B、A引脚编码来实现。OE、START、CLK:OE为输出允许端,START为启动信号输入端,CLK为时钟信号输入端。VR(
35、+)、VR():基准电压输入端。,2ADC0809结构及转换原理结构如图11-19所示。采用逐次比较法完成A/D转换,单一+5V电源供电。片内带有锁存功能8选1模拟开关,由C、B、A编码来决定所选通道。完成一次转换需100s左右(转换时间与CLK脚时钟频率有关),具有输出TTL三态锁存缓冲器,可直接连到单片机数据总线上。通过适当外接电路,ADC0809可对05V模拟信号进行转换。 3AT89S51单片机与ADC0809接口控制ADC0809过程如下:先用指令选择ADC0809一个模拟输入通道,当执行“MOVX DPTR,A”时,单片机 信号有效,从而产生一个启动脉冲。信号给ADC0809的ST
36、ART脚,开始对选中通道转换。当转换结束后,ADC0809发出转换结束EOC(高电平)信号,该信号可供单片机查询,也可反相后作为向单片机发出中断请求信号。,当执行指令“MOVX A,DPTR”时,单片机发出读控制 信号,通过逻辑电路控制OE端为高电平,把转换完毕数字量读入到单片机累加器A中。单片机读取ADC转换结果时,可采用查询和中断控制两种方式。查询方式是在单片机把启动信号送到ADC之后,执行其他程序,同时对ADC0809的EOC脚不断进行检测,以查询ADC变换是否已经结束,如查询到变换已经结束,则读入转换完毕数据。中断控制方式是在启动信号送到ADC之后,单片机执行其他程序。ADC0809转
37、换结束并向单片机发出中断请求信号时,单片机响应此中断请求,进入中断服务程序,读入转换完毕数据。中断控制方式效率高,所以特别适合于转换时间较长ADC。,图11-20 ADC0809与AT89S51查询式接口,图11-20所示基准电压是提供给A/D转换器在转换时所需要基准电压,这是保证转换精度基本条件。基准电压要单独用高精度稳压电源供给,其电压变化要小于1LSB。否则当被变换输入电压不变,而基准电压变化大于1LSB,也会引起A/D转换器输出数字量变化。由于ADC0809片内无时钟,可利用单片机提供地址锁存允许信号ALE经D触发器二分频后获得,ALE引脚频率是AT89S51单片机时钟频率1/6(但要
38、注意,每当访问外部数据存储器时,将少一个ALE脉冲)。如果单片机时钟频率采用6MHz,则ALE引脚输出频率为1MHz,再二分频后为500kHz,符合ADC0809对时钟频率要求。当然,也可采用独立时钟源输出,直接加到ADC的CLK脚。,由于ADC0809具有输出三态锁存器,其8位数据输出引脚D0D7可直接与单片机P0口相连。地址译码引脚C、B、A分别与地址总线低三位A2、A1、A0相连,以选通IN0IN7中一个通道。在启动A/D转换时,由单片机写信号 和P2.7控制ADC地址锁存和转换启动,由于ALE和START连在一起,因此ADC0809在锁存通道地址同时,启动并进行转换。在读取转换结果时,
39、用低电平读信号 和P2.7引脚经一级“或非门”后产生正脉冲作为OE信号,用来打开三态输出锁存器。下面程序是采用软件延时方式,分别对8路模拟信号轮流采样一次,并依次把结果转储到数据存储区转换程序。,MAIN: MOV R1,#data ;置数据区首地址MOV DPTR,#7FF8H ;端口地址送DPTR, ;P2.7=0, 且指向通道IN0MOV R7,#08H ;置通道个数 LOOP: MOVX DPTR,A ;启动A/D转换MOV R6,#0AH ;软件延时, 等待转换结束 DELAY: NOPNOPNOPDJNZ R6,DELAYMOVX A,DPTR ;读取转换结果MOV R1,A ;存
40、储转换结果INC DPTR ;指向下一个通道INC R1 ;修改数据区指针DJNZ R7,LOOP ;8个通道全采样完 ;否?未完则继续,(2)中断方式ADC0809与AT89S51单片机中断方式接口电路只需要将图11-20所示EOC引脚经过一“反门”连接到AT89S51单片机外中断输入引脚 即可。采用中断方式可大大节省单片机时间。当转换结束时,发出EOC脉冲向单片机提出中断申请,单片机响应中断请求,由外部中断1中断服务程序读A/D结果,并启动ADC0809下一次转换,外部中断1采用跳沿触发方式。,参考程序: INIT1: SETB IT1 ;选择外部中断1为跳沿触发方式SETB EA ;总中
41、断允许SETB EX1 ;允许外部中断1中断MOV DPTR,#7FF8H ;端口地址送DPTRMOV A,#00HMOVX DPTR,A ;启动ADC0809对IN0通道转换 ;完成其他工作 中断服务程序: PINT1: MOV DPTR,#7FF8H ;读取结果送内部RAM30HMOVX A,DPTRMOV 30H,AMOV A,#00H ;启动ADC0809对IN0转换MOVX DPTR,ARETI,11.2.3 AT89S51与逐次比较型12位A/D转换器AD1674接口1AD1674简介美国AD公司12位逐次比较型A/D转换器。转换时间10s,单通道最大采集速率100kHz。为28引
42、脚双列直插式封装,其引脚如图11-21所示。由于芯片内有三态输出缓冲电路,因而可直接与各种典型8位或16位单片机相连,AD1674片内集成有高精度基准电压源和时钟电路,从而使该芯片在不需要任何外加电路和时钟信号情况下完成A/D转换,使用非常方便。AD1674是AD574A/674A更新换代产品。它们内部结构和外部应用特性基本相同,引脚功能与AD574A/674A完全兼容,可以直接替换AD574、AD674使用,但最大转换时间由25s提高到10s。,63,图11-21 AD1674引脚,AD1674共有6个控制引脚,功能如下。:芯片选择。 =0时,芯片被选中。 CE:片启动信号。当CE=1时,是
43、启动转换还是读取结果与R/ 有关,见表11-4。 R/ :读出/转换控制信号。 12/ :数据输出格式选择信号引脚。当12/ =1时,12条数据线并行输出转换结果;当12/ =0 时,与A0配合,转换结果分两次输出,即只有高8位或低4位有效。 注意:12/ 端与TTL电平不兼容,故只能直接接至+5V或0V上。 A0:字节选择控制。 在转换期间:当A0=0时,AD1674进行全12位转换。当A0=1时,仅进行8位转换。,在读出期间,与12/ =0配合:当A0=0时,高8位数据有效;当A0=1时,低4位数据有效,中间4位为0,高4位为高阻态。 当采用两次读出12位数据遵循左对齐格式,如下所示:ST
44、S:输出状态信号引脚。转换开始时,STS为高电平,转换过程中保持高电平。转换完成时,为低电平。STS可以作为状态信息被CPU查询,也可用它下跳沿向单片机发出中断申请,通知单片机A/D转换已完成,可读取转换结果。,除上述6个控制引脚外,其他引脚功能如下: REFOUT:+10V基准电压输出。 REFIN:基准电压输入。只有由此脚把从“REFOUT”脚输出基准电压引入到AD1674内部12位DAC,才能进行正常A/D转换。 BIPOFF:双极性补偿。对此引脚进行适当连接,可实现单极性或双极性输入。,10VIN:10V或5+5V模拟信号输入端。 20VIN:20V或10+10V模拟信号输入端。 DG
45、ND:数字地。各数字电路器件及“+5V”电源地。 AGND:模拟地。各模拟电路器件及“+15V”、“15V”电源地。 VCC:正电源端,为+12+15V。 VEE:负电源端,为1215V。 2AD1674工作特性AD1674工作状态由5个控制信号CE、 、R/ 、12/ 、A0决定,见表11-4。当CE=1, = 0时,AD1674处于工作状态。当AD1674处于工作状态时,R/ = 0时启动A/D转换;R/ =1时读出转换结果。12/ 和A0端用来控制转换字长和数据格式。A0=0时启动转换,按完整12位A/D转换方式工作;,A0=1启动转换,则按8位A/D转换方式工作。 当AD1674处于数
46、据读出工作状态(R/ = 1)时,A0和12/ 成为数据输出格式控制端。 12/ =1时,对应12位并行输出; 12/ =0时,则对应8位双字节输出。其中A0=0时输出高8位, A0 = 1时输出低4位,并以4个0补足尾随4位。注意,A0在转换结果数据输出期间不能变化。如要求AD1674以独立方式工作,只要将CE、12/ 端接入+5V, 和A0接至0V,将R/ 作为数据读出和启动转换控制。R/ =1时,数据输出端出现被转换后数据; R/ =0时,即启动一次A/D转换。在延时0.5s后,STS = 1表示转换正在进行。经过一个转换周期后,STS跳回低电平,表示A/D转换完毕,可读取新转换数据。,
47、3AD1674单极性和双极性输入电路通过改变AD1674引脚8、10、12外接电路,可使AD1674实现单极性输入和双极性输入模拟信号转换。 (1)单极性输入电路图11-22(a)为单极性输入电路,可实现输入信号010V或020V转换。当输入信号为010V时,应从10VIN引脚输入(引脚13);输入信号为020V时,应从20VIN引脚输入(引脚14)。输出转换结果D计算公式为:D=4096VIN / VFS或 VIN= DVFS /4096式中VIN为模拟输入电压,VFS为满量程电压。 若从10VIN脚输入,VFS=10V,LSB=10/409624mV; 若从20VIN脚输入;VFS=20V
48、,1LSB=20/409649mV。,71,图11-22 AD1674模拟输入电路外部接法,图中电位器RP2用于调零,即当VIN=0时,输出数字量D为全0。单片机系统模拟信号地线应与9脚AGND相连,使其地线接触电阻尽可能小。 (2)双极性输入电路图11-22(b)为双极性转换电路,可实现输入信号10+10V或0+20V转换。图中电位器RP1用于调零。双极性输入时,输出转换结果D与模拟输入电压VIN之间关系为:D=2048(1+VIN / VFS)或 VIN=(D / 20481)VFS /2 式中VFS为满量程电压。 上式求出D为12位偏移二进制码,把D最高位求反便得到补码。,补码对应输入模
49、拟量符号和大小。同样,从AD1674读出的或代入到上式中数字量D也是偏移二进制码。例如,当模拟信号从10VIN引脚输入,则VFS= 10V,若读得D=FFFH,即111111111111B=4095,代入式中,可求得VIN=4.9976V。 4AT89S51单片机与AD1674接口图11-23所示AD1674与AT89S51单片机接口电路。由于AD1674片内含有高精度基准电压源和时钟电路,从而使AD1674无需任何外加电路和时钟信号的情况下即可完成A/D转换。电路采用双极性输入接法,可对5V+5V或10V+10V模拟信号进行转换。转换结果高8位从DB11DB4输出,低4位从DB3DB0输出,即A0=0时,读取结果高8位;当A0=1时,读取结果低4位。若遵循左对齐原则,DB3DB0应接单片机P0.7P0.4。,