原创 ad9954+8051

2009-3-20 09:52 1464 3 3 分类: MCU/ 嵌入式
全国赛我们组写的用51控制AD9954的程序,发上来给大家分享一下.

文章发表于:2007-11-16 16:04



#include<reg52.h>
#define PLL_M 6
#define Fclk  (20*1000000*PLL_M)   //时钟频率
#define uchar unsigned char
#define uint  unsigned int


sbit OSK="P1"^5; //
sbit PS0=P1^6;  //
sbit PS1=P1^7;  // RAM选择控制寄存器选择位 /////////自动扫描模式下必须保持0
/*********************************************/


/*********************************************/


sbit IO_UPDATE=P2^0;                            
sbit SDIO="P2"^1; //数据上升沿写入,下降沿读出
sbit SCLK="P2"^2;
sbit _CS=P2^3;
sbit SDO="P2"^4;      //可以不要
sbit IOSYNC="P2"^5;   //保持低电平
sbit RESET="P2"^6;   //保持低电平
sbit PWRDWNCTL="P2"^7;//保持低电平
             



void delay10ms()
{uchar i,j;
 for(i=248;i>0;i--)
 for(j=20;j>0;j--);
}



void AD9954_init()
{ IO_UPDATE=0; 
  RESET="0";
  PWRDWNCTL="0";
  IOSYNC="0";
  OSK="0";
   _CS=1;                                                   
  SDIO="0";


}



void run()
{
IO_UPDATE=0;
IO_UPDATE=0;
IO_UPDATE=0;
IO_UPDATE=1;
IO_UPDATE=1;
IO_UPDATE=1;


}



void write_a_byte(uchar  w_data)
{
 uchar i;
 for(i=0;i<8;i++)
  {
   SDIO=(w_data&0x80);
   w_data<<=1;
   SCLK="0";
   SCLK="0";
   SCLK="1";
   SCLK="1";
  }
}


//********************** 写控制字1 ****************************/


void write_CFR1(uchar w1,uchar w2,uchar w3,uchar w4)
{_CS=0;
 _CS=0;
 write_a_byte(0x00);
 write_a_byte(w1);
 write_a_byte(w2);
 write_a_byte(w3);
 write_a_byte(w4);
 _CS=1;
 _CS=1;
}
 
//********************** 写控制字2 ****************************/
  //*************  主要确定PLL倍频控制字M*********************/


void write_CFR2(uchar w1,uchar w2,uchar w3)
{_CS=0;
 _CS=0;
 write_a_byte(0x01);
 write_a_byte(w1);
 write_a_byte(w2);
 write_a_byte(w3);
 _CS=1;
 _CS=1;
}



//**********************写幅度转换字****************************/


void write_ASF(uchar w1,uchar w2)
{_CS=0;
 _CS=0;
 write_a_byte(0x02);
 write_a_byte(w1);
 write_a_byte(w2);
 _CS=1;
 _CS=1;
}


//**********************写幅度转换速度字****************************/



void write_ARR(uchar w1)
{_CS=0;
 _CS=0;
 write_a_byte(0x03);
 write_a_byte(w1);
 _CS=1;
 _CS=1;
}


//**********************写频率转换字FTW1****************************/


void write_FTW0(uchar w1,uchar w2,uchar w3,uchar w4)
{_CS=0;
 _CS=0;
 write_a_byte(0x04);
 write_a_byte(w1);
 write_a_byte(w2);
 write_a_byte(w3);
 write_a_byte(w4);
 _CS=1;
 _CS=1;
}


//**********************写相位偏移字****************************/


void write_POW0(uchar w1,uchar w2)
{_CS=0;
 _CS=0;
 write_a_byte(0x05);
 write_a_byte(w1);
 write_a_byte(w2);
 _CS=1;
}


//**********************写频率转换字2****************************


void write_FTW1(uchar w1,uchar w2,uchar w3,uchar w4)
{_CS=0;
 _CS=0;
 write_a_byte(0x06);


 write_a_byte(w1);
 write_a_byte(w2);
 write_a_byte(w3);
 write_a_byte(w4);
 _CS=1;
}



main()
{
 uint i;



 for(i=200;i>0;i--)
 delay10ms();


 AD9954_init();


while(1)
{
 for(i=200;i>0;i--)
 delay10ms();


 write_CFR1(0x02,0x00,0x02,0x00);
 
 write_CFR2(0x00,0x02,0x30);//  写PLL_M=6, 必不可少


 write_ASF(0x10,0x00);


 write_FTW0(0x01,0x00,0x00,0x00);


 write_POW0(0x00,0x01);


 run();
 while(1);


}



}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /1 下一条