📄 dds9851.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 + -