ad9850 例程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//Fout=调制频率控制字*SYSCLK/2的32次方(SYSCLK=50M) 50M=2faf080 2的32次方=100 000 000 1K=3e8对应的调制频率控制字=14f8b
//
#include<reg52.h>
#define uchar unsigned char //这里用"uchar"代替"unsigned char","uchar"用来定义无符号字符型数。
#define uint unsigned int//"uint"用来定义无符号整型数。
sbit w_clk1= P1^0;//AD9850_1的将8bit的频率控制字加载进入数据锁存器上升沿有效
sbit fq_ud1=P1^1; //AD9850_1将40bit的控制字加载进入相位累加器上升沿有效
0x0e,0x6a,0xf9,0x0f,0xba,0x84,0x11,0x0a,0x0f,0x12,0x59,0x9a,0x13,0xa9,0x25,
0x14,0xf8,0xb0,0x16,0x48,0x3b,0x17,0x97,0xc6,0x18,0xe7,0x51,0x1a,0x36,0xdc};
DDSLE_1=1;
// NOP();
// NOP();
P1=0;
// w_clk2=1;
DDSLE_1=0;
}
void AD98502_scpl(uint AD9850_sc) //将32bit的频率数据加载到AD9850_2
{
uint s=0; //临时变量
w_clk2= 0;//将16bit的0的频率数据加载进入AD9850_2的数据锁存器上升沿有效
P1=0;
w_clk1= 1;
w_clk1= 0;
w_clk1= 1;
w_clk1=0;
DDSLE_1=0;
for(AD9850_sccs=0;AD9850_sccs<3;AD9850_sccs++)
{
s=AD9850_sccs+ AD9850_sc*3;
w_clk1= 0;//将8bit的频率数据加载进入AD9850_1的数据锁存器上升沿有效
AD98502_kzz();
while(1) //重复输出1-20KHz的波形
{
for(pl=0;pl<20;pl++)
{
AD98501_scpl(x);
AD98502_scpl(x);
Delay(500);
}
}
}
*输入:无
*输出:无
***********************************************************************/
void AD9850_Rset(void) //AD9850复位
{
Rset1= 0;//AD9850_1的复位上升沿有效
Rset1= 1;
sbit Rset1= P1^2;//AD9850_1的复位上升沿有效
sbit w_clk2 =P1^4 ;//AD9850_2的将8bit的频率控制字加载进入数据锁存器上升沿有效
sbit fq_ud2 =P1^5; //AD9850_2的40bit的控制字加载进入相位累加器上升沿有效
sbit Rset2 =P1^6; //AD9850_1的复位上升沿有效
*名称: Delay()
*功能:延时,延时时间为10ms * del。这是通过软件延时,有一定误差。
*输入: del
*输出:无
***********************************************************************/
void Delay(uint del)
DDSLE_1=1;
P1=s;
w_clk2= 1;
DDSLE_1=0;
}
fq_ud2=0;
fq_ud2=1;
AD9850_sc=0;
}
void Main(void)
{
uint pl=0;
uint x=0;
P0=0;
P1=0;
AD9850_Rset(); //复位AD9850
AD98501_kzz(); //制AD9850控制字
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++) //这个是通过软件仿真得出的数
;
}
/********************************************************************
*名称: Main()
*功能:实现灯的闪烁
DDSLE_1=1;
P1=AD9850}
fq_ud1=0;
fq_ud1=1;
AD9850_sc=0;
}
void AD98502_kzz(void) //将8bit的频率控制字加载到AD9850_2
{
// w_clk2= 0;//将8bit的频率控制字加载进入AD9850_2的数据锁存器上升沿有效
uint AD9850_kz=0; //AD9850_1的8bit的频率控制字
uint AD9850_sc=0; //AD9850_1的8bit的频率数据
uint AD9850_sccs=0; //AD9850_1的8bit的频率数据传输的次数
/********************************************************************
DDSLE_1=1;
P1=0;
w_clk2= 1;
w_clk2= 0;
w_clk2= 1;
w_clk2=0;
DDSLE_1=0;
for(AD9850_sccs=0;AD9850_sccs<3;AD9850_sccs++)
{
s=AD9850_sccs+ AD9850_sc*3;
w_clk2= 0;//AD9850_1的将8bit的频率数据加载进入数据锁存器上升沿有效
P1=0;
w_clk1= 1;
DDSLE_1=0;
}
void AD98501_scpl(uint AD9850_sc) //AD9850_1的将32bit的频率数据加载
{
uint s=0; //临时变量
w_clk1= 0;//将16bit的0的频率数据加载进入AD9850_1的数据锁存器上升沿有效
DDSLE_1=1;
Rset1= 0;
Rset2= 0;//AD9850_2的复位上升沿有效
Rset2= 1;
Rset2= 0;
}
void AD98501_kzz(void) //将8bit的频率控制字加载到AD9850_1
{
w_clk1= 0;//将8bit的频率控制字加载进入AD9850_1的数据锁存器上升沿有效
DDSLE_1=1;
sbit DDSLE_1 =P1^7; //AD9850的数据锁存器控制端上升沿有效
uchar code AD9850[61]={0,0x01,0x4f,0x8d,0x02,0x9f,0x16,0x03,0xee,0xa1,0x05,0x3e,0x2c,0x06,0x8d,0xb7,
0x07,0xdd,0x42,0x09,0x2c,0xcd,0x0a,0x7c,0x58,0x0b,0xcb,0xe3,0x0d,0x1b,0x6e,
//
#include<reg52.h>
#define uchar unsigned char //这里用"uchar"代替"unsigned char","uchar"用来定义无符号字符型数。
#define uint unsigned int//"uint"用来定义无符号整型数。
sbit w_clk1= P1^0;//AD9850_1的将8bit的频率控制字加载进入数据锁存器上升沿有效
sbit fq_ud1=P1^1; //AD9850_1将40bit的控制字加载进入相位累加器上升沿有效
0x0e,0x6a,0xf9,0x0f,0xba,0x84,0x11,0x0a,0x0f,0x12,0x59,0x9a,0x13,0xa9,0x25,
0x14,0xf8,0xb0,0x16,0x48,0x3b,0x17,0x97,0xc6,0x18,0xe7,0x51,0x1a,0x36,0xdc};
DDSLE_1=1;
// NOP();
// NOP();
P1=0;
// w_clk2=1;
DDSLE_1=0;
}
void AD98502_scpl(uint AD9850_sc) //将32bit的频率数据加载到AD9850_2
{
uint s=0; //临时变量
w_clk2= 0;//将16bit的0的频率数据加载进入AD9850_2的数据锁存器上升沿有效
P1=0;
w_clk1= 1;
w_clk1= 0;
w_clk1= 1;
w_clk1=0;
DDSLE_1=0;
for(AD9850_sccs=0;AD9850_sccs<3;AD9850_sccs++)
{
s=AD9850_sccs+ AD9850_sc*3;
w_clk1= 0;//将8bit的频率数据加载进入AD9850_1的数据锁存器上升沿有效
AD98502_kzz();
while(1) //重复输出1-20KHz的波形
{
for(pl=0;pl<20;pl++)
{
AD98501_scpl(x);
AD98502_scpl(x);
Delay(500);
}
}
}
*输入:无
*输出:无
***********************************************************************/
void AD9850_Rset(void) //AD9850复位
{
Rset1= 0;//AD9850_1的复位上升沿有效
Rset1= 1;
sbit Rset1= P1^2;//AD9850_1的复位上升沿有效
sbit w_clk2 =P1^4 ;//AD9850_2的将8bit的频率控制字加载进入数据锁存器上升沿有效
sbit fq_ud2 =P1^5; //AD9850_2的40bit的控制字加载进入相位累加器上升沿有效
sbit Rset2 =P1^6; //AD9850_1的复位上升沿有效
*名称: Delay()
*功能:延时,延时时间为10ms * del。这是通过软件延时,有一定误差。
*输入: del
*输出:无
***********************************************************************/
void Delay(uint del)
DDSLE_1=1;
P1=s;
w_clk2= 1;
DDSLE_1=0;
}
fq_ud2=0;
fq_ud2=1;
AD9850_sc=0;
}
void Main(void)
{
uint pl=0;
uint x=0;
P0=0;
P1=0;
AD9850_Rset(); //复位AD9850
AD98501_kzz(); //制AD9850控制字
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++) //这个是通过软件仿真得出的数
;
}
/********************************************************************
*名称: Main()
*功能:实现灯的闪烁
DDSLE_1=1;
P1=AD9850}
fq_ud1=0;
fq_ud1=1;
AD9850_sc=0;
}
void AD98502_kzz(void) //将8bit的频率控制字加载到AD9850_2
{
// w_clk2= 0;//将8bit的频率控制字加载进入AD9850_2的数据锁存器上升沿有效
uint AD9850_kz=0; //AD9850_1的8bit的频率控制字
uint AD9850_sc=0; //AD9850_1的8bit的频率数据
uint AD9850_sccs=0; //AD9850_1的8bit的频率数据传输的次数
/********************************************************************
DDSLE_1=1;
P1=0;
w_clk2= 1;
w_clk2= 0;
w_clk2= 1;
w_clk2=0;
DDSLE_1=0;
for(AD9850_sccs=0;AD9850_sccs<3;AD9850_sccs++)
{
s=AD9850_sccs+ AD9850_sc*3;
w_clk2= 0;//AD9850_1的将8bit的频率数据加载进入数据锁存器上升沿有效
P1=0;
w_clk1= 1;
DDSLE_1=0;
}
void AD98501_scpl(uint AD9850_sc) //AD9850_1的将32bit的频率数据加载
{
uint s=0; //临时变量
w_clk1= 0;//将16bit的0的频率数据加载进入AD9850_1的数据锁存器上升沿有效
DDSLE_1=1;
Rset1= 0;
Rset2= 0;//AD9850_2的复位上升沿有效
Rset2= 1;
Rset2= 0;
}
void AD98501_kzz(void) //将8bit的频率控制字加载到AD9850_1
{
w_clk1= 0;//将8bit的频率控制字加载进入AD9850_1的数据锁存器上升沿有效
DDSLE_1=1;
sbit DDSLE_1 =P1^7; //AD9850的数据锁存器控制端上升沿有效
uchar code AD9850[61]={0,0x01,0x4f,0x8d,0x02,0x9f,0x16,0x03,0xee,0xa1,0x05,0x3e,0x2c,0x06,0x8d,0xb7,
0x07,0xdd,0x42,0x09,0x2c,0xcd,0x0a,0x7c,0x58,0x0b,0xcb,0xe3,0x0d,0x1b,0x6e,