AD9833产生正弦波,高手能不能帮忙看看程序
幅度在0~5v可调,频率暂且定为一个。能出来波形就行。
#include<stc12c54.h>
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit FSYNC=P2^7;
sbit SCLK=P3^7;
sbit SDATA=P1^0;
uchar WAVE,frequence;
void delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void write_ad9833_d16(uint x)
{
int i,w;
SCLK=1;
FSYNC=1;
SDATA=1;
FSYNC=0;
w=x; //写16位数据
for(i=0;i<16;i++)
{
SDATA=w&0x8000; //去频率字的最高位
SCLK=0;
SCLK=1;
w=w<<1; //频率控制字左移一位
}
FSYNC=1;
SCLK=0;
}
void output_Sinusoid(double frequence,uint frequence_SFR,uint WAVE_MODE,uint Phase)
{
int frequence_LSB,frequence_MSB,Phs_data;
double frequence_mid,frequence_DATA;
long int frequence_hex;
//计算频率的16进制值
frequence_mid=268435456/1;
frequence_DATA=frequence;
frequence_DATA=frequence_DATA/1000000;
frequence_DATA=frequence_DATA*frequence_mid;
frequence_hex=frequence_DATA;
frequence_LSB=frequence_hex;
frequence_LSB=frequence_LSB&0x3fff;
frequence_MSB=frequence_hex>>14;
frequence_MSB=frequence_MSB&0x3fff;
Phs_data=Phase|0xC000;
if(frequence_SFR==0)
{
frequence_LSB=frequence_LSB|0x4000;
frequence_MSB=frequence_MSB|0x4000;
write_ad9833_d16(0x0100);
write_ad9833_d16(0x2100);
write_ad9833_d16(frequence_LSB);
write_ad9833_d16(frequence_MSB);
write_ad9833_d16(Phs_data);
//write_ad9833_d16(0x2000);
}
if(frequence_SFR==1)
{
frequence_LSB=frequence_LSB|0x8000;
frequence_MSB=frequence_MSB|0x8000;
write_ad9833_d16(0x0100);
write_ad9833_d16(0x2100);
write_ad9833_d16(frequence_LSB);
write_ad9833_d16(frequence_MSB);
write_ad9833_d16(Phs_data);
//write_ad9833_d16(0x2800);
}
if(WAVE_MODE==0)
{
delayms(100);
write_ad9833_d16(0x2002);
}
if(WAVE_MODE==1)
{
delayms(100);
write_ad9833_d16(0x2028);
}
if(WAVE_MODE==2)
{
delayms(100);
write_ad9833_d16(0x2000);
}
}
void main()
{
output_Sinusoid(5000,0,2,0);
while(1)
{
}
}