#ifndef _NRF905_H_
#define _NRF905_H_
#define WC 0x00 // Write configuration register command
// 編寫配置寄存器命令
#define RC 0x10 // Read configuration register command
// 讀取配置寄存器命令
#define WTP 0x20 // Write TX Payload command
// 寫TX 有效數據1-32 字節寫操作全部從字節0 開始
#define RTP 0x21 // Read TX Payload command
// 讀TX 有效數據1-32 字節讀操作全部從字節0 開始
#define WTA 0x22 // Write TX Address command
// 寫TX地址命令
#define RTA 0x23 // Read TX Address command
// 讀TX 地址1-4 字節讀操作全部從字節0 開始
#define RRP 0x24 // Read RX Payload command
// 讀RX 有效數據1-32 字節讀操作全部從字節0 開始
/*******************************************************************************************/
typedef struct RFConfig1
{
uchar n;
uchar buf[10];
}RFConfig;
code RFConfig RxTxConf = //參看
{
10,
0x01, 0x0c, 0x44, 0x20, 0x20, 0xcc, 0xcc, 0xcc,0xc0, 0x58
};
//內容的struct是nRF905的初始化數據。初始化數據
// ch沒有= 1;433 mhz;正常施工,沒有Retrans;RX,TX地址是4個字節
// RX TX負載寬度是32字節;禁用走讀生時鐘;Fosc = 16 mhz
// 8位CRC和啟用
/*******************************************************************************************/
uchar data TxBuf[32];
uchar data RxBuf[32];
uchar key,rsbrf,delayf,tf;
/*******************************************************************************************/
uchar bdata DATA_BUF;
sbit flag = DATA_BUF^7;
sbit flag1 = DATA_BUF^0;
/*******************************************************************************************/
sbit SCK = P2^0;
sbit MISO = P2^1;
sbit AM = P2^2;
sbit TRX_CE = P2^3;
sbit TX_EN = P2^4;
sbit PWR_UP = P2^5;
sbit DR = P1^7;
sbit MOSI = P1^6;
sbit CSN = P1^5;
/*******************************************************************************************/
void Config905(void); // Config nRF905 module配置NRF905模式
void SetTxMode(void); // Set nRF905 in Tx mode
void SetRxMode(void); // Set nRF905 in Rx mode
void TxPacket(void); // Send data by nRF905 由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
/*******************************************************************************************/
void Delay(uchar n)
{
uint i;
while(n--)
for(i=0;i<80;i++);
}
/*******************************************************************************************/
/*******************************************************************************************/
//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 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 TxPacket();
/*******************************************************************************************/
void TxPacket(void)
{
uchar i;
//Config905();
CSN=0; // Spi enable for write a spi command
SpiWrite(WTP); // Write payload command
for (i=0;i<32;i++)
{
SpiWrite(TxBuf[i]); // Write 32 bytes Tx data
}
CSN=1; // Spi disable
Delay(1);
CSN=0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
for (i=0;i<4;i++) // Write 4 bytes address
{
SpiWrite(RxTxConf.buf[i+5]);
}
CSN=1; // Spi disable
TRX_CE=1; // Set TRX_CE high,start Tx data transmission
Delay(1); // while (DR!=1);
TRX_CE=0; // Set TRX_CE low
}
/*******************************************************************************************/
//function SetTxMode();
/*******************************************************************************************/
void SetTxMode(void)
{
TX_EN=1;
TRX_CE=0;
Delay(1); // delay for mode change(>=650us)
}
/*******************************************************************************************/
//function SetRxMode();
/*******************************************************************************************/
void SetRxMode(void)
{
TX_EN=0;
TRX_CE=1;
Delay(1); // delay for mode change(>=650us)
}
void init_nrf905()
{
// //================NRF905初始化
CSN=1; // Spi disable Spi禁用
DR=1; // Init DR for input
AM=1; // Init AM for input
PWR_UP=1; // nRF905 power on
//================
Config905(); // Config nRF905 module 配置模塊nRF905 // led close
SetRxMode(); // Set nRF905 in Rx mode
}
#endif
|