最近在玩AD9850,我是直接用网上别人的简单驱动程序,在BNC P11处可以用示波器测得很漂亮的正弦波,可是P12、P13处却测不到输出的方波,我是参照官方的Datasheet画的原理图,按照我对资料的理解,把P11输出的正弦波加到AD9850的15、16脚,经过芯片本身内置的高速比较器后,可以在13、14脚输出方波的,可是我的无论如何都没有方波输出,哎!!!伤心啊,求各位前辈给小弟指点一下,真诚地谢谢大家!!!!
用别人的程序如下:
# include <reg52.h>
# include <stdio.h>
# include <intrins.h>
sbit ad9850_w_clk =P0^2; //P2.2口接ad9850的w_clk脚/PIN7
sbit ad9850_fq_up =P0^1; //P2.1口接ad9850的fq_up脚/PIN8
sbit ad9850_rest =P0^0; //P2.0口接ad9850的rest脚/PIN22
//P1为8位数据口
//***************************************************//
// ad9850复位(并口模式) //
//---------------------------------------------------//
void ad9850_reset()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信号
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
}
//***************************************************//
// ad9850复位(并口模式) //
//---------------------------------------------------//
void ad9850_reset_serial()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信号
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
//w_clk信号
ad9850_w_clk=0;
ad9850_w_clk=1;
ad9850_w_clk=0;
//fq_up信号
ad9850_fq_up=0;
ad9850_fq_up=1;
ad9850_fq_up=0;
}
//***************************************************//
// 向ad9850中写命令与数据(并口) //
//---------------------------------------------------//
void ad9850_wr_parrel(unsigned char w0,double frequence)
{
unsigned char w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/100;//适合100M晶振
//如果时钟频率不为100MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000;
frequence=frequence*x;
y=frequence;
//写w0数据
AD9850_FQUD_CLR ;
wdata=0x00 ; //写w0
GPIO_Write(AD9850_DATA_PORT ,wdata) ;
AD9850_WCLK_SET ;
AD9850_WCLK_CLR ;
wdata=y>>24 ; //写w1
GPIO_Write(AD9850_DATA_PORT ,wdata) ;
AD9850_WCLK_SET ;
AD9850_WCLK_CLR ;
wdata=y>>16 ; //写w2
GPIO_Write(AD9850_DATA_PORT ,wdata) ;
AD9850_WCLK_SET ;
AD9850_WCLK_CLR ;
wdata=y>>8 ; //写w3
GPIO_Write(AD9850_DATA_PORT ,wdata) ;
AD9850_WCLK_SET ;
AD9850_WCLK_CLR ;
wdata=y>>0 ; //写w4
GPIO_Write(AD9850_DATA_PORT ,wdata) ;
AD9850_WCLK_SET ;
AD9850_WCLK_CLR ;
AD9850_FQUD_SET ; //移入使能
要产生1000hz的正弦
}
//***************************************************//
// 测试程序1000Hz //
//---------------------------------------------------//
main()
{
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
//---------------------------------------------------//
//并行写1000Hz程序
ad9850_reset();
ad9850_wr_parrel(0x00,1000);
//---------------------------------------------------//
while(1) {}
}
一周热门 更多>