数模-模数转换实验 下载本文

内容发布更新时间 : 2024/5/16 3:55:20星期一 下面是文章的全部内容请认真阅读。

姓名: 学号: 实 验 报 告 实验项目名称: D/A、A/D转换实验 同组人: 实验时间: 实验室: 指导教师: 一、实验目的: (l)学习外部接口的应用。ADC0809、DAC0832的工作方式,输入/输出方式的应用。 (2)熟悉Proteus软件电路设计和Keil软件程序调试方法。 重点:ADC0809、DAC0832的工作方式 二、实验顶备知识: (l)AT89S51与ADC、DAC接口的连接,ADC0809、DAC0832的基本原理。 (2)Proteus软件应用,Keil软件程序调试应用。 三、实验内容 ㈠ 利用DAC0832转换器输出锯齿波、三角波、方波和正弦波。 1、设计要求:以DAC0832转换器和AT89C52单片机设计仿真电路,该电路能在虚拟示波器上显示出锯齿波、三角波、方波和正弦波,并能用虚拟电压表显示输出电压值,要求电压范围为0~15V且周期约为510ms。 2、仿真电路原理图 元器件选取:①AT89C52:单片机;②RES、RX8:电阻、8排阻;③CRYSTAL:晶振;④CAP、CAP-ELEC:电容、电解电容;⑤DAC0832:D/A转换器;⑥LM358N:运算放大器。 图6-1 电路原理图 - 1 -

姓名: 学号: 3、程序设计内容 程序设计首先考虑DAC0832转换芯片的入口地址,地址的设置与接口电路的连接方式有关。P2.7端口与DAC0832的CS片选端相连,要选通DAC0832,要求CS引脚为低电平,则DAC0832的入口地址为0x7FFFH。 4、程序清单 #include #include #include #define DAC0832Addr1 0x7FFF #define DAC0832Addr2 0xBFFF #define DAC0832Addr3 0xDFFF #define DAC0832Addr4 0xEFFF #define uchar unsigned char #define uint unsigned int uchar p; float f; int a; #define pi 3.1415926 void Uart_Init( void ); void TransformData1(uchar c0832data1); void TransformData2(uchar c0832data2); void TransformData3(uchar c0832data3); void TransformData4 (uchar c0832data4); void Delay(); uchar const code ZXB_code[255]={ 0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c,0x9f,0xa2, 0xa5,0xa8,0xab,0xae,0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4, 0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,0xda,0xdc,0xde,0xe0, 0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf4, 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe,0xfe,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe, 0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf3,0xf2, 0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe3,0xe1,0xde,0xdc, 0xda,0xd8,0xd6,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf, 0xbc,0xb9,0xb6,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c, 0x99,0x96,0x92,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7d,0x79,0x76, 0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52, 0x4f,0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31, 0x2e,0x2c,0x2a,0x27,0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17, 0x15,0x14,0x12,0x10,0xf,0xd,0xc,0xb,0x9,0x8,0x7,0x6,0x5,0x4, 0x3,0x3,0x2,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xa,0xc,0xd, 0xe,0x10,0x12,0x13,0x15,0x17,0x18,0x1a,0x1c,0x1e,0x20,0x23, 0x25,0x27,0x29,0x2c,0x2e,0x30,0x33,0x35,0x38,0x3b,0x3d,0x40, - 2 -

姓名: 学号: 0x43,0x46,0x48,0x4b,0x4e,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63, 0x66,0x69,0x6c,0x6f,0x73,0x76,0x79 }; main() { uchar cDigital1=0; Uart_Init(); P0=0xFF; P1=0xFF; P2=0xFF; P3=0xFF; Delay(); while(1) { for(cDigital1=0;cDigital1<255;cDigital1++) { Delay(); TransformData1(cDigital1); TransformData2(255-cDigital1); TransformData3(0); TransformData4(ZXB_code[cDigital1]); } for(cDigital1=255;cDigital1>0;cDigital1--) { Delay(); TransformData1(cDigital1); TransformData2(cDigital1); TransformData3(255); TransformData4(ZXB_code[-(cDigital1-255)]); } } } void TransformData1(uchar c0832data1) { *((uchar xdata*)DAC0832Addr1)=c0832data1; } void TransformData2(uchar c0832data2) { *((uchar xdata*)DAC0832Addr2)=c0832data2; } void TransformData3(uchar c0832data3) { *((uchar xdata*)DAC0832Addr3)=c0832data3; } - 3 -