要求:利用A/D和D/A实现将A/D的输入电压反向变换的功能,即A/D的输入电压从0~+5V变化时,D/A的输出电压相应的从+5V~0V变化。
控制功能:将单片机实验箱上的电位器W1产生0~5V电压输入到ADC0809的通道0,利用数字万用表测量DAC0832输出的电压,看其是否随ADC0809的输入电压反向变化。利用74HC4040将8MHz晶振产生的脉冲信号十六分频后做为ADC0809的时钟信号。
使用的主要元器件:89C51、11.0592MHz晶振、74LS373、74LS138、8MHz晶振、74HC04、74HC4040、ADC0809、DAC0832、LM741、10k电位器W1等。
结果验证:①用示波器检查ADC0809的时钟频率是否为500kHz。②旋动电位器W1产生0~+5V的电压,用数字万用表测量D/A的输出是否从+5→0V变化。③使W1的输出电压从0V开始,以0.5V为增量,测量D/A的输出电压并记录。试分析误差产生的原因。
程序如下:
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define DAC0832 XBYTE[0x7FFF]
uchar temp,i,a;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^7;
uchar getdata=0x0000;
void main(void)
{
ET0=1;
EA=1;
TMOD=0x02;
TH0=246;
TL0=246;
TR0=1;
while(1)
{
ST=0;
ST=1;
ST=0;
while(EOC==0){;}
OE=1;
getdata=P0;
OE=0;
temp=getdata;
P1=temp;
DAC0832=P1;
} }
void T0X(void) interrupt 1 using 0
{
CLK=~CLK;
}
现在遇到的问题是电压到3.95就无法继续增加了
|