原创 AD9834程序

2007-9-10 21:25 4159 1 3 分类: MCU/ 嵌入式

/*****************************************************
AD9834波形产生程序
*****************************************************/
#include
#include
#include


sbit FSYNC_1=P1^0;
sbit SDATA_1=P1^1;
sbit SCLK_1=P1^2;
sbit FSYNC_2=P1^3;
sbit SDATA_2=P1^4;
sbit SCLK_2=P1^5;


#define FCLK 50
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long


/**************************
发送控制字
**************************/
void Send_Con(uint Con_word)
{
uchar i;
FSYNC_1=0;
for(i=0;i<16;i++)
{
SDATA_1=Con_word&0x8000;
Con_word<<=1;
SCLK_1=0;
SCLK_1=1;
}
FSYNC_1=1;
}
/***********************************************************************************
初始化函数:
-------------------------------------------------------------------
功能:软件位控制,IOUT正弦波,SIGNBITOUT方波,写FREQREG0,写PHASE0
Send_Con(0x2038)   一次性写FREQREG0
Send_Con(0x0038)   单独改写FREQREG0的LSB
Send_Con(0x1038)   单独改写FREQREG0的MSB
-------------------------------------------------------------------
功能:软件位控制,IOUT三角波写FREQREG0,写PHASE0
Send_Con(0x2002)   一次性写FREQREG0
Send_Con(0x0002)   单独改写FREQREG0的LSB
Send_Con(0x1008)   单独改写FREQREG0的MSB************************************************************************************/


/****************************
发送频率字
****************************/
void Send_Freq(uint Freq_word)
{
uchar i;
FSYNC_1=0;
for(i=0;i<16;i++)
{
SDATA_1=Freq_word&0x8000;
Freq_word<<=1;
SCLK_1=0;
SCLK_1=1;
}
FSYNC_1=1;
}


/*****************************
发送相位字
注:根据情况可设定入口参数,设置相位
*****************************/
void Send_Phase()
{
Send_Con(0xC000);   //设置初相位为0
}



/*******************************************************
设置频率值   Freq_value(value)=Freq_data(data)*FCLK/2^28
2^28=268435456=0x10000000
*******************************************************/
void main(ulong Freq_value)
{
ulong value1,value2;
uint LSB_D,MSB_D;
SCLK_1=1;
FSYNC_1=1;
value1=Freq_value;
value2=Freq_value;
LSB_D=(value1/0x4000)+0x4000;  //写FREQ0 REG 的LSB
MSB_D=(value2%0x4000)+0x4000;   //写FREQ0 REG 的MSB
Send_Con(0x2038);    //DDS初始化设置,IOUT正弦波,SIGNBITOUT方波,一次性写FREQREG0
Send_Freq(LSB_D);
Send_Freq(MSB_D);
}

文章评论2条评论)

登录后参与讨论

lianjun09 2010-5-4 15:15

楼主这程序,能把数值转换的地方写的更详尽一点吗,特别是这两句LSB_D=(value1/0x4000)+0x4000; //写FREQ0 REG 的LSB MSB_D=(value2%0x4000)+0x4000; //写FREQ0 REG 的MSB

ws5yz_942048903 2009-7-22 22:07

参考了,感谢!收获很大!
相关推荐阅读
yuanhaibin 2011-07-23 23:13
FPGA的GTP信号PCB布线要点
FPGA的GTP信号PCB布线要点千兆位级串行I/O技术有着极其出色的优越性能,但这些优越的性能是需要条件来保证的,即优秀的信号完整性。例如,有个供应商报告说,他们第一次试图将高速、千兆位级串行设计用...
yuanhaibin 2011-07-12 22:27
Win7下VC6.0 “打开工程”、“添加文件”导致崩溃问题
启动 打开文件 对话框,在 Visual c + + 中使用键盘快捷键或从 文件 菜单中将产生以下错误: 访问冲突 (0xC0000005) 在 0x5003eaed DEVSHL.DLL 中。...
yuanhaibin 2011-01-21 17:35
DDR2 SDRAM硬件设计中需要注意地方
DDR2 SDRAM硬件设计中需要注意地方   在XXX板的设计过程中,DDR2 SDRAM的设计,遇到了不少困惑,经过与其他人交流和查阅相关资料,基本完成了DDR2 SDRAM部分的设计。这里以MT...
yuanhaibin 2011-01-21 17:33
DDR2调试中的几个时钟的解释
DDR2调试中的几个时钟的解释 1. MCB需要三个基本时钟l  MCB system clocks ,memory controller的工作作时钟 和external memory device的...
yuanhaibin 2007-09-21 22:28
劝诫
        给学电子的同学们转一好帖,对照它试着掂量一下自己,克制自己浮躁的学习态度。确实,学技术的不能浮躁,不能眼高手低,应该注重基础。                     请不要做浮躁的电...
yuanhaibin 2007-09-14 22:25
FPGA开发软件Quartus7.1破解版
Quartus II7.1 PC版下载&&破解- [EDA相关]QuartusII更新快啊,喜欢体验新功能的要赶紧下了 ftp://ftp.altera.com/outgoing/re...
广告
EE直播间
更多
我要评论
2
1
广告
关闭 热点推荐上一条 /8 下一条