//单片机STC15L104E ADF4351 使稳定2700MHz-3000MHz(步进1M) REF = 30MHz
#include<reg51.h>
//请根据器件自己映射端口列表
sbit LE=P3^3;
sbit DATA=P3^2;
sbit CLK=P3^4;
sfr P3M0=0xb2;
sfr P3M1=0xb1;
//可编程延时
void delay(unsigned int i)
{
unsigned int j;
for(j=0;j<i;j++);
}
//ADF4351初始化
void ADF4351_INIT()
{ SCON=0X50;
TMOD=0X21;
P3M1=0X00;
P3M0=0X1C;
//请根据自己的MCU添加额外的初始化语句
}
//串行数据传送函数
void ADF4351_data_input(unsigned long int all_data)
{
unsigned long int temp;
unsigned int i;
temp=0x80000000; //从高位开始
LE=0;
CLK=0;
DATA=1;
delay(10);
for(i=0;i<32;i++) //32位数据配置
{
CLK=0;
delay(10);
if(all_data&temp) //注意位与&与&&的区别
{
DATA=1; //不为0
}
else {
DATA=0; //为0
}
temp=temp>>1;
delay(10);
CLK=1;
delay(10);
}
CLK=0;
delay(10);
LE=1; //保存配置
DATA=1;
}
//ADF4351配置函数
void ADF4351_control()
{
ADF4351_data_input(0x00580005); // R5
ADF4351_data_input(0x0080803C); // R4
ADF4351_data_input(0x000004B3);// R3
ADF4351_data_input(0x18064E42);// R2
ADF4351_data_input(0x08008009);// R1
ADF4351_data_input(0x052D0000);// R0
LE=1;
CLK=0;
DATA=1;
}
//主循环
void main()
{
unsigned long int temp1;
unsigned int i1;
i1=0;
temp1=0x052D0000; //2650M的初始频率
delay(4000);
ADF4351_INIT(); //初始化程序
delay(4000);
ADF4351_control(); //寄存器配置程序
delay(4000);
for(;;) //死循环
{
for(;temp1<0X5D18000;) //2700M>3000M循环
{
ADF4351_data_input(temp1);// R0
temp1=temp1+0x8000;
// delay(100);
}
for(;temp1>0X52C8000;) //2700M<3000M循环
{
ADF4351_data_input(temp1);// R0
temp1=temp1-0x8000;
// delay(100);
}
}
}
评论1