基于DDS多功能信号发生器原理图初步完成,但C51控制AD9850等C程序不怎么会写,请教C高手!加q:7436778

发布网友 发布时间:2022-04-27 00:09

我来回答

2个回答

热心网友 时间:2023-11-13 09:06

# include <reg51.h>
# include <stdio.h>
# include <intrins.h>
sbit ad9850_w_clk =P1^5; //P2.2口接ad9850的w_clk脚/PIN7
sbit ad9850_fq_up =P1^4; //P2.1口接ad9850的fq_up脚/PIN8
sbit ad9850_rest =P1^3; //P2.0口接ad9850的rest脚/PIN12
sbit ad9850_bit_data =P1^6; //P1.7口接ad9850的D7脚/PIN25

//***************************************************//
// ad9850复位(串行模式) //
//---------------------------------------------------//
void ad9850_reset_serial()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信号
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
//w_clk信号
ad9850_w_clk=0;
ad9850_w_clk=1;
ad9850_w_clk=0;
//fq_up信号
ad9850_fq_up=0;
ad9850_fq_up=1;
ad9850_fq_up=0;
}

//***************************************************//
// 向ad9850中写命令与数据(串行) //
//---------------------------------------------------//
void ad9850_wr_serial(unsigned char w0,double frequence)
{
unsigned char i,w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/125;//适合125M晶振
//如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//写w1数据
w=(y>>24);
for(i=0;i<8;i++)
{
ad9850_bit_data=(w>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
//写w0数据
w=w0;
for(i=0;i<8;i++)
{
ad9850_bit_data=(w>>i)&0x01;
ad9850_w_clk=1;
ad9850_w_clk=0;
}
//***************************************************//
// 测试程序1000Hz //
//---------------------------------------------------//
main()
{
P0=0x00;
P1=0x00;
P2=0x00;
P3=0x00;
//---------------------------------------------------//
//---------------------------------------------------//

ad9850_reset_serial();
ad9850_wr_serial(0x08,100000000);//串行写2500Hz程序
//---------------------------------------------------//
while(1)
{
}
}

热心网友 时间:2023-11-13 09:07

求电路原理图

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com