单片机 DAC0832数模转换实验

电路图如下:
在这里插入图片描述

1、描述DA0832实现DA转换的基本原理
1、
DAC0832是一个八位D/A转换器,D/A转换电路是一个R-2RT型电阻网络,可实现8位数据的转换。
2、
数据总线——DI7~DI0:转换数据输入
控制总线(控制输入寄存器的打开)——ILE(数据锁存允许信号,高电平有效),CS(片选信号,低电平有效),WR1(写信号,低电平有效)
控制DAC寄存器的写入——WR2(写信号,低电平有效),XFER(数据传输控制信号,低电平有效)
3、
通过对两个输入寄存器进行控制,可以采用双缓冲、单缓冲、直通的输入方式。
4、
输入信号通过一个8位D/A转换器输出Iout1和Iout2,然后两路输出电流外接一个运算放大器(单极性输出或者双极性输出),最后输出一个模拟电压。单极性输出电压:Vout=-Vref*D/256(D=0~255)
例如:双缓冲
(1)CPU执行输出指令,输出8位数据给DAC0832
(2)在CPU这行输出指令的同时,使ILE,CS,WR1三个控制信号都有效,8位数据锁存在8位输入寄存器中
(3)当WR2,XFER两个控制信号也都有效时,8位数据再次被锁存到DAC寄存器,这时8位D/A转化器开始工作,8位数据转换为相对应的模拟电流,从Iout1和Iout2输出。

2、要求DAC0832编写程序产生一个三角波。三角波的频率为0.5HZ,利用定时器定时,需要有理论计算过程,并有结果显示截图。
(1)给出定时器工作方式,计数初值,及其初值计算方法。
在这里插入图片描述
(2)代码如下:

/** 功能描述:   **/
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
/***********端口定义********************************/
#define out P1
sbit dac_cs=P2^0;
sbit dac_wr=P2^1;
/***********函数申明***********************************/
void dac_change(uchar dac_data);
/***********变量定义********************************/
bit flag=0;//状态量的思想   =0,上升;=1,下降
uchar counter=0;//软件计数
uchar i=200;//输入量D

void main(void)
{
uchar timer0_peroid=200;
TMOD=0x02;//in mode 2
TH0=0-timer0_peroid;//56
TL0=0-timer0_peroid;//56
TR0=1;//启动T0
PT0=1;//高级中断
ET0=1;//允许T0中断
EA=1;//打开中断总开关
while(1)
	{
    if(counter==25){
       counter=0;
	   if(flag==0){
       dac_change(i);//波形上升
	   i--;  
	   if(i==0)  flag=1;
	  }else{
	    dac_change(i);//波形下降
	    i++; 
 	    if(i==200) flag=0;
	   }
      }
    }
 }
//timer0中断函数
void timer_0 () interrupt 1{
    counter++;
 }
//DAC转换
void dac_change(uchar dac_data)
{
    out=dac_data;
	dac_cs=0;
	dac_wr=0;
	dac_cs=1;
	dac_wr=1;
}

(3)示波器三角波示意图:
在这里插入图片描述

  • 17
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值