如何改进程序让AD9850输出40MHz
时间:10-02
整理:3721RD
点击:
最近在学习DDS,用51控制AD9850输出的频率一直上不去,不知道要什么调整,用的是串口。有没有大神。//---------------------------------------------------//# include <reg51.h># include <stdio.h># include <intrins.h>sbit ad9850_w_clk =P2^2; //P2.2口接ad9850的w_clk脚/PIN7sbit ad9850_fq_up =P2^1; //P2.1口接ad9850的fq_up脚/PIN8sbit ad9850_rest =P2^0; //P2.0口接ad9850的rest脚/PIN12sbit ad9850_bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25//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/125;//适合125M晶振//如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !frequence=frequence/1000000;frequence=frequence*x;y=frequence;//写w0数据w=w0; P1=w; //w0ad9850_w_clk=1;ad9850_w_clk=0;//写w1数据w=(y>>24);P1=w; //w1ad9850_w_clk=1;ad9850_w_clk=0;//写w2数据w=(y>>16);P1=w; //w2ad9850_w_clk=1;ad9850_w_clk=0;//写w3数据w=(y>>8);P1=w; //w3ad9850_w_clk=1;ad9850_w_clk=0;//写w4数据w=(y>>=0);P1=w; //w4ad9850_w_clk=1;ad9850_w_clk=0;//移入始能ad9850_fq_up=1;ad9850_fq_up=0;}//***************************************************//// 向ad9850中写命令与数据(串口) ////---------------------------------------------------//void ad9850_wr_serial(unsigned char w0,double frequence){unsigned char i,w;long int y;double x;//计算频率的HEX值x=4294967295/125;//适合125M晶振//如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !frequence=frequence/1000000;frequence=frequence*x;y=frequence;//写w4数据w=(y>>=0);for(i=0;i<8;i++){ad9850_bit_data=(w>>i)&0x01;ad9850_w_clk=1;ad9850_w_clk=0;}//写w3数据w=(y>>8);for(i=0;i<8;i++){ad9850_bit_data=(w>>i)&0x01;ad9850_w_clk=1;ad9850_w_clk=0;}//写w2数据w=(y>>16);for(i=0;i<8;i++){ad9850_bit_data=(w>>i)&0x01;ad9850_w_clk=1;ad9850_w_clk=0;}//写w1数据w=(y>>24);for(i=0;i<8;i++){ad9850_bit_data=(w>>i)&0x01;ad9850_w_clk=1;ad9850_w_clk=0;}//写w0数据w=w0; for(i=0;i<8;i++){ad9850_bit_data=(w>>i)&0x01;ad9850_w_clk=1;ad9850_w_clk=0;}//移入始能ad9850_fq_up=1;ad9850_fq_up=0;}//***************************************************//// 测试程序1000Hz ////---------------------------------------------------//main(){P0=0x00;P1=0x00;P2=0x00;P3=0x00;//---------------------------------------------------////---------------------------------------------------////串行写1000Hz程序ad9850_reset_serial();ad9850_wr_serial(0x00,1000);//---------------------------------------------------//while(1){}}
file:///C:/Users/night watcher/Desktop/电赛/AD9850_AD9851_模块/AD9850_1_V3_C程序/新建文件夹/ad9850.c