|
于51单片机的AD9850控制程序。通过串行数据传输,只需四个IO口,相对并行数据传输要少7个IO。另外,通过四个独立按键设置输出频率值。如果滤波模块效果好,则输出40M正弦波波形良好.
全部代码下载:
AD9850控制程序.rar
(56.46 KB, 下载次数: 80)
单片机源程序部分预览:
- #include <ad9850.h>
- //ad9850复位(串口模式)
- void ad9850_reset_serial()
- {
- ad9850_w_clk=0;
- ad9850_fq_up=0;
- 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_serial(uchar w0,double frequence)
- {
- uchar i,w;
- long int y;
- double x;
- //计算频率的HEX值
- x=4294967295/125;//适合125M晶振,如果时钟频率不为125MHZ,修改该处的频率值,单位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;
- }
复制代码
|
|