1、实验二 DA 转换实验一、实验目的1. 理解 D/A 转换芯片 0832 与单片机接口及编程方法。2. 了解 D/A 转换的基本原理。3. 了解单片机系统中扩展 D/A 转换的基本方法。二、实验原理及内容1实验原理DAC0832 内部具有输入寄存器和 DAC 寄存器两级数据寄存器,它不需要外加其它电路便可以与单片机的数据总线相连。DAC0832 引脚说明如下:D0D7:8 位数据输入。Iout1和 Iout2:DAC 电流输出 1 和 DAC 电流输出 2,I out1 和 Iout2 之和为一常量。RFB:反馈信号输入端。DAC0832 的输出是电流型的,为了取得电压输出需在电压输出端接运算
2、放大器,R FB 即为运算放大器的反馈电阻端。反馈电阻在片内。ILE:允许输入锁存信号。和 :锁存输入数据的写信号和锁存输入寄存器输出数据的写信号。1W2:传送控制信号。XFE:片选信号。CSDAC0832 输出是电流型的,但实际应用中往往需要电压输出信号,所以电路中采用运算放大器来实现电流转换为电压。本实验系统上,采用参考电压为 5V,所以当数字量输入在00HFFH 范围时电压输出量为 0+5V,这种方式称单极型输出,若电压输出为 5V,则称为双极型输出。实际应用中需要单极性输出,也需要双极型输出,所以电路应用两片运放 LM741 来实现两种极性的输出。实验系统中原理图如图 8-2 所示。
3、DAC0832 与单片机接口: 0832 的 D0D7 接单片机 P0 口;DAC0832 的片选接单片机的 P2.7,为了避免模块之间的冲突,P2.7 通过跳线 J505 与DAC0832 相连。DAC0832 的 WR 信号接单片机的写信号 WR,U506 和 U507 是单运放LM741 完成电流到电压和正负电压的转换。VCCCS1 WR12AGND 3DI34 DI25DI16 DI0(LSB)7 VREF 8Rfb 9DGND 10IOUT1 11IOUT2 12DI7(MSB)13 DI614DI515 DI416XFER17 WR218 ILE19VCC 20U505DAC083
4、232 61 574U506LM741A1 B 2TAP3R501103VCCP2.7 WR+12V-12VP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7 32 61 574U507LM741A1 B 2TAP3R502103+12V-12V12J502OUTPUTR5031KR5042KR5052KC506104C50710412J505CON2R50710KVCC图 8-2 DAC0832 应用原理图单片机对 DAC0832 控制过程:使能 、 ,向寄存器中写入需转换数据。SXFE2实验内容1)将扩展板的电源 J501 与主板的电源接口 J2 或 J14 连接起来;将扩展
5、板的信号接口J500 与主板的信号接口 J15 或 J13 连接起来;将主板上的拨码开关 5、6、7、8 拨到ON;2)在 keil 编程环境下编写程序,完成实验功能。本实验参考程序完成的实验功能是在主板数码管上显示”2.7”V 电压,同时使 DAC0832 的输出为 2.7V 电压。编程时,控制 DAC0832的控制码为: ,取其整数部分为 138,16 进制为 0X8AH。在数码管上显示257.“2.7”字样。3)编译生成 HEX 文件,将 HEX 文件下载到实验系统中。观察数码管上显示的数据;用万用表测量 J502(OUTPUT)的电压值。三、实验例程2.7V 直流电压输出实例:#inc
6、lude#include#define DAC0832 XBYTE0X7FFF /DAC0832 使能 P2.7#define Vref 5 /参考电压 Vref=5Vunsigned char LED_seg10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/段码unsigned char LED_seg110=0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10;/段码unsigned char LED_bit4=0x01,0x02,0x04,0x08; /位码void delay(uns
7、igned long n) /延时函数for(;n0;n-);unsigned LED_buf4=0,0,0,0,;void convert(unsigned int n) /分解位函数unsigned char i=0;n=n/10;while(i4)LED_bufi=(unsigned char)(n%10);n=n/10;i+;void display(void) /显示函数unsigned char i;for(i=0;i3;i+)if(i=2)P0=LED_seg1LED_bufi;else P0=LED_segLED_bufi;P1=LED_biti;delay(100);void change(unsigned int a) /输出函数unsigned char i;i=(unsigned char)(a/100*255/Vref/10);DAC0832=i;void main(void)unsigned int a=2.7*1000; /输出 2.7V 电压while(1) convert(a);display(); /显示change(a); /输出delay(100);四、实验仪器和设备Keil 软件;AT89S52 实验平台;ATMEL ISP 在线编程软件;示波器,电压表。五、实验结果和数据分析问题:1修改程序为三角波和锯齿波,不需要显示。