一、实验目的
1、了解 D/A 转换的基本原理。
2、了解 D/A 转换芯片 0832 的性能及编程方法。
3、了解单片机系统中扩展 D/A 转换的基本方法。
二.实验设备和器件
1.KEIL软件
2.实验箱
三.实验内容
利用 DAC0832,编制程序产生锯齿波、三角波、正弦波。三种波轮流显示,用示波器观看。
- 电路图及连线:
连线 | 连线孔1 | 连线孔2 |
1 | DA_CS | CS2 |
2 | -5V-+5V | 电压表测量端 |
3 | 电压表地端 | 实验箱地 |
- 代码:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define DAC0832 XBYTE[0x8000]
uchar sindata[64]=
{0x80,0x8c,0x98,0xa5,0xb0,0xbc,0xc7,0xd1,0xda,0xe2,0xea,
0xf0,0xf6,0xfa,0xfd,0xff,0xff,0xff,0xfd,0xfa,0xf6,0xf0,
0xea,0xe3,0xda,0xd1,0xc7,0xbc,0xba,0xa5,0x99,0x8c,0x80,
0x73,0x67,0x5b,0x4f,0x43,0x39,0x2e,0x25,0x1d,0x15,0xf,
0x9,0x5,0x2,0x0,0x0,0x0,0x2,0x5,0x9,0xe,0x15,0x1c,0x25,
0x2e,0x38,0x43,0x4e,0x5a,0x66,0x73};
void delay(uchar m)//延时函数
{uchar i;for(i=0;i<m;i++) ;}
void juchi() //锯齿函数
{uchar i1;
for (i1=0;i1<0xff;i1++) DAC0832=i1;
i1=0;}
void sanjiao() //三角函数
{ uchar i2;
for(i2=0;i2<0xff;i2++) DAC0832=i2;
for(i2=0xff;i2>0;i2--) DAC0832=i2;
i2=0;}
void zhengxian() //正弦函数
{uchar k;
for(k=0;k<64;k++)
{DAC0832=sindata[k];delay(1);}}
void main() //主函数
{uchar j=2;
while(1)
{
while(j--)
{juchi();}j=2;
while(j--)
{sanjiao();}j=2;
while(j--)
{zhengxian();}j=2;}}
- 波形图:
- 分析:
- 该实验中,运用DA转换来产生不同的波形,本实验选取的双极性电压(-5V~+5v)
8 位 D/A 转换器的输入数据与输出电压的关系为
U(-5V ~ +5V)=2·Uref/256×N-5V (这里 Uref 为+5V)
2、本实验DA选择模块地址控制端口DA_CS与实验箱上的CS0相连,根据查实验箱相关资料可知,CS0提供的地址为8000H-8fffH,本实验选取的8000H作为地址
3、第一部分的实验图在本实验中右下角的部分不需要
4、锯齿的形成原理则是输入的数字量从0000到ffff,一直循环,可形成无数个锯齿波
三角的形成原理则是输入的数字量从0000到ffff,,再从ffff到0000,一直循环,可形成无数个三角波
正弦的形成原理则是造一张正弦数字量表。即查函数表得到的值转换成十六进制数填表。
5、在本实验形成锯齿波时,用for(i1=0;i1<=0xff;i1++)这条语句时,这个循环跳不出来,会一直在示波器上一直显示锯齿波,改为for(i1=0;i1<0xff;i1++)之后,循环则跳出
6、本实验中,我们把每个波形的形成写为一个函数,然后在主函数中调用这三个函数,为防止波形转换的过快,在主函数中中,while再构成了一个循环,及每个波形图出现两个周期。