新闻中心

EEPW首页>嵌入式系统>设计应用> A7105(2.4G)与STC89C52单片机无线收发程序(接收程序)

A7105(2.4G)与STC89C52单片机无线收发程序(接收程序)

作者: 时间:2016-11-27 来源:网络 收藏

//设置为接收模式
void A7105_Entry_RX(void)
{
A7105_Write_Command(CMD_RX);
}
//设置为发射模式
void A7105_Entry_TX(void)
{
A7105_Write_Command(CMD_TX);
}
//复位A7105
void A7105_Reset_Chip(void)
{
A7105_Write_Register(MODE_REG,0x00);
}

void A7105_Reset_RX_FIFO(void)
{
A7105_Write_Command(CMD_RX_FIFO_RESET);
}

void A7105_Reset_TX_FIFO(void)
{
A7105_Write_Command(CMD_TX_FIFO_RESET);
}
//写寄存器
void Write_Register(uchar bits,uchar value)
{
uchar i;
for(i=0;i {
if(value&0x80)
SDIO=1;
else
SDIO=0;
SCK=1;

SCK=0;
value<<=0x01;
}
}
//读寄存器
uchar Read_Register(void)
{
uchar i,temp=0;
SDIO=1;
for(i=0;i<8;i++)
{
if(SDIO)
temp=(temp<<1)|0x01;
else
temp<<=0x01;
SCK=1;
SCK=0;
}
return temp;
}
//A7105写指令
void A7105_Write_Command(uchar cmd)
{
SCS=0;
Write_Register(0x04,cmd);
SCS=1;
}
//A7105写数据
void A7105_Write_Register(uchar addr,uchar value)
{
SCS=0;
addr|=0x00;
Write_Register(0x08,addr);
Write_Register(0x08,value);
SCS=1;
}
//A7105读数据
uchar A7105_Read_Register(uchar addr)
{
uchar temp=0;
SCS=0;
addr|=0x40;
Write_Register(0x08,addr);
temp=Read_Register();
SCS=1;
return temp;
}
//A7105写ID
void A7105_Write_ID(void)
{
SCS=0;
Write_Register(0x08,ID_DATA_REG);

Write_Register(0x08,ID_CODE0);
Write_Register(0x08,ID_CODE1);
Write_Register(0x08,ID_CODE2);
Write_Register(0x08,ID_CODE3);
SCS=1;

A7105_Read_ID(Read_ID);
}
//A7105读ID
void A7105_Read_ID(uchar *read_prt)
{
SCS=0;
Write_Register(0x08,(ID_DATA_REG|0x40));
SDIO=1;
*read_prt++=Read_Register();
*read_prt++=Read_Register();
*read_prt++=Read_Register();
*read_prt++=Read_Register();
SCS=1;
}

//A7105从FIFO读取数据
void A7105_Read_DATA_From_FIFO(void)
{
uchar i,temp=0;
SCS=0;
Write_Register(0x08,FIFO_DATA_REG|0x40);
for(i=0;i RX_DATA_Buffer[i]=Read_Register();
SCS=1;
}

//A7105校准
void A7105_Calibration(void)
{
uchar temp;
uchar fb,fbcf;
A7105_Entry_Stdy();//校准必须在待机模式下进行
A7105_Write_Register(CALIBRATION_REG,0x01);
do
{
temp=A7105_Read_Register(CALIBRATION_REG);
temp&=0x01;
}while(temp);
temp=A7105_Read_Register(IF_CALIBRATION1_REG);
fb=temp&0x0f;
fbcf=(temp>>4)&0x01;
if(fbcf==1)
{
LED=0;
}
A7105_Write_Register(VCO_CURRENT_CAL_REG,0x13);
A7105_Write_Register(VCO_SINGLE_BAND_CAL1_REG,0x09);

}
//配置A7105
void A7105_Config_Chip(void)
{
uchar i;

//0x00 mode register, for reset
//0x05 fifo data register
//0x06 id code register
//0x23 IF calibration II, only read
//0x32 filter test register

for(i=0x01;i<=0x04;i++)
A7105_Write_Register(i,A7105_Default_Par[i]);
for(i=0x07;i<=0x22;i++)
A7105_Write_Register(i,A7105_Default_Par[i]);
for(i=0x24;i<=0x31;i++)
A7105_Write_Register(i,A7105_Default_Par[i]);
}
//主函数
void main(void)
{
uchar i;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;

Init_A7105();
delay_ms(500);
A7105_Entry_Stdy();
while(1)
{

A7105_Setup_Channel(100-1);//接收频率必须减1否则对不上码

A7105_Setup_Wpll();
A7105_Entry_RX();
delay_us(150);
while(GPIO1);
//P0=A7105_Read_Register(0x03);
A7105_Read_DATA_From_FIFO();
for(i=0;i<64;i++)
{
P0=RX_DATA_Buffer[i];
delay_ms(300);
}
A7105_Entry_Stdy();
}
}


上一页 1 2 下一页

评论


技术专区

关闭