电路图如下:
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)示波器三角波示意图: