📄 ad9851_driver.c
字号:
#include<c8051f020.h>
#include "initial.h"
#define Data_Port_DDS P6
#define REF_clk 30000000.0//DDS参考时钟输入频率30M;
sbit W_clk=P2^3; /*上升沿有效*/
sbit FQ_UD=P2^4; /*上升沿有效*/
sbit DDS_RES=P2^5; /*低电平有效*/
void AD9851_Init(void)
{
FQ_UD=0;
DDS_RES=1; // /*重启AD9851
delay(5);
W_clk=0;
// delay(5);
DDS_RES=0; // /*开始操作AD9851
}
////////////////////////////////////////////////////
//计算发送的频率和相位值并发送给单片机
///////////////////////////////////////////////////
void AD9851_DDS_Control(long Freq,uchar Phase)
{
long Freq_Data;
//long Freq_Data,d1; //////32位频率控制字
//float fl_data; //////d1和fl_data为通过频率Freq计算控制字的中间变量
uchar FData[5],i;
//uchar PData; /////////5位相位控制字
// d1=Freq<<8; //d1*256
// fl_data=d1/REF_clk;
Freq_Data=Freq*143; //得到频率控制字(加上面2的8次方,共2的32次方)
FData[4]=Freq_Data; ///////////// ,FData为char型,
FData[3]=Freq_Data>>8; /////////// ,数据保存到FData数组
FData[2]=Freq_Data>>16; ///////////// ,高8位丢失;
FData[1]=Freq_Data>>24; //////////////////
//PData=0;/*(Phase/360)*32; */
FData[0]=0x00; //6倍频开‘1’,并行工作‘0’,非掉电方式‘0’;
//PData=PData<<3;
//FData[0]=FData[0]|PData; ////////确定相位控制字以及工作方式;
FQ_UD=0;W_clk=0;DDS_RES=1;//复位;
delay(5);
DDS_RES=0;
for(i=0;i<5;i++)
{
Data_Port_DDS=FData[i];
W_clk=1;delay(5); //上升沿将数据写入;
W_clk=0;delay(5);
}
FQ_UD=1;//频率更新控制信号(上升沿将40位数据送入DDS;)
delay(5);
FQ_UD=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -