1 / 66

第 8 章 MCS-51 与 D/A 、 A/D 的接口

单片机. 第 8 章 MCS-51 与 D/A 、 A/D 的接口. 8-1 MCS-51 单片机与 ADC 的 接口. 8-2 MCS-51 单片机与 DAC 的 接口. 扩展 I/O 电路的功能:. 1 、速度协调; 2 、输出数据锁存; 3 、输入数据三态; 4 、数据转换: 模拟量→数字量:由 A/D 转换完成; 数字量→模拟量:由 D/A 转换完成。. 单片机和被控实体间的接口示意图. 举例 1 :温度测控系统. 举例 2 :速度测控系统. 60K. 20K. +5V. +5V. +5V. GND. 10K × 6.

beate
Download Presentation

第 8 章 MCS-51 与 D/A 、 A/D 的接口

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 单片机 第8章 MCS-51与D/A、A/D的接口 8-1 MCS-51单片机与ADC的接口 8-2 MCS-51单片机与DAC的接口

  2. 扩展I/O电路的功能: • 1、速度协调; • 2、输出数据锁存; • 3、输入数据三态; • 4、数据转换: • 模拟量→数字量:由A/D转换完成; • 数字量→模拟量:由D/A转换完成。

  3. 单片机和被控实体间的接口示意图

  4. 举例1:温度测控系统

  5. 举例2:速度测控系统

  6. 60K 20K +5V +5V +5V GND 10K×6 220K 2.2u AT89C51 行程开关1 P1.0 BISS0001 VSS VC 行程开关2 P1.1 1M 3.3K IB 102 行程开关3 P1.2 330K RR2 VDD 行程开关4 P1.3 10K 1M RC2 手动开按钮 P1.4 2OUT 10n 103 手动关按钮 P1.5 RC1 10u 2IN- LED 330K 103 RR1 P1.6 1IN+ 2M 手动/自动切换 V0 1IN- P3.2/INT0 VCC P2.0 蜂鸣报警 47u 电机过热报警 47K P2.1 1OUT A 电压过高报警 P2.2 470u 速度异常报警 P2.3 D 103 转速检测模块 ADC 0809 P3.0 光电隔离 电机正转继电器J1 P0 /WR /RD ALE P1.7 S 103 P3.1 电压检测模块 电机反转继电器J2 G P3.4 红外传感器 电机温度检测 速度变换继电器J3 P3.3/INT1 A/D转换 举例3:红外线自动门控制系统原理图

  7. A 1 BISS0001 16 1OUT 1IN- V0 2 15 RR1 3 14 1IN+ RC1 4 13 2IN- 12 2OUT RC2 5 11 VDD RR2 6 10 IB Vss 7 9 Vc 8 VRF/RESET 红外线传感器集成芯片BISS0001特点 • (1)用CMOS工艺,功耗低。 • (2)具有独立的高输入阻抗运算放大器,可与多种传感器匹配。 • (3)双向鉴幅器可有效抑制干扰信号。 • (4)内设延时和封锁定时器,性能稳定,调节范围宽。 • (5)内置参考电源。 • (6)工作电压范围宽 • (3V~5V)。

  8. 8.1 MCS-51单片机与ADC的接口 8.1.1 A/D转换器概述 A/D( Analog to Digit )转换器 一.A/D转换器的类型及原理 A/D转换器(ADC)的作用是把模拟量转换成数字量,以便于计算机进行处理。 随着超大规模集成电路技术的飞速发展,现在有很多类型的A/D转换器芯片,不同的芯片,它们的内部结构不一样,转换原理也不同,各种A/D转换芯片分类如下: 根据转换原理可分为计数型A/D转换器、逐次比较式、 双重积分型和并行式A/D转换器等; 按转换方法可分为直接A/D转换器和间接A/D转换器; 按其分辨率可分为4~16位的A/D转换器芯片。

  9. A/D转换是把模拟量信号转化成与其大小成比例的数字信号。A/D转换是把模拟量信号转化成与其大小成比例的数字信号。 A/D转换电路主要分成: 1、双积分式(速度慢,精度高:用于速度要求不高的场合); 2、逐次逼近式(速度较快,精度较高:常用)。 常用芯片: MC14433(3 ½位) 双积分式 ICL7135 (4 ½位) ICL7109 (12位) ADC0808、ADC0809(8位) 逐次逼近式 ADC1210(12位) AD574(12位)

  10. 1、计数型A/D转换器 计数型A/D转换器由D/A转换器、计数器和比较器组成,工作时,计数器由零开始计数,每计一次数后,计数值送往D/A转换器进行转换,并将生成的模拟信号与输入的模拟信号在比较器内进行比较, 若前者小于后者,则计数值加1,重复D/A转换及比较过程,依此类推,直到当D/A转换后的模拟信号与输入的模拟信号相同,则停止计数,这时,计数器中的当前值就为输入模拟量对应的数字量。这种A/D转换器结构简单、原理清楚,但它的转换速度与精度之间存在矛盾,当提高精度时,转换的速度就慢,当提高速度时,转换的精度就低,所以在实际中很少使用。

  11. 2、逐次逼近型A/D转换器 • 逐次逼近型A/D转换器是由一个比较器、D/A转换器、寄存器及控制电路组成。与计数型相同,也要进行比较以得到转换的数字量,但逐次逼近型是用一个寄存器从高位到低位依次开始逐位试探比较。转换过程如下:开始时寄存器各位清0,转换时,先将最高位置1,送D/A转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的数字量。一个n位的逐次逼近型A/D转换器转换只须要比较n次,转换时间只取决于位数和时钟周期。逐次逼近型A/D转换器转换速度快,在实际中广泛使用。

  12. 逐次逼近A/D转换原理: N位寄存器用来存放N位二进制数码。 当VX≥VN,则保留DN-1=1,否则清0。 其余类推。

  13. 3、双重积分型A/D转换器 • 双重积分型A/D转换器将输入电压先变换成与其平均值成正比的时间间隔,然后再把此时间间隔转换成数字量,它属于间接型转换器。它的转换过程分为采样和比较两个过程。采样即用积分器对输入模拟电压进行固定时间的积分,输入模拟电压值越大,采样值越大,比较就是用基准电压对积分器进行反向积分,直至积分器的值为0,由于基准电压值固定,所以采样值越大,反向积分时积分时间越长,积分时间与输入电压值成正比,最后把积分时间转换成数字量,则该数字量就为输入模拟量对应的数字量。由于在转换过程中进行了两次积分,因此称为双重积分型。双重积分型A/D转换器转换精度高,稳定性好,测量的是输入电压在一段时间的平均值,而不是输入电压的瞬间值,因此它的抗干扰能力强,但是转换速度慢,双重积分型A/D转换器在工业上应用也比较广泛。

  14. 双积分型A/D转换器工作原理: 双积分型A/D转换是一种间接A/D 转换技术。首先将模拟电压转换成积分时间,然后用数字脉冲计时方法转换成计数脉冲数,最后将此代表模拟输入电压大小的脉冲数转换成二进制或BCD码输出。因此,双积分型A/D转换器转换时间较长,一般要大于40~50ms。

  15. 80C51 MC14433 MC14433与80C51直接连接的接口

  16. 80C51 ICL7109与80C51的接口电路图

  17. 二.A/D转换器的主要性能指标 1.分辨率; 2.转换时间; 3.量程; 4.转换精度。

  18. CLOCK START IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7 定时和控 制 EOC 通道 选择 开关 8 位 三 态 锁 存 缓冲器 D0 D1 D2 D3 D4 D5 D6 D7 逐次逼近 寄存器SAR DAC ADDA ADDB ADDC ALE 地址锁存和译码 ADC0809 OE VCC VREF+ VREF- GND 8.1.2 ADC0809与MCS-51的接口 一.ADC0809芯片 ADC0809是CMOS单片型逐次逼近型A/D转换器,具有8路模拟量输入通道,有转换起停控制,模拟输入电压范畴为0~+5V,转换时间为100µs,它的内部结构如下图所示。

  19. 二.ADC0809的引脚 ADC0809芯片有28个引脚,采用双列直插式封装,如图。 其中: IN0~IN7:8路模拟量输入端。 D0~D7:8位数字量输出端。 ADDA、ADDB、ADDC:3位地址输入线,用于选择8路模拟通道中的一路。 ALE:地址锁存允许信号,输入,高电平有效。 START:A/D转换启动信号,输入,高电平有效。 EOC:A/D转换结束信号,输出。 0:正在进行转换; 1:一次转换完成。 OE:数据输出允许信号,输入,高电平有效。当转换结束后,如果从该引脚输入高电平,则打开输出三态门,输出锁存器的数据从D0~D7送出。 CLK:时钟脉冲输入端。其内部无时钟电路。要求时钟频率不高于640KHZ. VREF+、VREF-:基准电压输入端。决定输入模拟量的范围。 典型值分别为+5V和0V。 Vcc:电源,接+5V电源。 GND:地。

  20. 多路 转换 开关 IN0 IN1 IN7 A/D转换 C B A ADDA、ADDB、ADDC:3位地址输入线,用于选择8路模拟通道中的一路,选择情况如下:

  21. 三.ADC0809的工作流程 ADC0809的工作流程如图所示: 1.输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器译码从8路模拟通道中选通一路模拟量送到比较器。 2.送START一高脉冲,START的上升沿使逐次逼近寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。 3.当转换结束时,转换的结果送入到输出三态锁存器,并使EOC信号回到高电平,通知CPU已转换结束。 4.当CPU执行一读数据指令,使OE为高电平,则从输出端D0~D1读出数据。

  22. P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 ALE WR P2.7 RD INT0 D0 D1 D2 D3 D4 D5 D6 D7 ADDA ADDB ADDC CLK ALE START OE EOC IN0 IN1 IN2 IN3 IN4 IN5 IN6 IN7 VREF+ VREF- ADC0809 转换数据的传送: ①定时传送方式; (不需接EOC脚) ②查询方式; (测试EOC脚的状态) ③中断方式。 (EOC脚接INT脚) 注意: (1)不能用无条件方式; (2)2个ALE不能相接。 分 频 器 8051 +5V GND + + 四.ADC0809与MCS-51单片机的接口 涉及2个问题: (1)8路模拟信号通道选择; (2)A/D转换完成后转换数据的传送。 下图是一个ADC0809与8051的一个接口电路图。 1.硬件连接 8路模拟通道的地址:0000H~0007H。

  23. A/D转换程序:(延时等待方法) 2.软件编程 设接口电路用于一个8路模拟量输入的巡回检测系统,使用中断方式采样数据,把采样转换所得的数字量按序存于片内RAM的30H~37H单元中。采样完一遍后停止采集。 • MOV DPTR,#0000H ;ADC0809地址 • MOV A,#00H ;选中IN0 • MOVX @DPTR,A ;启动A/D转换 • LCALL DELAY ;等待转换结束 • MOVX A,@DPTR ;读转换结果 • RET 不用接EOC脚,采用定时传送方式。

  24. 汇编语言编程:中断方法 ORG 0003H LJMP INT0 ORG 0100H ;主程序 MOV R0,#30H ;设立数据存储区指针 MOV R2,#08H ;设置8路采样计数值 SETB IT0 ;设置外部中断0为边沿触发方式 SETB EA ;CPU开放中断 SETB EX0 ;允许外部中断0中断 MOV DPTR,#0000H ;送入口地址并指向IN0 LOOP: MOVX @DPTR,A ;启动A/D转换,A的值无意义 HERE: SJMP HERE ;等待中断 ORG 0200H ;中断服务程序 INT0: MOVX A,@DPTR ;读取转换后的数字量 MOV @R0,A ;存入片内RAM单元 INC DPTR ;指向下一模拟通道 INC R0 ;指向下一个数据存储单元 DJNZ R2,NEXT ;8路未转换完,则继续 CLR EA ;已转换完,则关中断 CLR EX0 ;禁止外部中断0中断 RETI ;中断返回 NEXT: MOVX @DPTR,A ;再次启动A/D转换 RETI ;中断返回

  25. C语言编程: #include <reg51.h> #include <absacc.h> //定义绝对地址访问 #define uchar unsigned char #define IN0 XBYTE[0x0000] //定义IN0为通道0的地址 static uchar data x[8]; //定义8个单元的数组,存放结果 uchar xdata *ad_adr; //定义指向通道的指针 uchar i=0; void main(void) { IT0=1; //初始化 EX0=1; EA=1; i=0; ad_adr=&IN0; //指针指向通道0 *ad_adr=i; //启动通道0转换 for (;;) {;} //等待中断 }

  26. void int_adc(void) interrupt 0 //中断函数 { x[i]=*ad_adr; //接收当前通道转换结果 i++; ad_adr++; //指向下一个通道 if (i<8) { *ad_adr=i; //8个通道未转换完,启动下一个通道返回 } else { EA=0;EX0=0; //8个通道转换完,关中断返回 } }

  27. 设有一个8路模拟量输入的巡回检测系统,采样数据依次存放在外部RAM 0A0H~0A7H单元中,ADC0809的8个通道地址为0FEF8H~0FEFFH。 例: 初始化程序:(中断方式) MOV R0,#0A0H ;数据存储区首地址 MOV R2,#08H ;8路计数器 SETB IT1 ;边沿触发方式 SETB EA ;中断允许 SETB EX1 ;允许外部中断1中断 MOV DPTR,#0FEF8H ;指向ADC0809首地址 LOOP:MOVX @DPTR,A ;启动A/D转换 HERE:SJMP HERE ;等待中断 DJNZ R2,LOOP ;巡回,未完继续 CLR EA ;结束,关中断 SJMP $ ;结束停止 中断服务程序: MOVX A,@DPTR;读数 MOVX @R0,A ;存数 INC DPTR;指向下一模拟通道 INC R0 ;指向数据存储区下一单元 RETI

  28. C51程序: • #include<absacc.h> • #include<reg51.h> • #define uchar unsigned char • #define IN0 XBYTE[0xFEF8] /*设置ADC0809的通道0地址*/ • sbit ad_busy=P3^3; /*即EOC状态*/ • void ad0809(uchar idata * x) /*采样结果放指针中的A/D采集函数*/ • { uchar i; • uchar xdata * ad_adr; • ad_adr=&IN0; • for(i=0;i<8;i++) /*处理8通道*/ • { *ad_adr=0; /*启动转换*/ • i=i; /*延时等待EOC变低*/ • i=i; • while(ad_busy==0); /*查询等待转换结束*/ • x[i]=*ad_adr; /*存转换结果*/ • ad_adr++; /*下一通道*/ • } • } • void main(void) • { static uchar idata ad[8]; • ad0809(ad); /*采样ADC0809通道的值*/ • }

  29. 80C51 五、AD574A与MCS-51单片机接口

  30. AD574A逻辑控制真值表

  31. 8.2 MCS-51单片机与DAC的接口 8.2.1 D/A转换器概述 一、D/A(Digit to Analog)转换器 为把数字量转换成模拟量,在D/A转换芯片中要有解码网络: ①权电阻网络; ②倒T型电阻网络。

  32. T型电阻网络型D/A转换器: • D/A转换器的原理: • 把输入数字量中每位都按其权值分别转换成模拟量,并通 • 过运算放大器求和相加。根据克希荷夫定律,如下关系成立: • I0=20 I1=21 I2=22 I3=23

  33. n位数字量与模拟量的关系式: VO =-VREF×(数字码 / 2n)(VREF —— 参考电压) 注:因使用反相比例放大器来实现电流到电压的转换,所以输出模拟信号(VO)的极性与参考电压(VREF)极性相反。

  34. 二、D/A转换器的分类 D/A转换器的品种繁多、性能各异。 1、按输入数字量的位数分: 8位、10位、12位和16位等; 2、按输入的数码分: 二进制方式和BCD码方式; 3、按传送数字量的方式分: 并行方式和串行方式; 4、按输出形式分: 电流输出型和电压输出型; 电压输出型又有单极性和双极性; 5、按与单片机的接口分: 带输入锁存的和不带输入锁存的。 D/A输出形式: ①电压; ②电流 运算放大器电压。

  35. 与P1、P2接口:不需加锁存器,直接接口。 无锁存器 与P0接口:因P0的特殊功能,需加锁存器。 D/A内 如:DAC800、AD7520、AD7521等。 有锁存器:最好与P0直接接口。 如:DAC0832、DAC1230等。 三、注意区分D/A内部是否带有锁存器

  36. 四、性能指标: • 1、分辨率(Resolution)是指D/A转换器能分辨的最小输出模拟增量,取决于输入数字量的二进制位数。 • 2、建立时间(Establishing Time)是描述D/A转换速度的快慢。 • 3、转换精度(Conversion Accuracy)指满量程时DAC的实际模拟输出值和理论值的接近程度。 • 4、偏移量误差(Offset Error)偏移量误差是指输入数字量为零时,输出模拟量对零的偏移值。 • 5、线性度(Linearity)线性度是指DAC的实际转换特性曲线和理想直线之间的最大偏移差。

  37. 主要技术指标: • 1、分辨率(Resolution): • 对D/A转换器输入量变化敏感程度进行描述, • 与输入数字量的位数有关。 • 若数字量的位数为n,则分辨率为2-n。 • 数字量位数越多,分辨率就越高。 • 应用时,应根据分辨率的需要选定转换器的位数。 • 注:BCD码输出的A/D转换器用位数表示分辨率。 • 2、建立时间(Establishing Time):(转换速度) • 描述D/A转换速度的快慢。 • 输出形式为电流的转换器比电压的建立时间短。 • D/A转换速度远高于A/D转换。 • 3、转换精度(Conversion Accuracy): • 指满量程时DAC的实际模拟输出值和理论值的接近程度。

  38. 五、D/A转换器与单处机的连接 1.数据线的连接 D/A转换器与单片机的数据线的连接主要考虑两个问题: 一是位数,当高于8位的D/A转换器与8位数据总线的MCS-51单片机接口时,MCS-51单片机的数据必须分时输出,这时必须考虑数据分时传送的格式和输出电压的“毛刺”问题; 二是D/A转换器有无输入锁存器的问题,当D/A转换器内部没有输入锁存器时,必须在单片机与D/A转换器之间增设锁存器或I/O接口。 2.地址线的连接 一般的D/A转换器只有片选信号,而没有地址线。这时单片机的地址线采用全译码或部分译码,经译码器输出来控制D/A转换器的片选信号,也可由某一位I/O线来控制D/A转换器的片选信号。 3.控制线的连接 D/A转换器主要有片选信号、写信号及启动转换信号等,一般由单片机的有关引脚或译码器提供。

  39. 8.2.2 MCS-51与8位DAC0832的接口 Rfb 输入 寄存器 DAC 寄存器 8位 DAC IOUT1 VO - + DI0~7 IOUT2 LE1 ILE 与 LE2 AGND CS 与 WR1 0:锁存 WR2 与 LE1(LE2)= XFER 1:直通 DI0~7:转换数据输入(8位); CS:片选信号(输入); ILE:数据锁存允许信号(输入); XFER:数据传送控制信号(输入); WR1:第一写信号(输入),与ILE共同控制输入寄存器是数据直通方式还是 数据锁存方式; WR2:第2写信号(输入),与XFER共同控制DAC寄存器是数据直通方式还是 数据锁存方式; 一、内部结构:DAC 0832:8位双缓冲器结构的D/A转换器。 DAC 0832内部结构框图(请见P197图8.5)

  40. 输入数字量B b7 b6 b5 b4 b3 b2 b1 b0 Vout(理想值) +VREF时 -VREF时 1 1 1 1 1 1 1 1 |VREF|-LSB -|VREF|+LSB ┆ ┆ ┆ 1 1 0 0 0 0 0 0 |VREF|/2 -|VREF|/2 ┆ ┆ ┆ 1 0 0 0 0 0 0 0 0 0 ┆ ┆ ┆ 0 1 1 1 1 1 1 1 -LSB LSB ┆ ┆ ┆ 0 0 1 1 1 1 1 1 -|VREF|/2-LSB |VREF|/2+LSB ┆ ┆ ┆ 0 0 0 0 0 0 0 0 -|VREF| |VREF| 双极性输出电压与输入数字量的关系

  41. 20 19 18 17 16 15 14 13 12 11 VCC ILE WR2 XFER DI4 DI5 DI6 DI7 IOUT1 IOUT2 1 2 3 4 5 6 7 8 9 10 CS WR1 AGND DI3 DI2 DI2 DI0 VREF RFB DGND 二、DAC0832的引脚 DAC0832有20引脚,采用双列直插式封装,如图所示。 其中: DI0~DI7(DI0为最低位):8位数字量输入端。 ILE:数据允许控制输入线,高电平有效。 /CS:片选信号。 /WR1:写信号线1。 /WR2:写信号线2。 /XFER:数据传送控制信号输入线,低电平有效。 IOUT1:模拟电流输出线1。它是数字量输入为“1”的模拟电流输出端。 IOUT2:模拟电流输出线2,它是数字量输入为“0”的模拟电流输出端,采用单极性输出时,IOUT2常常接地。 Rfb:片内反馈电阻引出线,反馈电阻制作在芯片内部,用作外接的运算放大器的反馈电阻。 VREF:基准电压输入线。电压范围为-10V~+10V。 VCC:工作电源输入端,可接+5V~+15V电源。 AGND:模拟地。 DGND:数字地。

  42. 三、DAC0832的工作方式 DAC0832有三种方式: 1、直通方式; 2、单缓冲方式; 3、双缓冲方式。

  43. 输入寄存器和DAC寄存器共用一个地址,同时选通输出;WR1和WR2同时进行,并且不与CPU相接。特点:转换速度快。输入寄存器和DAC寄存器共用一个地址,同时选通输出;WR1和WR2同时进行,并且不与CPU相接。特点:转换速度快。 1.直通方式: 当引脚/WR1、/WR2、/CS、/XFER直接接地,ILE接电源,DAC0832工作于直通方式,此时,8位输入寄存器和8位DAC寄存器都直接处于导通状态,8位数字量到达DI0~DI7,就立即进行D/A转换,从输出端得到转换的模拟量。 MOV P1,A

  44. 100ms 举例: 例:D/A转换程序,用DAC0832输出0~+5V锯齿波, 电路为直通方式。设VREF=-5V,若DAC0832地址 为00FEH,脉冲周期要求为100ms。 • DACS:MOV DPTR,#00FEH;0832 I/O地址 • MOV A,#00H ;开始输出0V • DACL:MOVX @DPTR,A ;D/A转换 • INC A ;升压 • ACALL DELAY ;延时100ms/256:决定锯齿波的周期 • AJMP DACL ;连续输出 • DELAY:…;延时子程序

  45. C51程序: • #include<absacc.h> • #include<reg51.h> • #define DAC0832 XBYTE[0x00FE] • #define uchar unsigned char • #define unit unsigned int • void stair(void) /*锯齿波*/ • { • uchar i; • while(1) { • for(i=0;i<=255;i=i++) • /*形成锯齿波输出值,最大255*/ • {DAC0832=i; /*D/A转换输出*/ • } • } • }

  46. 2.单缓冲方式: 输入寄存器和DAC寄存器共用一个地址,同时选通输出,输入数据在控制信号作用下,直接进入DAC寄存器中;WR1和WR2同时进行,并且与CPU的WR相连,CPU对0832执行一次写操作,将数据直接写入DAC寄存器中。适用:只有一路模拟信号输出或几路模拟信号非同步输出。

  47. 80C51 单缓冲方式下的DAC0832 当连接引脚/WR1、/WR2、/CS、/XFER,使得两个锁存器的一个处于直通状态,另一个处于受控制状态,或者两个被控制同时导通,DAC0832就工作于单缓冲方式。 对于下图的单缓冲连接,只要数据DAC0832写入8位输入锁存器,就立即开始转换,转换结果通过输出端输出。

  48. 100ms 举例: 例:D/A转换程序,用DAC0832输出0~+5V三角波, 电路为单缓冲方式。设VREF=-5V,若DAC0832地 址为00FEH,脉冲周期要求为(100ms)。 • ORG 2000H • STAR:MOV DPTR,#00FEH;DAC0832地址 • MOV A,#00H ;开始输出0V • UP: MOVX @DPTR,A ;D/A转换 • INC A ;产生上升段电压 • JNZ UP;上升到A中为FFH(A≠0跳) • DOWN:DEC A ;产生下降段电压 • MOVX @DPTR,A • JNZ DOWN;下降到A中为00H • SJMP UP;重复 • 注:若想改变波形的周期(频率),只需在SJMP UP前插入延时程序即可。

  49. 3.双缓冲方式: 输入寄存器和DAC寄存器分配有各自的地址,可分别选通用同时输出多路模拟信号。适用:同时输出几路模拟信号的场合,可构成多个0832同步输出电路。 当8位输入锁存器和8位DAC寄存器分开控制导通时,DAC0832工作于双缓冲方式,双缓冲方式时单片机对DAC0832的操作分两步,第一步,使8位输入锁存器导通,将8位数字量写入8位输入锁存器中;第二步,使8位DAC寄存器导通,8位数字量从8位输入锁存器送入8位DAC寄存器。第二步只使DAC寄存器导通,在数据输入端写入的数据无意义。

  50. 举例: 例:用DAC0832实现驱动绘图仪,电路为双缓冲方式。 1#和2#DAC0832地址分别为00FEH和00FDH。 则绘图仪的驱动程序为: • ORG 2000H • MOV DPTR,#00FEH ;选中1#0832(的输入寄存器):A0=0 • MOV A,#Datax • MOVX @DPTR,A ;Datax写入1#0832输入寄存器 • MOV DPTR,#00FDH ;选中2#0832(的输入寄存器):A1=0 • MOV A,#Datay • MOVX @DPTR,A ;Datay写入2#0832输入寄存器 • MOV DPTR,#00FBH ;选中1#和2#0832的DAC寄存器: A2=0 • MOVX @DPTR,A ;1#和2#输入寄存器的内容同时 • 传送到DAC寄存器中

More Related