本人打算做一个单片机AT89S52驱动AD9850的DDS信号发生器。
程序写好了,也用面包板搭了相应的电路,无奈信号就是出不来。
在网上查了很多资料,发现科创这里的高人很多,
于是通过了网站那折磨人的注册流程来到这里,请各位达人不吝赐教。
AD9850手册.pdf
318.05KB
PDF
62次下载
预览
datasheet_AT89S52.pdf
231.04KB
PDF
32次下载
预览
请先看程序,我去画原理图,随后放上来。
//header files
#include "reg52.h" //header file of SCM
#include "stdio.h" //standard buffered input&output
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
//program
sbit w_clk =P2^2; //P2.2口接ad9850的w_clk脚/PIN7 AD9850与51单片机接口定义
sbit fq_up =P2^1; //P2.1口接ad9850的fq_up脚/PIN8
sbit rset =P2^0; //P2.0口接ad9850的rset脚/PIN12
sbit bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25 P1为8位数据口
//subfunctions
//serial
void resets()
{
w_clk=0;
fq_up=0;
rset=0;
rset=1;
rset=0;
w_clk=0;
w_clk=1;
w_clk=0;
fq_up=0;
fq_up=1;
fq_up=0;
}
void wrs(unsigned char w0,double freq)
{
unsigned char i,w;
long int y;
double x;
x=4294967295/100;
freq=freq/1000000;
freq=freq*x;
y=freq;
w=(y>>=0);
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
w=(y>>8);
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
w=(y>>16);
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
w=(y>>24);
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
w=w0;
for(i=0;i<8;i++)
{
bit_data=(w>>i)&0x01;
w_clk=1;
w_clk=0;
}
fq_up=1;
fq_up=0;
}
main()
{
P0=0x00;
DL(20);
P1=0x00;
DL(20);
P2=0x00;
DL(20);
P3=0x00;
DL(20);
resets();
DL(20);
wrs(0x00,100000);
while(1)
{
// DL(10000);
}
}
200字以内,仅用于支线交流,主线讨论请采用回复功能。