有用过AD9951的朋友请进,求指导,十万火急

no_define   2012-5-2 22:42 楼主

    最近用89C52控制AD9951做一个DDS简易信号源,但是硬件做出来了,程序写上去没有波形输出啊,现在都不知道是怎么回事,求大神指导下小弟啊!

这是写的测试程序,输出10M:

#include<stdio.h>
#include"reg52.h"

#define uint unsigned int
#define uchar unsigned char

#define CFR2 0x01
#define FTW0 0x04

sbit DDS_SCLK=P3^1;
sbit DDS_SDIO=P3^2;
sbit DDS_UPDATA=P3^3;

void DDSWrite_Address(uint Data_address) //从最高位开始写
{
 uint Data;
 uchar i;
 Data=Data_address;
 for(i=7;i!=0;i--)
 {
  DDS_SCLK=0;
  DDS_SDIO=Data&0x80;
  Data=Data<<1;
  DDS_SCLK=1;
 }
 DDS_SCLK=0;  
}
void DDSWrite_Data(uint Data_data)//从最高位开始写,写8位
{
 unsigned char i;
 uint Data;
 Data=Data_data;
 
 for(i=7;i!=0;i--)
 {
  DDS_SCLK=0;
  DDS_SDIO=Data&0x80;
  Data=Data<<1;
  DDS_SCLK=1;
 }
}
void DDS_WRITE(uint Frequence_DATA)
{
 uint DATA;
 uint CFR2_DATA=0x0000a7;
 char j;
 uint TEMP_CFR2;
 uint TEMP_FTW0;
 DATA=Frequence_DATA;
 
 DDSWrite_Address(0x01);//送出CFR2寄存器地址
 for(j=3;j!=0;j--)//送出要写入CF2寄存器的内容
 {
  TEMP_CFR2=CFR2_DATA&0xff0000;
  CFR2_DATA=CFR2_DATA<<8;
  DDSWrite_Data(TEMP_CFR2); 
 }
 DDS_UPDATA=1;
 DDS_UPDATA=0;//DDS发送一个UPDATA脉冲

 DDSWrite_Address(FTW0);//写FTW0寄存器地址
 for(j=4;j!=0;j--)
 {
  TEMP_FTW0=DATA&0xff000000;
  DATA=DATA<<8;
  DDSWrite_Data(TEMP_FTW0); 
 }
 DDS_UPDATA=1;
 DDS_UPDATA=0;//DDS发送一个UPDATA脉冲
}
void main()
{
 DDS_UPDATA=0;
 while(1)
 {
   DDS_WRITE(0x06666666);//写10MHz
 }
}

 

  • 这是AD9951外围电路

回复评论 (1)

我都没有用过这个东西呢
android培训
点赞  2012-5-3 15:13
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复