资源简介
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单片机的智能家居系统程序
相关资源
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 51单片机PWM程序,占空比、周期可调整
- 51单片机多功能自行车测速仪
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 51单片机基于protues的几个仿真实例
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- C51单片机汇编指令查询、学习工具集
- 基于8051单片机的红外接收程序
- 51单片机频率计(很简单)
- 基于51单片机的智能温控器
- 基于51单片机的16*16点阵动态显示
- 基于51单片机的模数转换与数模转换
- 51单片机中使用ucos ii的优缺点转
- 51单片机中使用ucos ii的优缺点
- 8051单片机教程第二十七课:单片机几
- 8051单片机教程第二十六课:矩阵式键
- 适用于STC单片机和51单片机的SX1262驱动
- 基于51单片机的计算器(C51编写,有
- 51单片机大量源码
- 基于51单片机的交通信号灯程序
- GSM监控系统51单片机设计
- 51单片机定时器/计数器的结构和原理
- MCS-51单片机定时器和计数器区别的理
评论
共有 条评论