📄 ad9852_test.c
字号:
//AD9852测试程序
//**********************************************
#include<reg52.h>
#include<intrins.h> //包含右移
#include<math.h>
sbit UPDCLK = P0^0; //20 更新时钟,上升沿锁存数据到编程寄存器
sbit MRESET = P0^1; //71 主复位端,高电平有效复位
sbit PMODE = P0^2; //70 串并编程模式选择 0:串行 1:并行
sbit WRCLK = P0^3; //21 写端口数据 上升沿锁存数据
sbit RDCLK = P0^4; //22 读端口数据 高电平读
sbit F_B_H = P0^5; //29 低电平
sbit OSK = P0^6; //30
sbit DATACLK= P1^0; //高电平有效,选中数据锁存器,低电平锁存
sbit ADDRCLK= P1^1; //高电平有效,选中地址锁存器,低电平锁存
sbit CONCLK = P1^2; //高电平有效,选中外部控制端驱运器,低电平锁存
sbit PD = P1^4;
sbit EN = P1^5;
sbit SCLK = P1^6;
sbit SDATA = P1^7;
//unsigned char FWord[6]={0x00,0xDA,0x74,0x0D,0xA7,0x40}; //1MHz频率字寄存器
unsigned char FWord[6]={0x08,0x88,0x88,0x88,0x88,0x88}; //10MHz频率字寄存器
unsigned char Address; //寄存器地址
unsigned char PortReg; //控制端口寄存器
unsigned char MultReg; //乘法寄存器
unsigned char ModeReg; //工作模式寄存器
unsigned char PowerReg; //功率寄存器
void WriteData(unsigned char DataByte); //写字节数据
void WriteADDR(unsigned char DATAAddress); //写寄存器地址
void UpdataFWord(unsigned char *FWord);
void AD8320(unsigned char Gain);//AD8320增益控制
//*********************************
void main()
{
unsigned char n;
MultReg = 0x46; //乘法器
PortReg = 0x04; //控制端口
P0=0;
DATACLK=0;
ADDRCLK=0;
P0=0x06; //设置成并行模式,并复位
for(n=5;n>0;)
n--;
P0=0x04;
CONCLK =0; //锁存控制端口状态
//*************************
WriteADDR(0x1E); //写乘法器地址
WriteData(0x46); //初始化乘法器,打开倍速频器,倍频6x50=300Mhz
UpdataFWord(FWord);
WriteADDR(0x20); //反辛格函数滤波器地址
WriteData(0x60); //关闭反辛格函数滤波
WriteADDR(0x21); //幅度字高字节地址
WriteData(0xFF); //幅度字高字节
WriteADDR(0x22); //幅度字低字节地址
WriteData(0xFF);
AD8320(100); //AD8320增益控制
while(1);
}
//*********************************
//***频率字更新
void UpdataFWord(unsigned char *FWord)
{
WriteADDR(0x04);
WriteData(FWord[0]);//0x0f); //频率字最高字节
WriteADDR(0x05);
WriteData(FWord[1]);//0x45);
WriteADDR(0x06);
WriteData(FWord[2]);//0x45);
WriteADDR(0x07);
WriteData(FWord[3]);//0x45);
WriteADDR(0x08);
WriteData(FWord[4]);//0x45);
WriteADDR(0x09);
WriteData(FWord[5]);//0x00); //频率字最低字节
}
//*********************************
//***写入数据
void WriteData(unsigned char DataByte)
{
unsigned char bdata x,y;
x =DataByte;
y =0;
if(x&0x01) //数据格式旋转180
y=y|0x80; //由D7 D6 D5 D4 D3 D2 D1 D0
if(x&0x02) // D0 D1 D2 D3 D4 D5 D6 D7
y=y|0x40;
if(x&0x04)
y=y|0x20;
if(x&0x08)
y=y|0x10;
if(x&0x10)
y=y|0x08;
if(x&0x20)
y=y|0x04;
if(x&0x40)
y=y|0x02;
if(x&0x80)
y=y|0x01;
P0=y;
DATACLK=1; //锁存数据
DATACLK=0;
}
//*********************************
//***完整地址
void WriteADDR(unsigned char DATAAddress)
{
P0=DATAAddress;
ADDRCLK=1;
ADDRCLK=0;
P0=0x04;
CONCLK = 1;
WRCLK=1;
WRCLK=0;
CONCLK = 0;
}
//*********************************
void AD8320(unsigned char Gain)
{
unsigned char n,A;
A=Gain;
EN=0;
SCLK=0;
SDATA=0;
for(n=8;n>0;n--)
{
if((A&0x80)==0x80)
SDATA=1;
else
SDATA=0;
A=A<<1;
SCLK=1;
SCLK=0;
}
EN=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -