📄 nrf905.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define WC 0x00
#define RC 0x10
#define WTP 0x20
#define RTP 0x21
#define WTA 0x22
#define RTA 0x23
#define RRP 0x24
typedef struct REConfig
{
uchar n;
uchar buf[10];
}RFConfig;
code RFConfig RxTxConf=
{
10,0x01, 0x0c, 0x44, 0x20, 0xcc, 0xcc, 0xcc, 0xcc,0x58
};
uchar data TxBuf[32];
uchar data RxBuf[32];
uchar bdata DATA_BUF;
sbit flag=DATA_BUF^7;
sbit flag1=DATA_BUF^0;
sbit TX_EN=P2^6;
sbit TRX_CE=P2^5;
sbit PWR_UP=P2^4;
sbit MISO=P2^3;
sbit MOSI=P2^2;
sbit SCK=P2^1;
sbit CSN=P2^0;
sbit AM=P3^2;
sbit DR=P3^3;
sbit CD=P3^5;
void InitIO(void);
void Inituart(void);
void Config905(void);
void SetTxMode(void);
void SetRxMode(void);
void TxPacket(void);
void RxPacket(void);
void SpiWrite(uchar);
uchar SpiRead(void);
void Delay(uchar n);
void Scankey(void);
void TxData(uchar x);
void main()
{
InitIO();
Inituart();
Config905();
SetTxMode();
TxPacket();
Delay(500);
P0=0xff;
SetRxMode();
while(1)
{
Scankey();
if(DR)
RxPacket();
}
}
void InitIO(void)
{
P0=0x0f;
CSN=1;
SCK=0;
DR=1;
AM=1;
PWR_UP=1;
TRX_CE=0;
TX_EN=0;
}
void Inituart(void)
{
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
SCON=0xd8;
PCON=0x80;
TR1=1;
}
void Config905(void)
{
uchar i;
CSN=0;
SpiWrite(WC);
for(i=0;i<RxTxConf.n;i++)
{
SpiWrite(RxTxConf.buf[i]);
}
CSN=1;
}
void Delay(uchar n)
{
uint i;
while(n--)
for(i=0;i<80;i++);
}
void SpiWrite(uchar byte)
{
uchar i;
DATA_BUF=byte;
//variable
for(i=0;i<8;i++)
{
if(flag)
MOSI=1;
else
MOSI=0;
SCK=1;
DATA_BUF=DATA_BUF<<1;
SCK=0;
}
}
uchar SpiRead(void)
{
uchar i;
for(i=0;i<8;i++)
{
DATA_BUF=DATA_BUF<<1;
SCK=1;
if(MISO)
flag1=1;
else
flag1=0;
SCK=0;
}
return DATA_BUF;
}
void TxPacket(void)
{
uchar i;
CSN=0;
SpiWrite(WTP);
for(i=0;i<32;i++)
{
SpiWrite(TxBuf[i]);
}
CSN=1;
Delay(1);
CSN=0;
SpiWrite(WTA);
for(i=0;i<4;i++)
{
SpiWrite(RxTxConf.buf[i+5]);
}
CSN=1;
Delay(1);
TRX_CE=0;
}
void RxPacket(void)
{
uchar i,xx;
TRX_CE=0;
CSN=0;
SpiWrite(RRP);
for(i=0;i<32;i++)
{
RxBuf[i]=SpiRead();
}
CSN=1;
while(DR||AM);
P0=RxBuf[0];
TRX_CE=1;
xx=(RxBuf[0]>>4)&0x0f;
TxData(xx);
Delay(500);
P0=0xff;
}
void SetTxMode(void)
{
TX_EN=1;
TRX_CE=0;
Delay(1);
}
void SetRxMode(void)
{
TX_EN=1;
TRX_CE=1;
Delay(1);
}
void Scankey()
{
uchar Temp,xx;
P0=0xff;
Temp=P0&0x0f;
if(Temp!=0x0f)
{
Delay(10);
Temp=P0&0x0f;
if(Temp!=0x0f)
{
xx=Temp;
Temp=Temp<<4;
TxBuf[0]=Temp;
P0=Temp;
SetTxMode();
TxPacket();
TxData(xx);
Delay(500);
P0=0xff;
SetRxMode();
while((P0&0x0f)!=0x0f);
}
}
}
void TxData(uchar x)
{
SBUF=x;
while(TI==0);
TI=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -