DDS初始化及AD9833写程序
0赞
发表于 6/27/2012 10:23:28 AM
阅读(3580)
AD9833是一款低功耗、可编程波形发生器,能够产生正弦波、三角波和方波输出。各种类型的检测、致动和时域反射(TDR) 应用都需要波形发生器。输出频率和相位可通过软件进行编程,调整简单。无需外部元件。频率寄存器为28位;时钟速率为 25 MHz,可以实现0.1 Hz的分辨率。同样,时钟速率为1 MHz时,AD9833可以实现0.004 Hz的分辨率。AD9833通过一个三 线式串行接口写入数据。该串行接口能够以最高40 MHz时钟速率工作,并且与DSP和微控制器标准兼容。该器件采用2.3 V至 5.5 V电源供电.
#includetypedef unsigned long ulong; sbit DDSCLK = P2^4; // P2_4,DDS 时钟信号 sbit DDSEN = P2^5; // P2_5,DDS 片选或者写数据有效信号 sbit DDSData =P2^5; // P2_6,DDS 数据信号 extern void DDSIni(); extern void LDelay(unsigned char DelayNum); extern void Fre_To_DDSData(unsigned char Fre); extern void SDelay(unsigned char DelayNum); extern void AD9833_reset(); extern void AD9833_writedata(unsigned int DDSdata); extern void Load_wave(unsigned int Contr_Reg_data,unsigned int Fre_MSBdata,unsigned int Fre_LSBdata,unsigned int Phs_data); //C Files #include "config.h" ///////////////////////////////////// /*函数描述:DDS 初始化 /*写入参数:无 /*返回参数:无 /* 根据硬件连接选通MCU 与AD9833 的数据线路;将AD9833 的内部数据进行清零 操作 *//////////////////////////////////// void DDSIni() { DDSEN=1; //DDSEN disable DDSCLK=1; //Clock high DDSData=0; AD9833_reset(); } ///////////////////////////////////// /*函数描述:长延迟 /*写入参数:Delaynum,延迟时间:Delaynum*1.6mS /*返回参数:无 *//////////////////////////////////// void LDelay(unsigned char DelayNum) { unsigned char Delay1p6mS=0XFF; while(DelayNum--) { while(Delay1p6mS--); } } ///////////////////////////////////// /*函数描述:短延迟 /*写入参数:Delaynum,延迟时间:不详 /*返回参数:无 *//////////////////////////////////// void SDelay(unsigned char DelayNum) { while(DelayNum--); } ///////////////////////////////////// /*函数描述:AD9833 写数据操作 /*写入参数:AD9833 控制字,16bit /*返回参数:无 标准时序 *//////////////////////////////////// void AD9833_writedata(unsigned int DDSdata) { unsigned char data_num=0; unsigned int DDSdata_temp; DDSdata_temp=DDSdata; DDSCLK=1; SDelay(4); DDSEN=0; //DDS able SDelay(4); for(data_num=0;data_num<16;data_num++) { if(DDSdata_temp & 0X8000 ) { DDSData=1; } else{ DDSData=0; } SDelay(5); DDSCLK=0; SDelay(5); DDSData=0; SDelay(5); DDSCLK=1; DDSdata_temp=DDSdata_temp<<1; if(data_num < 15) { SDelay(50); } } DDSEN=1; }
