最近用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
}
}