资源简介
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单片机的智能家居系统程序
相关资源
- 基于51单片机的智能家居系统程序
- 基于C51单片机音乐盒设计[1]
- 89C51单片机控制HT1621B驱动LCD(C程序)
- 51单片机 lcd1602测试C程序
- 基于51单片机LCDLM041L显示贪吃蛇小游戏
- 基于51单片机的串行通信程序
- 51单片机 pwm波产生.zip
- 《51单片机原理及应用:基于KeilC与
- 51单片机 红外循迹 红外避障小车 双
- 基于51单片机的等精度频率计
- 51单片机课程设计——智能电风扇
- 课程设计 51单片机温度PID调节打包k
- 51单片机多机通讯程序及仿真
- 三种方法将51单片机设置为115200波特率
- 51单片机实现交通灯压缩文件.rar
- 基于51单片机的温湿度控制程序
- 基于51单片机的智能电子秤设计-程序
- 基于51单片机的GPS全球定位系统的设计
- 基于51单片机的万年历设计-完整程序
- 基于51单片机的脉搏测量仪设计-完整
- 基于MCS-51单片机的智能 时钟控制系统
- 基于51单片机DS1302四位数码管可调时钟
- 基于51单片机的红外遥控转发器程序
- 51单片机串口通信并用数码管显示接收
- DS3231+12864 0.96oled 51单片机程序
- Proteus模拟基于51单片机的断电保护实
- 51单片机红外遥控时钟
- 基于51单片机的出租车计费器
- 51单片机多功能电子时钟代码
- 基于51单片机和LCD12864显示的多功能万
评论
共有 条评论