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

📄 ad9854.c

📁 AD9854的C51控制程序
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
#include <string.h>

#define uchar unsigned char
#define uint  unsigned int

sbit RESET=P3^4;			// master reset of AD9854
sbit SPSEL=P3^5;			// serial/parrelel select pin
sbit FDATA=P2^7;			// multi-function pin for different modes
sbit ORAMP=P2^6;		    // output shape pin 
sbit WRITE=P3^6;			// write signal
sbit READ=P3^7;			    // read signal


uchar data0;
//延时程序
void AD9854_delay(int time)
{
    int i;
    for(i = 0; i < time; i++)
    {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    }
}

//复位
void AD9854_reset(void)
{
    reset=1;
	AD9854_delay(5000);
	reset=0;
}




//写一个字节
void AD9854_ParallelSendByte(uchar addr,uchar data1)
{
	P2=addr;
	P0=data1;
	WR_LOW=0;
	WR_LOW=1;
	
}


uchar AD9854_ParallelReadByte(uchar addr)
{
    uchar result;
    RD_LOW=1;
	P1=0xff;
    P1 = (addr & 0x3f);
    RD_LOW=0;
    result = P2;
    RD_LOW=1;
    return result;
}


//相位寄存器1控制字
void AD9854_ParallelSetPhase1(uchar *phase)
{ 
	data0=*phase;
    AD9854_ParallelSendByte(0x00,data0);
	AD9854_delay(5);
	data0=*(phase+1);
	AD9854_ParallelSendByte(0x01,data0);
	AD9854_delay(5);

}


//相位寄存器2控制字
void AD9854_ParallelSetPhase2(uchar *phase)
{ 
	data0=*phase;
    AD9854_ParallelSendByte(0x02, data0);
	AD9854_delay(5);
	data0=*(phase+1);
    AD9854_ParallelSendByte(0x03, data0);
	AD9854_delay(5);
}


//频率寄存器1控制字
void AD9854_ParallelSetFreq1(uchar *freq)
{
    uchar i,freq_addr;
	freq_addr=0x04;
	for(i=0;i<6;i++)
	{
	    data0=*(freq+i);
	    AD9854_ParallelSendByte(freq_addr+i,data0);
		AD9854_delay(5);
	}
}


//频率寄存器2控制字
void AD9854_ParallelSetFreq2(uchar *freq)
{
    uchar i,freq_addr,data0;
	freq_addr=0x0A;
	for(i=0;i<6;i++)
	{
	    data0=*(freq+i);
	    AD9854_ParallelSendByte(freq_addr+i, data0);
		AD9854_delay(5);
	}
}


//DELTA Frequency Word
void AD9854_ParallelSetDFW(uchar *delta)
{
    uchar i,delta_addr;
	delta_addr=0x10;
	for(i=0;i<6;i++)
	{
	    data0=*(delta+i);
	    AD9854_ParallelSendByte(delta_addr, data0);
		AD9854_delay(5);
	}
}


//内部时钟寄存器控制字
void AD9854_ParallelSetUDClk(uchar *uclk)
{
    uchar i,uclk_addr;
    uclk_addr=0x16;
    for(i=0;i<4;i++)
	{
	    data0=*(uclk+i);
	    AD9854_ParallelSendByte(uclk_addr,data0);
		AD9854_delay(5);
	}
}


//斜率寄存器控制字
void AD9854_ParallelSetRamp(uchar *ramp)
{
    uchar i,ramp_addr;
	ramp_addr=0x1A;
	for(i=0;i<3;i++)
	{
	    data0=*(ramp+i); 
	    AD9854_ParallelSendByte(ramp_addr,data0);
		AD9854_delay(5);
	}
}


//特殊功能寄存器
void AD9854_ParallelSetSpecialWord(uchar *SWord)
{
    uchar i,Special_addr;
	Special_addr=0x1D;
	for(i=0;i<4;i++)
	{
	    data0=*(SWord+i); 
	    AD9854_ParallelSendByte(Special_addr,data0);
		AD9854_delay(5);
	}
}


//输出振幅寄存器控制字 
void AD9854_ParallelSetOutkey(bit mark,uchar *key)
{
    uchar i,Outkey_addr;
	if(mark==0)
	  Outkey_addr=0x21;		//输出I振幅寄存器地址
	else
	  Outkey_addr=0x23;	    //输出Q振幅寄存器地址
	for(i=0;i<2;i++)
	{
	    data0=*(key+i); 
	    AD9854_ParallelSendByte(Outkey_addr,data0);
		AD9854_delay(5);
	}
}


//输出振幅斜率寄存器控制字
void ParallelSetOutkeyRamp(uchar Key_ramp)
{
    AD9854_ParallelSendByte(0x25, Key_ramp);
	AD9854_delay(5);
}


//QDAC
void AD9854_ParallelSetQDAC(uchar *QDAC)
{
    uchar i,QDAC_addr;
	QDAC_addr=0x26;
	for(i=0;i<2;i++)
	{
	    data0=*(QDAC+i); 
	    AD9854_ParallelSendByte(QDAC_addr, data0);
		AD9854_delay(5);
	}
}

//初始化
void Init9854(void)
{
    AD9854_reset();
	WR_LOW=1;
	RD_LOW=1;
}


void main(void)	
{
   uchar udclk[4]={0x00,0x00,0x09,0xc3};
   uchar mode1[4]={0x10,0x44,0x01,0x00};   
   uchar frequency1[6]={0x05,0x1E,0xB8,0x51,0xEB,0x85};
   
   uchar shape_key[2]={0x06,0x00};
   uchar *data4;  
   Init9854();
  /* uchar i;
   P0=0x00;
   Init9854();
   AD9854_ParallelSendByte(0x04,0xAA);
   AD9854_IOUpdate();
   P0=AD9854_ParallelReadByte(0x04);  */
   while(1)
   {
   data4=udclk;
   AD9854_ParallelSetUDClk(data4);
   data4=mode1;
   AD9854_ParallelSetSpecialWord(data4);
   data4=frequency1;
   AD9854_ParallelSetFreq1(data4);
   AD9854_delay(500);
   }
   
}	

⌨️ 快捷键说明

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