⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad9852.c

📁 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 + -