文章发表于: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);
}
}
文章评论(0条评论)
登录后参与讨论