📄 shou.c
字号:
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define WC 0x00 // Write configuration register command
#define RC 0x10 // Read configuration register command**********//没有用过
#define WTP 0x20 // Write TX Payload command
#define RTP 0x21 // Read TX Payload command*********************//没有用过
#define WTA 0x22 // Write TX Address command
#define RTA 0x23 // Read TX Address command*********************//没有用过 应该用于读取发送器地址
#define RRP 0x24 // Read RX Payload command
//#define stadby 0x11
/*******************************************************************************************/
typedef struct RFConfig
{
uchar n;
uchar buf[10];
}RFConfig;
code RFConfig RxTxConf =
{
10,
0x01,
0x0c, //不重发,433MHz,6dBm,正常模式
0x44, //收发各4字节地址宽度
0x20,
0x20, //收发有效数据宽度32位
0xcc,
0xcc,
0xcc,
0xcc, //接收机地址
0x58 //16位CRC校验,允许校验,晶振16MHz,没有外部时钟
};
/*******************************************************************************************/
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=P1^7;
sbit TRX_CE=P3^4;
sbit PWR_UP=P1^2;
sbit MISO=P1^3;
sbit MOSI=P1^4;
sbit SCK=P1^5;
sbit CSN=P1^6;
sbit AM=P3^2;
sbit DR=P3^3;
sbit CD=P3^5;
sbit P37=P3^7;
/*******************************************************************************************/
void Init(void);
void Inituart(void); // initialize 232 uart
void Config905(void); // Config nRF905 module
//void SetTxMode(void); // Set nRF905 in Tx mode
void SetRxMode(void); // Set nRF905 in Rx mode
//void TxPacket(void); // Send data by nRF905
void RxPacket(void); // Recive data by nRF905
void SpiWrite(uchar); // Write data to nRF905
uchar SpiRead(void); // Read data to nRF905
void Delay(uchar n); // Delay 100us
/*******************************************************************************************/
//function main();
/*******************************************************************************************/
void main(void)
{
Init();
Config905(); // Config nRF905 module
while(1)
{
SetRxMode(); // Set nRF905 in Rx mode
while(DR==0) ;
RxPacket();
P37=0;
Delay(100);
P37=1;
}
}
/*******************************************************************************************/
//function InitIO();
/*******************************************************************************************/
void Init(void)
{
CSN=1; // Spi disable
SCK=0; // Spi clock line init high
DR=1; // Init DR for input
AM=1; // Init AM for input
PWR_UP=1; // nRF905 power on
TRX_CE=0; // Set nRF905 in standby mode
TX_EN=0; // set radio in Rx mode
}
/*******************************************************************************************/
//function Config905();
/*******************************************************************************************/
void Config905(void)
{
uchar i;
CSN=0; // Spi enable for write a spi command
SpiWrite(WC); // Write config command
for (i=0;i<RxTxConf.n;i++) // Write configration words
{
SpiWrite(RxTxConf.buf[i]);
}
CSN=1; // Disable Spi
}
/*******************************************************************************************/
//function Delay100us();Delay 100us
/*******************************************************************************************/
void Delay(uchar n)
{
uint i;
while(n--)
for(i=0;i<80;i++);
}
/*******************************************************************************************/
//function SpiWrite();
/*******************************************************************************************/
void SpiWrite(uchar byte)
{
uchar i;
DATA_BUF=byte; // Put function's parameter into a bdata variable
for (i=0;i<8;i++) // Setup byte circulation bits
{
if (flag) // Put DATA_BUF.7 on data line
MOSI=1;
else
MOSI=0;
SCK=1; // Set clock line high
DATA_BUF=DATA_BUF<<1; // Shift DATA_BUF
SCK=0; // Set clock line low
}
}
/*******************************************************************************************/
//function SpiRead();
/*******************************************************************************************/
uchar SpiRead(void)
{
uchar i;
for (i=0;i<8;i++) // Setup byte circulation bits
{
DATA_BUF=DATA_BUF<<1; // Right shift DATA_BUF
SCK=1; // Set clock line high
if (MISO)
flag1=1; // Read data
else
flag1=0;
SCK=0; // Set clock line low
}
return DATA_BUF; // Return function parameter
}
/*******************************************************************************************/
//function RxPacket();
/*******************************************************************************************/
void RxPacket(void)
{
uchar i;
TRX_CE=0; // Set nRF905 in standby mode
CSN=0; // Spi enable for write a spi command
SpiWrite(RRP); // Read payload command
for (i=0;i<32;i++)
{
RxBuf[i]=SpiRead(); // Read data and save to buffer
}
CSN=1; // Disable spi
}
/*******************************************************************************************/
//function SetRxMode();
/*******************************************************************************************/
void SetRxMode(void)
{
TX_EN=0;
TRX_CE=1;
Delay(20); // delay for mode change(>=650us)
}
/*******************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -