⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad9852_test.c

📁 AD9852的测试程序和原理图等一系列资料
💻 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 + -