实验七DAC0832数模转换实验.docx

上传人:b****3 文档编号:5097142 上传时间:2022-12-13 格式:DOCX 页数:12 大小:78.34KB
下载 相关 举报
实验七DAC0832数模转换实验.docx_第1页
第1页 / 共12页
实验七DAC0832数模转换实验.docx_第2页
第2页 / 共12页
实验七DAC0832数模转换实验.docx_第3页
第3页 / 共12页
实验七DAC0832数模转换实验.docx_第4页
第4页 / 共12页
实验七DAC0832数模转换实验.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验七DAC0832数模转换实验.docx

《实验七DAC0832数模转换实验.docx》由会员分享,可在线阅读,更多相关《实验七DAC0832数模转换实验.docx(12页珍藏版)》请在冰豆网上搜索。

实验七DAC0832数模转换实验.docx

实验七DAC0832数模转换实验

实验七、DAC0832数模转换实验

一、实验目的

1、掌握DAC0832直通方式、单缓冲方式、双缓冲方式的编程方法

2、掌握DA转换程序的编程方法和调试方法。

二、实验说明

美国国家半导体公司产品,具有两个输入数据寄存器的8位DAC,能直接与MCS-51单片机相连。

主要特性如下:

分辨率为8位;

*电流输出,稳定时间为1s;

*可双缓冲输入、单缓冲输入或直接数字输入;

*单一电源供电(+5~+15V);

DAC0832的逻辑结构:

其引脚分布如图所示:

DAC0832各引脚说明:

DI0-DI7:

转换数据输入端;

CS:

片选信号输入端。

ILE:

数据锁存允许信号输入端,高电平有效。

WR1:

输入寄存器写选通控制端。

当CS*=0、ILE=1、WR1*=0时,数据信号被锁存在输入寄存器中。

Xfer:

数据传送控制信号输入端,低电平有效。

WR2:

DAC寄存器写选通控制端。

当XFER*=0,WR2*=0时,输入寄存器状态传入DAC寄存器中。

Iout1:

电流输出1端,当数据全为1时,电流输出最大;当数据全为0时,输出电流最小。

Iout2:

电流输出2端。

DAC0802具有Iout1+Iout2=常数的特性。

Rfb:

反馈电阻端。

Vref:

基准电压输入端,是外加的高精度电压源,它与芯片内的电阻网络相连接,该电压范围为-10V~10V;

VCC和GND:

芯片的电源和接地端。

DAC内部有两个寄存器,而这两个寄存器的控制信号有五个,输入寄存器有LIE、CS、WR1控制,DAC寄存器由WR2、Xref控制,用软件指令控制这五个控制端可以实现三种工作方式:

直通方式,单缓冲方式,双缓冲方式。

直通方式是将两个寄存器的五个控制端预先置为有效信号,两个寄存器都开通,只要有数字信号输入就立即进入DA转换。

单缓冲方式是使DAC0832的两个输入寄存器中由一个处于直通方式,另一个处于受控方式,可以将WR2和Xref相连接到地上,并把WR1接到80C51的WR上,LIE接高电平,CS接高位地址或地址译码的输出端上。

双缓冲方式把DAC0832的输入寄存器和DAC寄存器都接成受控方式,这种方式可以用于多路模拟量要求同时输出的情况下。

三种工作方式的区别是:

直通方式不需要选通,直接进行DA转换;单缓冲方式一次选通;双缓冲方式二次选通。

三、实验步骤

1、单片机最小应用系统1的P1口接DAC0832的DI0~DI7,单片机最小应用系统的P2.0、WR分别接DA转换的P2.0、WR,Vref接-5V,DA转换的out接示波器探头。

2、用串行数据线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,主要仿真器的方向:

缺口朝上。

3、打开keiluvision2仿真软件,首先建立本实验的项目文件,接着添加DA转换程序。

4、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400.

5、打开模块电源和总电源,点击开始调试按钮,点击run按钮运行程序。

观察示波器测量输出波形的周期和幅度。

四、实验内容

1、在硬件不改动的情况下,请编程实现输出波形为锯齿波及三角波、正弦波。

参考程序:

1、矩形波参考程序:

#include"reg51.h"

#include"absacc.h"

#defineDACXBYTE[0xFEFF]

voiddeley(unsignedintk)

{

unsignedinti;

for(i=0;i

}

voidmain()

{

unsignedintk;

unsignedintdout;

while

(1)

{DAC=0x00;

deley(10);

DAC=0xff;

deley(10);

}

}

2、三角波参考程序:

#include"reg51.h"

#include"absacc.h"

#defineDACXBYTE[0xFEFF]

voiddeley(unsignedintk)

{

unsignedinti;

for(i=0;i

}

voidmain()

{

unsignedintk;

unsignedintdout;

while

(1)

{

for(k=0;k<0xff;k++)

{

DAC=k;

}

for(k=0xff;k>0;k--)

{

DAC=k;

}

}

}

3、锯齿波参考程序:

#include"reg51.h"

#include"absacc.h"

#defineDACXBYTE[0xFEFF]

voiddeley(unsignedintk)

{

unsignedinti;

for(i=0;i

}

voidmain()

{

unsignedintk;

unsignedintdout;

while

(1)

{

for(k=0;k<0xff;k++)

DAC=k;

}

}

4、键盘控制波形产生程序:

#include"reg51.h"

#include"intrins.h"

#defineucharunsignedchar;

#defineuintunsignedint;

unsignedcharaa;

unsignedintcodesintab[]={

0x80,0x86,0x8C,0x92,0x98,0x9E,0xA5,0xAA,0xB0,0xB6,0xBC,0xC1,0xC6,0xCB,0xD0,0xD5,

0xDA,0xDE,0xE2,0xE6,0xEA,0xED,0xF0,0xF3,0xF5,0xF8,0xFA,0xFB,0xFD,0xFE,0xFE,0xFF,

0xFF,0xFF,0xFE,0xFE,0xFD,0xFB,0xFA,0xF8,0xF5,0xF3,0xF0,0xED,0xEA,0xE6,0xE2,0xDE,

0xDA,0xD5,0xD0,0xCB,0xC6,0xC1,0xBC,0xB6,0xB0,0xAA,0xA5,0x9E,0x98,0x92,0x8C,0x86,

0x7F,0x79,0x73,0x6D,0x67,0x61,0x5A,0x55,0x4F,0x49,0x43,0x3E,0x39,0x34,0x2F,0x2A,

0x25,0x21,0x1D,0x19,0x15,0x12,0x0F,0x0C,0x0A,0x07,0x05,0x04,0x02,0x01,0x01,0x00,

0x00,0x00,0x01,0x01,0x02,0x04,0x05,0x07,0x0A,0x0C,0x0F,0x12,0x15,0x19,0x1D,0x21,

0x25,0x2A,0x2F,0x34,0x39,0x3E,0x43,0x49,0x4F,0x55,0x5A,0x61,0x67,0x6D,0x73,0x79};

sbitP3_0=P3^0;

sbitP3_6=P3^6;

voiddeley(unsignedcharz);

voidju();

voidsan();

voidchi();

voidsin();

ucharkeyscan();

//*主函数*//

voidmain()

{

P3_0=0;

P3_6=0;

while

(1)

{

aa=keyscan();

if(aa==1)

ju();

if(aa==2)

san();

if(aa==3)

chi();

if(aa==4)

sin();

}

}

//*延时子程序*//

voiddeley(unsignedcharz)

{

unsignedintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

voidju()

{

P1=0x00;

deley(10);

P1=0xff;

deley(10);

}

//*三角波产生程序*//

voidsan()

{

unsignedintk;

for(k=0;k<0xff;k++)

{

P1=k;

}

for(k=0xff;k>0;k--)

{

P1=k;

}

}

//*锯齿波产生程序*//

voidchi()

{

P1=P1+1;

if(P1==0xff)

P1=0x00;

}

//*正弦波产生程序*//

voidsin()

{

unsignedintkk;

for(kk=0;kk<=127;kk++)

{

P1=sintab[kk];

}

}

//*键盘扫描程序*//

ucharnum,temp;

ucharkeyscan()

{

unsignedcharii;

for(ii=0;ii<4;ii++)

{

P2=_crol_(0xfe,ii);

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

deley(5);

temp=P2;

temp=temp&0xf0;

while(temp!

=0xf0)

{

temp=P2;

switch(temp)

{

case0xee:

num=1;break;

case0xde:

num=2;break;

case0xbe:

num=3;break;

case0x7e:

num=4;break;

case0xed:

num=5;break;

case0xdd:

num=6;break;

case0xbd:

num=7;break;

case0x7d:

num=8;break;

case0xeb:

num=9;break;

case0xdb:

num=10;break;

case0xbb:

num=11;break;

case0x7b:

num=12;break;

case0xe7:

num=13;break;

case0xd7:

num=14;break;

case0xb7:

num=15;break;

case0x77:

num=16;break;

}

while(temp!

=0xf0)

{

temp=P2;

temp=temp&0xf0;

}

}

}

}

returnnum;

}

汇编语言:

矩形波:

ORG0000H

AJMPSTART

ORG0030H

START:

MOVDPTR,#0FEFFH

LP:

MOVA,#0FFH

MOVX@DPTR,A

LCALLDELAY

MOVA,#00H

MOVX@DPTR,A

LCALLDELAY

SJMPLP

DELAY:

MOVR3,#11H

D1:

NOP

NOP

NOP

DJNZR3,D1

RET

END

三角波:

ORG0000H

AJMPSTART

ORG0030H

START:

MOVDPTR,#0FEFFH

LP0:

MOVA,#00H;

MOVR2,#0FFH;

LP1:

MOVX@DPTR,A

INCA;

DJNZR2,LP1

MOVA,#0FEH

MOVR2,#0FDH;

LP2:

MOVX@DPTR,A

DECA

DJNZR2,LP2;

LJMPLP0

END

锯齿波:

ORG0000H

AJMPSTART

ORG0030H

START:

MOVDPTR,#0FEFFH

LP0:

MOVA,#00H;

MOVR2,#0FFH;

LP1:

MOVX@DPTR,A

INCA;

DJNZR2,LP1

LJMPLP0

END

流程图:

六、电路图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1