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

📄 serial_ctrl.c

📁 凌阳单片机控制的DDS芯片AD9851(串行和并行控制方式)
💻 C
字号:
#include"spce061a.h"
#define W_CLK  0x0001
#define FQ_UD  0x0002
#define RESET  0x0004
#define serial_in 0x0008
#define A  0    //A与B口转换(0为A口)
unsigned long int ctrl_word;//32位控制字
unsigned int phase_word;//相位控制字
/****************写频率*************************/
void writef(unsigned long int Hz)
{
	
	ctrl_word=(unsigned long int)(Hz*35.7913941333);
}	
/*******************************************************/

/*********************写相位********************************/
void writep(unsigned int dec)
{
	phase_word=(unsigned int)dec*0.0888888888889;

}

//----------------串行写入(低位到高位)------------------------------
void serial_update()
{
	unsigned char i;
	cleario_bit(A,FQ_UD);	
	for(i=0;i<32;i++)//写频率控制字
	{   
		cleario_bit(A,W_CLK);
		if((ctrl_word>>i)&0x00000001)         //取出位
			setio_bit(A,serial_in);		 
		else
		   cleario_bit(A,serial_in);					    
	   setio_bit(A,W_CLK);	 	
	}
 //**********************************************   
	for(i=0;i<8;i++)//写W0
	{
//************写前三位控制字**************************		
		cleario_bit(A,W_CLK);		
		if(i==0)	
     	  setio_bit(A,serial_in);
     else if(i==1||i==2) 
    	  cleario_bit(A,serial_in); 
//*******************************************************

//*******************相位控制字**************************
     else 
       {
       	
       	if((phase_word>>(i-3))&0x0001)      
			setio_bit(A,serial_in);		 
		else
		   cleario_bit(A,serial_in);					    
	   setio_bit(A,W_CLK);	 	       	      	
       }
       	 
//********************************************************    
   	  
    	 setio_bit(A,W_CLK);  
	}			       
        setio_bit(A,FQ_UD); //频率更新
		
}
//-------------------------------------------------

void delay(unsigned int time)
{
	while(time--)
		*P_Watchdog_Clear=0x0001;
}
void initial(void)
{
	*P_SystemClock=C_Fosc_49M;
	setdir_bit(A, W_CLK+FQ_UD+RESET+serial_in);
	setattrib_bit(A,W_CLK+FQ_UD+RESET+serial_in);
	
	cleario_bit(A,W_CLK);
				
	setio_bit(A,RESET);//复位
	delay(2);
	cleario_bit(A,RESET);
//==================================================		
	setio_bit(A,W_CLK);//从并行方式转换到串行方式
	setio_bit(A,FQ_UD); 
	writef(1000);
    serial_update();
//==================================================
}


//*******************测试********************************
main()
{
	    initial();
	    writep(0);	 	   
	   	writef(10000);
		serial_update();
	    
}

	

		
		

⌨️ 快捷键说明

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