• 大小: 11KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: AD9833  51单片机  

资源简介

AD9833的51单片机驱动程序,注释详尽,书写规范整洁。

资源截图

代码片段和文件信息

#include 
#include 
#include 
/********************************************/
sbit ad9833_sdata =P1^4;
sbit ad9833_sclk =P1^3;
sbit ad9833_fsync =P3^5;
/**************向AD9833写16位数据****************/
void write_ad9833_d16(unsigned int dat16)
{
 int ii;
 ad9833_sclk=1;
 ad9833_fsync=1;
 ad9833_fsync=0;
 for(ii=0;ii<16;ii++)                //写16位数据
  {
   ad9833_sdata=dat16 & 0x8000;   //获取最高位
   ad9833_sclk=0;
   ad9833_sclk=1;
   dat16=dat16<<1;
  }
 ad9833_fsync=1;
}
/***************设置AD9833工作模式*****************/
//frequence:频率值,单位Hz;
//Phase    :初相值
//FSELECT:频率寄存器选择0为频率寄存器0,1为频率寄存器1
//PSELECT:初相寄存器选择0为初相寄存器0,1为初相寄存器1
//WAVE_MODE:输出波形选择0为三角波,1为方波,2为方波2分频,3为正弦波
void ad9833_data(double frequenceunsigned int Phaseunsigned char FSELECTunsigned char PSELECTunsigned char WAVE_MODE )
{
 unsigned int frequence_LSBfrequence_MSB;
 unsigned int control_word;
 unsigned long frequence_long;
 
 frequence=frequence*268435456/25000000; //FREQ=f*2^28/f_MCLKAD9833晶振为25MHZ
 frequence_long=(unsigned long)frequence;
 frequence_LSB=frequence_long & 0x00003fff;//获取频率寄存器的低14位
 frequence_MSB=frequence_long >>14;        //获取频率寄存器的高14位

 if(FSELECT==0) //把数据设置到频率寄存器0
  {
   frequence_LSB=frequence_LSB|0x4000; //写FREQ0
   frequence_MSB=frequence_MSB|0x4000;
  }
 else
  {
   frequence_LSB=frequence_LSB|0x8000; //写FREQ1
   frequence_MSB=frequence_MSB|0x8000;
  }

 if(PSELECT==0) //把数据设置到相位寄存器0
  {
   Phase=Phase|0xC000;  //写PHASE0,110XXXXXXXXXXXXX
  }
 else
  {
   Phase=Phase|0xE000;  //写PHASE1,111XXXXXXXXXXXXX
  }

 write_ad9833_d16(0x0100); //0000000100000000.复位AD9833即RESET位为1
 write_ad9833_d16(0x2100); //0010000100000000.选择数据一次写入,B28位和RESET位为1
 write_ad9833_d16(frequence_LSB); //写入频率寄存器的低14位
 write_ad9833_d16(frequence_MSB); //写入频率寄存器的高14位
 write_ad9833_d16(Phase);         //写入初始相位

 control_word=0x2000;             //控制字先设B28=1;
 if(FSELECT==1) control_word=control_word | 0x0800; //0000100000000000选频率寄存器
 if(PSELECT==1) control_word=control_word | 0x0400; //0000010000000000选初相寄存器

 if(WAVE_MODE==0)       //输出三角波波形  
   control_word=control_word |0x0002;               //0000000000000010
 else if(WAVE_MODE==1)  //输出方波波形
   control_word=control_word |0x0028;               //0000000000101000
 else if(WAVE_MODE==2)  //输出方波2分频
   control_word=control_word |0x0020;               //0000000000100000
 write_ad9833_d16(control_word); //写入控制字
}

/*********************主程序***********************/
main()
{
 while(1)
  {
   ad9833_data(80000); //1KHz0初相频率寄存器0,初相寄存器0三角波输出
   ad9833_data(80001); //1KHz0初相频率寄存器0,初相寄存器0方波输出
   ad9833_data(100000002); //1KHz0初相频率寄存器0,初相寄存器0方波2分频输出
   ad9833_data(100000003); //1KHz0初相频率寄存器0,初相寄存器0正弦波输出
  }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         44  2014-12-27 16:51  AD9833.lnp

     文件       5255  2014-12-27 16:51  AD9833.LST

     文件       6834  2014-12-27 16:51  AD9833.M51

     文件       5268  2014-12-27 16:51  AD9833.OBJ

     文件       1232  2014-12-27 16:52  AD9833.Opt

     文件        306  2014-12-27 16:52  AD9833.plg

     文件       2030  2014-12-13 22:33  AD9833.Uv2

    .......      1233  2014-12-27 16:50  AD9833_Opt.Bak

     文件       5305  2014-12-27 16:51  AD9833

     文件       3135  2014-12-14 09:22  AD9833.c

----------- ---------  ---------- -----  ----

                30642                    10


评论

共有 条评论