DDS程序

//***************************************************//
//函数1:           ad9850_reset()                    //
//函数2:           ad9850_reset_serial()             //
//函数3:           ad9850_wr_parrel(unsigned char w0,double frequence)//
//函数4:           ad9850_wr_serial(unsigned char w0,double frequence)//
//版本:              V1.1                            //
//日期:             2008/12/19                      //
//修改日期:         2008/12/19                      //
//编写者:         xyc5208@163.com            //
//***************************************************//
//                  子程序说明                       //
//***************************************************//
//函数1:  ad9850_reset()
//        复位ad9850,之后为并口写入模式       
//函数2:  ad9850_reset_serial()
//        复位ad9850,之后为串口写入模式
//函数3:  ad9850_wr_parrel(unsigned char w0,double frequence)
//        并口写ad9850数据,w0为ad9850中w0的数据,frequence
//        为写入的频率 
//函数4:  ad9850_wr_serial(unsigned char w0,double frequence)
//        串口写ad9850数据,w0为ad9850中w0的数据,frequence
//        为写入的频率 
//需定义的位:
         //ad9850_w_clk    ;
         //ad9850_fq_up    ;
         //ad9850_rest     ;
         //ad9850_bit_data ;
//例:
         //sbit ad9850_w_clk    =P2^2;
         //sbit ad9850_fq_up    =P2^1;
         //sbit ad9850_rest     =P2^0;
         //sbit ad9850_bit_data =P1^7;
//***************************************************//
//                 写数据说明                        //
//***************************************************//
//写数据例:
//       ad9850_reset()
//       wr_lcd02_data(unsigned char x)
//       ad9850_wr_parrel(0x01,1000)
//       ad9850_wr_serial(0x01,1000)
//***************************************************//
//---------------------------------------------------//
//                   程序                            //
//---------------------------------------------------//
# include <reg51.h>
# include <stdio.h>
# include <intrins.h>
sbit ad9850_w_clk    =P2^2;  //P2.2口接ad9850的w_clk脚/PIN7
sbit ad9850_fq_up    =P2^1;  //P2.1口接ad9850的fq_up脚/PIN8
sbit ad9850_rest     =P2^0;  //P2.0口接ad9850的rest脚/PIN12
sbit 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;      //w0
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w1数据
w=(y>>24);
P1=w;      //w1
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w2数据
w=(y>>16);
P1=w;      //w2
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w3数据
w=(y>>8);
P1=w;      //w3
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w4数据
w=(y>>=0);
P1=w;      //w4
ad9850_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)
{
}
}

 


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
包含以上所有资料 DDS AD9850 AD9851 原理图 串行程序 并行程序 目 录 1 DDS 简介 1.1 产品简介 1.2 参考资料 2 DDS 的基本概念 2.1 DDS 概述 2.2 DDS 工作原理 2.3 DDS 有关名词解释 3 具体应用问题 3.1 DDS 没有输出,怎么办 3.2 哪些DDS 能直接用晶体提供时钟,哪些不能 3.3 Update 更新信号如何控制? 3.4 DDS 的扫频功能如何实现 3.5 DDS 输出级滤波器如何设计 3.6 DDS 发烫,是否正常 3.7 DDS 对输入时钟有什么要求 3.8 AD9910 的时钟输入需要注意什么? 3.9 DDS 时钟输入,DAC 输出能否使用单端模式?电路该如何接 3.10 DDS 评估板上分别有2 个变压器或2 个巴伦(Balun)有什么用处 3.11 DDS 评估板上端接电阻为50 欧,为何变压器的参数是在75 欧标定的? 3.12 ADT1-1WT 的原副边是否可以互换使用 3.13 如何同步多片DDS 芯片的输出 3.14 DDS 输出端DAC 为电流输出,怎么转换为电压,有什么限制 3.15 DDS 的AGND,DGND 应该怎样连接,接模拟地还是数字地 3.16 有些DDS 评估板上的MC100LVEL16 的用途是什么? 3.17 AD7008 已经停产,有什么可以替代 3.18 如何确定DDS 寄存器的值 3.19 DDS 的评估板软件对操作系统有什么要求 3.20 DDS 除了正弦波,还能产生别的波形么 3.21 用DDS 有什么好处 3.22 ADI 的DDS 捷变频能力为多少 3.23 有无DDS 的参考程序代码 3.24 如何使用DDS 进行幅度调制 3.25 如何用AD5930 来产生一个单频信号 3.26 为什么DDS 输出的幅度会随频率的增加而减小 3.27 DDS 输出电压的幅度如何计算 3.28 应该用什么样的仪器来调试DDS 3.29 输出杂散较大,怎么办

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值