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

📄 正弦波可出来(外部更新可用).c

📁 AD9852的单音频产生波形程序 加载失时钟是外部 设置的
💻 C
字号:
#include <C8051F410.h>
#include<math.h>
									//注意
unsigned char ADDR;					//// 所有函数均使用ADDR和DATA
unsigned char DATA[6];			   ////	 函数不带参数传输


#define N 4	   //倍频数
#define CLK 50 //外部时钟
sbit IO_RES=P2^6;  //A2 //高电平激活,在下一个指令周期开始应该将此置为低电平(17) 
sbit SDIO=P2^1;	   //A0(第19脚)
sbit IO_UD=P2^2;   //(第20脚)
sbit SCLK=P2^3;    //(第21脚);//数据上升沿被装入 
sbit _CS=P2^4;      //(第22脚)//低电平激活  
//sbit OSK=P1^5;      
sbit RESET=P2^5;   //(71)
//sbit FSK_BPSK=P1^7;
//*********************************
void oscill();
void delayms(unsigned char ms);
void DDS_w_d();
void initial_AD9852();
void DDS_w_f(unsigned long i);
void DDS_w_f1(unsigned long i);
void DDS_w_f2(unsigned long i);

int fc;
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;

//*********************88
void main(){
     fc=N*CLK;//单位是MHZ
           oscill();
          P2MDOUT   = 0xff;
           initial_AD9852() ;	
	
			
			

			ADDR=2;
				DATA[5]=0x09;
	    DATA[4]=0x99;
	    DATA[3]=0x99;
	    DATA[2]=0x99;
		DATA[1]=0x99;
	    DATA[0]=0x99;
	    DDS_w_d();
			while(1);
				}
		


//*********************888
void delayms(unsigned char ms)
{while(ms--);}
//****************************
void DDS_w_d()	   //根据已有的地址ADDR和DATA 写数据到AD9852
{	char num,i;	
	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_RES=0;
	SCLK=1;	
//	IO_UD=0;
	IO_RES=1;
	delayms(10);
	IO_RES=0;
	


	delayms(50);
	IO_RES=0;
  //I/O输入,数据即可在上升沿输入近来
	temp=ADDR; 
	for(i=7;i>=0;i--) 
	{		
		SCLK=0;
		delayms(10);
		SDIO=temp7;
		SCLK=1;
	    delayms(10);
		temp<<=1;
					
	} 
	for(;num>0;num--)
	{	
		temp=DATA[num-1];
		for(i=7;i>=0;i--)
		{	
			SCLK=0;delayms(10);
			SDIO=temp7;	
			SCLK=1;
			delayms(10);
			temp<<=1;	
		}
	}
	IO_UD=1;
	IO_UD=0;
	_CS=1;
	
}

//***********************8888
void initial_AD9852()  //初始化AD9852
{
	DATA[3]=0x04;
	DATA[2]=0x44;
	DATA[1]=0x00;
	DATA[0]=0x00;
	ADDR=7;///////////////////////////
	RESET=1;
	delayms(50);
	RESET=0;
	DDS_w_d();
	delayms(50);	
}
//*******************************888
void DDS_w_f(unsigned long i)	 //写频率到ADDR//ADDR=2或3
{
	/*//FTW = (Desired Output Frequency × 2N)/SYSCLK
	unsigned long j1,j2;
	 double k;
	int k;
	k=i*281474976/fc;
    j1=k/167777216;
    j2=k%167777216;

	DATA[0]=j2;
	j2>>=8;
	DATA[1]=j2;
	j2>>=8;
	DATA[2]=j2;

	DATA[3]=j1;
	j1>>=8;
	DATA[4]=j1;
	j1>>=8;
	DATA[5]=j1;


delayms(1);*/
	
//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();	*///(原来)
		DATA[5]=0x01;
	    DATA[4]=0x99;
	    DATA[3]=0x99;
	    DATA[2]=0x99;
		DATA[1]=0x99;
	    DATA[0]=0x99;
	    DDS_w_d();




}
//***************************88888888
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);
}
//****************************88
//*******************************410初始化程序
void oscill(){  CLKSEL = 0x00;//选择内部振荡方式
               //CLKSEL = 0x01;//选择外部振荡方式 
    OSCICN    = 0x87;
PCA0MD    &= ~0x40;//关开门狗
    XBR1      = 0x40;
}
//***************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -