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

📄 dds9851.c

📁 采用AD9851设计的一个产生50M 方波
💻 C
字号:
/************************************************************************
*文件名:DDS9851。C                                                     *
*功能:  高频实验箱DDS程序。                                            *
*作者:  杨乐                                                           *
*日期:  2009年1月21日                                                  *
************************************************************************/
#include <stdio.h >
#include <intrins.h >
#include "dds9851.h"
#include "FMAMTABLE.H"
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  delay1                                                       *
*功能:    延时                                                         *
*入口参数:无                                                           *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void delay1(void)
{
    unsigned char i;
	i = 255;
	for (;i;i--);
}
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  SetFreq                                                      *
*功能:    DDS频率设置                                                  *
*入口参数:double f,unsigned char p                                     *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void SetFreq(double f,unsigned char p ) //* f 为频率值,p phase */
{
	unsigned long a ;
	unsigned char W[5];

	if (p >= 32)
	   p = 0;
	W[0] = 0x01+(p<<3);
	/* 由频率计算相位阶距 */
	f *= 4294967296.0;
	a = f/MOS ;

	W[1] = a / 0x1000000;
	W[2] = (a / 0x10000) % 0x100;
	W[3] = (a / 0x100) % 0x100;
	W[4] = a % 0x100;

	outData(&W[0]);
}
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  Init_DDS                                                     *
*功能:    DDS初始化                                                    *
*入口参数:无                                                           *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void Init_DDS(void) 
{
	SetFreq(1000,0);
/*	unsigned long  a ;
	unsigned char W[5];

	// 相位初值为0,power up ,6倍频
	W[0] = 0x01;
    a = 1000.0;
	a *= 4294967296.0 ;
	a = a/MOS;

	W[1] = a / 0x1000000;
	W[2] = (a / 0x10000) % 0x100;
	W[3] = (a / 0x100) % 0x100;
	W[4] = a % 0x100;

	outData(&(W[0]));
*/
}

void outData(unsigned char * w)
{
	unsigned char i;

	DDS_FQ_UD = 0;

	for (i=0; i<5; i++)
	{
		_nop_();
	    DDS_W_CLK = 0;
		_nop_();
		_nop_();
		DDS_Data = w[i];
		_nop_();
		_nop_();
		DDS_W_CLK = 1;
		_nop_();
		_nop_();
	}

	DDS_FQ_UD = 1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	DDS_FQ_UD = 0;
}

/*
void SetAM(unsigned char * QUIT)
{
	unsigned char i,tmph,tmpl;

	SetReg(0,0,0,0x04,COMMAND);
	SetFreq(6500000,FREQ0);
	SelectFreqReg(0);
	while (!(*QUIT))
	{
		for (i  = 0 ; i< 36; i++)
		{
			tmph = (AmTable[i]>>8);
			tmpl = AmTable[i]&0x00FF;
			SetReg(0,0,tmph,tmpl,IQMOD);
		}
	}
}
*/
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  SetFM                                                        *
*功能:    DDS产生FM信号                                                *
*入口参数:unsigned char * QUIT                                         *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void SetFM(unsigned char * QUIT)
{
	int i;
	SetFreq(6500000,0);

	while (!(*QUIT))
	{
		for (i  = 0 ; i< 32; i++)
		{
			SetFreq(FmTable[i],0);
		}
	}
}
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  SetPSK                                                       *
*功能:    DDS产生PSK信号                                               *
*入口参数:unsigned char * QUIT                                         *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void SetPSK(unsigned char * QUIT)
{
	unsigned char W;

	SetFreq(200000,0);

	while (!(*QUIT))
	{
		W = 0x81;
		DDS_FQ_UD = 0;
		_nop_();
	    DDS_W_CLK = 0;
		_nop_();
		_nop_();
		DDS_Data = W;
		_nop_();
		_nop_();
		DDS_W_CLK = 1;
		_nop_();
		_nop_();
		DDS_FQ_UD = 1;    
		delay1();
		W = 0x01;
		DDS_FQ_UD = 0;
		_nop_();
	    DDS_W_CLK = 0;
		_nop_();
		_nop_();
		DDS_Data = W;
		_nop_();
		_nop_();
		DDS_W_CLK = 1;
		_nop_();
		_nop_();
		DDS_FQ_UD = 1;    
		delay1();
	}
}
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  SetASK                                                       *
*功能:    DDS产生ASK信号                                               *
*入口参数:unsigned char * QUIT                                         *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void SetASK(unsigned char * QUIT)
{

	SetFreq(500000,0);

	while (!(*QUIT))
	{
		SetFreq(000000,0);
		delay1();
		SetFreq(500000,0);
		delay1();
	}
}
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  SetFSK                                                       *
*功能:    DDS产生FSK信号                                               *
*入口参数:unsigned char * QUIT                                         *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void SetFSK(unsigned char * QUIT)
{
	
	while (!(*QUIT))
	{
		SetFreq(100000,0);
		_nop_();
		_nop_();
		SetFreq(50000,0);
		_nop_();
		_nop_();
	}
}


⌨️ 快捷键说明

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