模数转换DAC0832的应用实验
2013-01-16
标签:

[

实验任务

]

用两个按键通过单片机控制DAC0832的输出,使OUT端可以输出0—5V的幅值,频率为1KHZ的锯齿波和三角波两种波形。通上电源后;按下INT1则输出三角波,在按下INT0输出锯齿波。

[

实验原理

]

ADC0804是8位全MOS 中速D/A转换器,采用R—2RT形电阻解码网络,转换结果为一对差动电流输出,转换时间大约为1us。使用单电源+5V―+15V供电。参考电压为-10V-+10V。在此我们直接选择+5V作为参考电压。DAC0832有三种工作方式:直通方式,单缓冲方式,双缓冲方式;在此我们选择直通的工作方式,将XFER WR 1WR2 CS管脚全部接数字地。管脚8接参考电压,在此我们接的参考电压是+5V。那么经过第一级运放后,输出电压将是-5V-0V,在经过第二级运放反相放大1倍以后将可以输出0V—5V了。我们在控制P1口输出数据有规律的变化将可以产生三角波,锯齿波,梯型波等波形了。

[

C语言源程序

]

#include

unsigned char keycnt=0;

unsigned char tcnt=0;//键值判断

bit sjz=0;//产生三角波时用到的标志

void delayl()//延时子程序

{unsigned char i,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--); }

void KEY()//按键扫描程序

{

if(P3_2==0)

{

delayl();//延时跳过按下时的抖动

if(P3_2==0)

{

keycnt=0;//定时器产生锯齿波标志

TR0=0;//暂时停止波形输出

TH0=0x256-40; //对TH0 TL0赋值

TL0=0x256-40;

TR0=1;//开始定时,产生锯齿波

while(P3_2==0);//如果一直按着键,则等待松键开

delayl();//延时跳过松开后的抖动

}}

if(P3_3==0)

{

delayl();//延时跳过按下时的抖动

if(P3_3==0)

{

keycnt=1; //定时器产生三角波标志

TR0=0;//暂时停止波形输出

TH0=0x256-40; //对TH0 TL0赋值

TL0=0x256-40;

TR0=1;//开始定时 产生三角波

}

while(P3_2==0);//如果一直按着键,则等待松键开

delayl();//延时跳过松开后的抖动

}

}//请注意写程序时的格式规范,此处是为了节省纸张

void t0(void) interrupt 1 using 0//定时中断服务函数

{

if(keycnt==0)//产生锯齿波

{

P0=tcnt;

tcnt=+0x0a; //步进0.2V/一次中断

if(tcnt==0xfb)

{tcnt=0;}

}

if(keycnt==1)//产生三角波

{if(sjz==0)

{P0=tcnt;

tcnt=+0x0a;//步进0.2V/一次中断

if(tcnt==0xfa)

{sjz=1;}

}

if(sjz==1)

{

P0=tcnt;

tcnt=-0x0a;

if(tcnt==0)

{sjz=0;}

}

}

}

void main(void)

{

TMOD=0x02;//定时器工作在方式2

ET0=1;

EA=1;

while(1)

{KEY();}

}

[硬件电路图]

可能会用到的工具/仪表
相关文章
推荐文章
热门文章
章节目录
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号