AD9850 驱动代码 STC15
AD9850.c
#include "AD9850.h"
#include "intrins.h"
ulong Fre_Max = 30000000;//最大频率
//***************************************************//
// ad9850复位(串行模式) //
//---------------------------------------------------//
void AD9850_Reset_Sreial(void)
{
AD9850_CLK = 0;
AD9850_FQ = 0;
//rest信号
AD9850_RST = 0;
AD9850_RST = 1;
AD9850_RST = 0;
//w_clk信号
AD9850_CLK = 0;
AD9850_CLK = 1;
AD9850_CLK = 0;
//fq_up信号
AD9850_FQ = 0;
AD9850_FQ = 1;
AD9850_FQ = 0;
}
//向ad9850中写命令与数据(串行)
void AD9850_Write_Serial(double frequence)
{
unsigned char i, w;
long int y;
double x;
x = 4294967295u / 125; //适合125M晶振
frequence = frequence / 1000000;
frequence = frequence * x;
y = frequence;
//写w4数据
w = (y >>= 0);
for(i = 0; i < 8; i++)
{
AD9850_DAT = (w >> i) & 0x01;
AD9850_CLK = 1;
AD9850_CLK = 0;
}
//写w3数据
w = (y >> 8);
for(i = 0; i < 8; i++)
{
AD9850_DAT = (w >> i) & 0x01;
AD9850_CLK = 1;
AD9850_CLK = 0;
}
//写w2数据
w = (y >> 16);
for(i = 0; i < 8; i++)
{
AD9850_DAT = (w >> i) & 0x01;
AD9850_CLK = 1;
AD9850_CLK = 0;
}
//写w1数据
w = (y >> 24);
for(i = 0; i < 8; i++)
{
AD9850_DAT = (w >> i) & 0x01;
AD9850_CLK = 1;
AD9850_CLK = 0;
}
//写w1数据
w = 0;
for(i = 0; i < 8; i++)
{
AD9850_DAT = (w >> i) & 0x01;
AD9850_CLK = 1;
AD9850_CLK = 0;
}
//移入始能
AD9850_FQ = 1;
AD9850_FQ = 0;
}
AD9850.h
#ifndef _AD9850_H
#define _AD9850_H
#include <STC15.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//引脚定义
sbit AD9850_RST=P1^4;
sbit AD9850_DAT=P1^5;
sbit AD9850_FQ =P1^6;
sbit AD9850_CLK=P1^7;
extern ulong Fre_Max;
void AD9850_Reset_Sreial(void);
void AD9850_Write_Serial(double frequence);
#endif