📄 test905slave.c
字号:
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>
#define WRITE_CONFIG 0x00
#define READ_CONFIG 0x10
#define WRITE_TX_DATA 0x20
#define READ_TX_DATA 0x21
#define WRITE_TX_ADDRESS 0x22
#define READ_TX_ADDRESS 0x23
#define READ_RX_DATA 0x24
#define CHANNEL_CONFIG 0x80
#define nop _nop_()
void SPIWrite(unsigned char);
unsigned char SPIRead(void);
void SPIWriteData(unsigned char,unsigned char,unsigned char*);
void SPIReadData(unsigned char,unsigned char,unsigned char*);
unsigned char correct(unsigned char*,unsigned char);
typedef union
{
struct
{
unsigned char ch_nol:8;
unsigned char ch_noh:1;
unsigned char hfreq_pll:1;
unsigned char pa_pwr:2;
unsigned char rx_red_pwr:1;
unsigned char auto_retran:1;
unsigned char byte1nouse:2;
unsigned char rx_afw:3;
unsigned char rx_afwnouse:1;
unsigned char tx_afw:3;
unsigned char tx_afwnouse:1;
unsigned char rx_pw:6;
unsigned char rx_pwnouse:2;
unsigned char tx_pw:6;
unsigned char tx_pwnouse:2;
unsigned char rx_address1:8;
unsigned char rx_address2:8;
unsigned char rx_address3:8;
unsigned char rx_address4:8;
unsigned char up_clk_freq:2;
unsigned char up_clk_en:1;
unsigned char xof:3;
unsigned char crc_en:1;
unsigned char crc_mode:1;
}bit_define;
unsigned char ConfigReg[10];
}UConfigRegister;
sbit TXEN=P1^0;
sbit PWR_UP=P1^1;
sbit TRX_CE=P1^2;
sbit CD=P1^3;
sbit DR=P1^4;
sbit AM=P1^5;
sbit SI=P1^6;
sbit SO=P1^7;
sbit CSN=P3^4;
sbit SCK=P3^5;
sbit LAMP=P2^0;
void main(void)
{
UConfigRegister TConfig;//,RConfig;
unsigned char tx_address[2];
unsigned char tx_data[10];
unsigned char rx_data[4];
unsigned int i;
unsigned char j;
for(j=0;j<3;j++)
{
LAMP=0;
for(i=0;i<10000;i++);
LAMP=1;
for(i=0;i<10000;i++);
}
TRX_CE=0;
TXEN=0;
PWR_UP=1;
// TMOD=0x01;
// TH0=0x00;
// TL0=0x00;
EA=0;
TConfig.ConfigReg[0]=0x6c;
TConfig.ConfigReg[1]=0x00;
TConfig.bit_define.pa_pwr=0x03;
// TConfig.bit_define.hfreq_pll=0x01;
TConfig.bit_define.tx_afw=0x02;
TConfig.bit_define.rx_afw=0x02;
TConfig.bit_define.tx_pw=0x0a;
TConfig.bit_define.rx_pw=0x04;
TConfig.bit_define.rx_address1=0x01;
TConfig.bit_define.rx_address2=0x02;
TConfig.bit_define.up_clk_en=0;
TConfig.bit_define.xof=0x03;
TConfig.bit_define.crc_en=1;
TConfig.bit_define.crc_mode=0;
tx_address[0]=0x05;
tx_address[1]=0x00;
tx_data[0]=0x00;
tx_data[1]=0x01;
tx_data[2]=0x02;
tx_data[3]=0x03;
tx_data[4]=0x04;
tx_data[5]=0x05;
tx_data[6]=0x06;
tx_data[7]=0x07;
tx_data[8]=0x08;
tx_data[9]=correct(tx_data,9);
SPIWriteData(WRITE_CONFIG,10,TConfig.ConfigReg);
nop;
nop;
// SPIReadData(READ_CONFIG,10,RConfig.ConfigReg);
// nop;
// nop;
SPIWriteData(WRITE_TX_ADDRESS,2,tx_address);
nop;
nop;
SPIWriteData(WRITE_TX_DATA,10,tx_data);
while(1)
{
TRX_CE=1;
while(!DR);
TRX_CE=0;
SPIReadData(READ_RX_DATA,4,rx_data);
if(rx_data[0]==0x00&&rx_data[1]==0x01&&rx_data[2]==0x02&&rx_data[3]==0x03)
{
LAMP=0;
TXEN=1;
nop;
nop;
TRX_CE=1;
while(!DR);
TRX_CE=0;
TXEN=0;
nop;
nop;
for(i=0;i<4000;i++);
LAMP=1;
}
nop;
}
}
//-----------------------------------------------
//SPI写入子程序
//-----------------------------------------------
void SPIWrite(unsigned char AByte)
{
unsigned char i=8;
while(i--)
{
SCK=0;
if(AByte&0x80)
SI=1;
else
SI=0;
SCK=1;
AByte<<=1;
}
SI=0;
}
//-----------------------------------------------
//SPI 读出子程序
//-----------------------------------------------
unsigned char SPIRead(void)
{
unsigned char i=8;
unsigned char result=0;
while(i--)
{
result<<=1;
SCK=0;
result&=0xFE;
if(SO)
result|=0x01;
SCK=1;
}
return result;
}
void SPIWriteData(unsigned char command,unsigned char num,unsigned char*pb)
{
SCK=0;
CSN=0;
SPIWrite(command);
while(num--)
{
SPIWrite(*pb++);
}
SCK=0;
CSN=1;
}
void SPIReadData(unsigned char command,unsigned char num,unsigned char*pb)
{
SCK=0;
CSN=0;
SPIWrite(command);
while(num--)
{
*pb++=SPIRead();
}
SCK=0;
CSN=1;
}
unsigned char correct(unsigned char *p,unsigned char length)
{
unsigned char i=0;
unsigned char creatcode=0;
while(length--)
{
for(i=0;i<8;i++)
{
if((creatcode^*p)&0x01)
creatcode=(creatcode>>1)^0x8c;
else
creatcode=creatcode>>1;
*p=_cror_(*p,1);
}
p++;
}
return(creatcode);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -