|
我用9850做的信号发生器,但是只输出100MHZ的波形,和晶振的频率一样。这是为什么呢?是硬件问题还是软件的问题。请各位大侠求救!!!!我用128做的,下面是我的程序,和硬件图!!大侠帮帮忙啊!!!
(原文件名:9850.jpg)
#include <iom128v.h>
#include <macros.h>
#include <RD_UseAVRPORTBit.h>
#define uint unsigned int
#define uchar unsigned char
#define data_port PORTD
#define ad9850_fq_up _PB0 //P2.1口接ad9850的fq_up脚/PIN8
#define ad9850_w_clk _PB1 //P2.2口接ad9850的w_clk脚/PIN7
#define ad9850_rest _PB2 //P2.0口接ad9850的rest脚/PIN12
//sbit ad9850_bit_data =P1^7; //P1.7口接ad9850的D7脚/PIN25
//P1为8位数据口
//***************************************************//
// ad9850复位(并口模式) //
//---------------------------------------------------//
void ad9850_reset()
{
ad9850_w_clk=0;
ad9850_fq_up=0;
//rest信号
ad9850_rest=0;
ad9850_rest=1;
ad9850_rest=0;
}
void ad9850_wr_parrel(unsigned char w0,double frequence)
{
unsigned char w;
long int y;
double x;
//计算频率的HEX值
x=4294967295/100;//适合100M晶振
//如果时钟频率不为40MHZ,修改该处的频率值,单位MHz !!!
frequence=frequence/1000000;
frequence=frequence*x;
y=frequence;
//写w0数据
w=w0;
data_port=w; //w0
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w1数据
w=(y>>24);
data_port=w; //w1
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w2数据
w=(y>>16);
data_port=w; //w2
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w3数据
w=(y>>8);
data_port=w; //w3
ad9850_w_clk=1;
ad9850_w_clk=0;
//写w4数据
w=(y>>=0);
data_port=w; //w4
ad9850_w_clk=1;
ad9850_w_clk=0;
//移入始能
ad9850_fq_up=1;
ad9850_fq_up=0;
}
void main()
{
DDRD=0xff;
DDRB|=0x07;
//---------------------------------------------------//
//并行写1000Hz程序
ad9850_reset();
ad9850_wr_parrel(0x00,1000);
//---------------------------------------------------//
while(1);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|