📄 ad9852.c
字号:
#include<reg52.h>
#include<math.h>
//注意
unsigned char ADDR; //// 所有函数均使用ADDR和DATA
unsigned char DATA[6]; //// 函数不带参数传输
#define N 4 //倍频数
#define CLK 50 //外部时钟
sbit IO_RES=P1^0; //A2
sbit SDIO=P1^1; //A0
sbit IO_UD=P1^2;
sbit SCLK=P1^3;
sbit _CS=P1^4;
sbit OSK=P1^5;
sbit RESET=P1^6;
sbit FSK_BPSK=P1^7;
bdata unsigned char temp;
sbit temp0=temp^0;
sbit temp1=temp^1;
sbit temp2=temp^2;
sbit temp3=temp^3;
sbit temp4=temp^4;
sbit temp5=temp^5;
sbit temp6=temp^6;
sbit temp7=temp^7;
void delayms(unsigned char ms)
{
unsigned char i;
for(;ms!=0;ms--)
for(i=0;i<255;i++)
;
}
void DDS_w_d() //根据已有的地址ADDR和DATA 写数据到AD9852
{
char num,i;
_CS=1;
SCLK=0;
if(ADDR==0||ADDR==1||ADDR==8||ADDR==9||ADDR==0x0b)
num=2;
else if(ADDR==0x0a)
num=1;
else if(ADDR==6)
num=3;
else if(ADDR==5||ADDR==7)
num=4;
else num=6;
_CS=0;
IO_UD=0;
temp=ADDR;
for(i=7;i>=0;i--)
{
SCLK=0;
SDIO=temp7;
SCLK=1;
temp<<=1;
}
for(;num>0;num--)
{
temp=DATA[num-1];
for(i=7;i>=0;i--)
{
SCLK=0;
SDIO=temp7;
SCLK=1;
temp<<=1;
}
}
IO_UD=1;
IO_UD=1;
IO_UD=0;
SCLK=0;
_CS=1;
}
void initial_AD9852() //初始化AD9852
{
DATA[3]=4;
DATA[2]=4;
DATA[1]=0;
DATA[0]=0x00;
ADDR=7;
RESET=1;
delayms(1);
RESET=0;
DDS_w_d();
delayms(1);
}
void DDS_w_f(unsigned long i) //写频率到ADDR//ADDR=2或3
{
//FTW = (Desired Output Frequency × 2N)/SYSCLK
double k;
unsigned long j;
//2^48/1M=281474976.710656
k=(2147483648/N*4/CLK);
k=k*512/15625;
k=k*i;
j=k/65536;
k=(k/65536-j)*65536;
DATA[2]=j;
j>>=8;
DATA[3]=j;
j>>=8;
DATA[4]=j;
j>>=8;
DATA[5]=j;
j=k;
DATA[0]=j;
j>>=8;
DATA[1]=j;
DDS_w_d();
}
void DDS_w_f1(unsigned long i) //写频率1
{
ADDR=2;
DDS_w_f(i);
}
void DDS_w_f2(unsigned long i) //写频率2
{
ADDR=3;
DDS_w_f(i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -