logo资料库

信号发生器 AD9833程序.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
AD9833程序,信号发生器,正弦波,方波,三角波输出程序.txt # include # include # include /********************************************/ sbit ad9833_sdata =P1^0; sbit ad9833_sclk =P1^1; sbit ad9833_fsync =P1^2; /*****************定义全局变量*********************/ /*************************************************/ //延时程序 /**************************************************/ void delay(unsigned int m) { unsigned int n; for (n=0;n<=m;n++) { } } /*****************************************************/ /**向AD9833写16位数据,严格按照这个时序,不能随意修改否则必出错!**/ /*****************************************************/ void write_ad9833_d16(unsigned int x) { int i,w; ad9833_sclk=1; ad9833_fsync=1; ad9833_fsync=0; //写16位数据 w=x; for(i=0;i<16;i++) { ad9833_sdata=w&0x8000; ad9833_sclk=0; ad9833_sclk=1; w=w<<1; } ad9833_fsync=1; ad9833_sclk=0; } /**************************************************/ /*************计算AD9833的28位数据值***************/ /*****************************************************/ /**变量frequence就是频率值,单位Hz,比如输入100Hz,则 frequence为100,需要特别注意的是不能超过12MHz; /*****变量frequence_SFR是设置频率寄存器选择0为频率寄存器0,1为频率寄存器1;*******/ /*****变量WAVE_MODE是设置输出波形选择0为三角波,1为方波,2为正弦波;*******/ /*****变量Phase是设置波形相位值*******/ void ad9833_data(double frequence,unsigned int frequence_SFR,unsigned int WAVE_MODE,unsigned int Phase ) { int frequence_LSB,frequence_MSB,Phs_data; double frequence_mid,frequence_DATA; long int frequence_hex; /*********************************计算频率的16进制值***********************************/ frequence_mid=268435456/25;//适合25M晶振 //如果时钟频率不为25MHZ,修改该处的频率值,单位MHz ,AD9833最大支持25MHz frequence_DATA=frequence; frequence_DATA=frequence_DATA/1000000; frequence_DATA=frequence_DATA*frequence_mid; frequence_hex=frequence_DATA; //这个frequence_hex的值是32位的一个很大的数字,需要拆分成两个14位进行处 理; frequence_LSB=frequence_hex; //frequence_hex低16位送给frequence_LSB frequence_LSB=frequence_LSB&0x3fff;//去除最高两位,16位数换去掉高位后变成了14位 frequence_MSB=frequence_hex>>14; //frequence_hex高16位送给frequence_HSB frequence_MSB=frequence_MSB&0x3fff;//去除最高两位,16位数换去掉高位后变成了14位 /****************************************************************************/ /******************************相位值*************************************/ Phs_data=Phase|0xC000; 第 1 页
/*****************************************************************************/ AD9833程序,信号发生器,正弦波,方波,三角波输出程序.txt if(frequence_SFR==0) { frequence_LSB=frequence_LSB|0x4000; frequence_MSB=frequence_MSB|0x4000; //把数据设置到设置频率寄存器0 //使用频率寄存器0输出波形 /*************************************************/ write_ad9833_d16(0x0100); //复位AD9833,即RESET位为1 write_ad9833_d16(0x2100); //选择数据一次写入,B28位和RESET位为1 write_ad9833_d16(frequence_LSB); //L14,选择频率寄存器0的低14位数据输入 write_ad9833_d16(frequence_MSB); //H14 频率寄存器的高14位数据输入 write_ad9833_d16(Phs_data); //write_ad9833_d16(0x2000); /**设置FSELECT位为0,芯片进入工作状态,频率寄存器0输出波形**/ } /************************************************************************************/ if(frequence_SFR==1) { frequence_LSB=frequence_LSB|0x8000; //把数据设置到设置频率寄存器1 //设置相位 frequence_MSB=frequence_MSB|0x8000; //使用频率寄存器1输出波形 /*************************************************/ write_ad9833_d16(0x0100); //复位AD9833,即RESET位为1 write_ad9833_d16(0x2100); //选择数据一次写入,B28位和RESET位为1 write_ad9833_d16(frequence_LSB); //L14,选择频率寄存器1的低14位输入 write_ad9833_d16(frequence_MSB); //H14 频率寄存器1为 write_ad9833_d16(Phs_data); //write_ad9833_d16(0x2800); /**设置FSELECT位为0,设置FSELECT位为1,即使用频率寄存器1的值,芯片进入工作状 态,频率寄存器1输出波形**/ } //设置相位 /****************************************************************************************/ if(WAVE_MODE==0) { //频率寄存器输出三角波波形 /***************************************************/ delay(100000); write_ad9833_d16(0x2002); //设置MODE位为1,输出三角波模式 } /***************************************************/ if(WAVE_MODE==1) { //频率寄存器输出方波波形 /***************************************************/ delay(100000); write_ad9833_d16(0x2028); //设置OPBITEN位为1,方波输出模式 } /***************************************************/ if(WAVE_MODE==2) { //频率寄存器输出正弦波波形 /***************************************************/ delay(100000); write_ad9833_d16(0x2000); //设置MODE位为0,输出正弦波模式 } /***************************************************/ } /**************************************************/ 第 2 页
AD9833程序,信号发生器,正弦波,方波,三角波输出程序.txt /*********************主程序***********************/ /**************************************************/ main() { P0=0XFF; P1=0XFF; P2=0XFF; P3=0XFF; ad9833_data(100000,0,2,0 ); //100KHz,频率寄存器0,三角波输出 /* write_ad9833_d16(0x0100); //复位AD9833,即RESET位为1 write_ad9833_d16(0x2100); //选择数据一次写入,B28位和RESET位为1 write_ad9833_d16(0x69F1); //L14,选择频率寄存器0的低14位输入 write_ad9833_d16(0x4000); //H14 频率寄存器0为(两行组成28位数据表示1KHz) write_ad9833_d16(0x93E3); //L14选择频率寄存器1的低14位输入 write_ad9833_d16(0x8001); //H14 频率寄存器1为2KHz write_ad9833_d16(0x2000); //设置FSELECT位为0,芯片进入工作状态,频率寄存器0输出1KHz正弦波形 //write_ad9833_d16(0x2002); //设置MODE位为1,输出三角波模式 //write_ad9833_d16(0x2020); //设置OPBITEN位为1,方波输出模式 */ while(1) { delay(100000); } } 第 3 页
分享到:
收藏