資源簡介
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
- 上一篇:網龍同理心測試-20min
- 下一篇:基于51單片機的智能家居系統程序
評論
共有 條評論