?? fa.c
字號:
#include<at892051.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//沒有Read RX_ADDRSS command的地址,怎么樣來讀取????
#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, //不重發,433.2MHz,6dBm,正常模式
0x44, //收發各4字節地址寬度
0x20,
0x20, //收發有效數據寬度32位
0xcc,
0xcc,
0xcc,
0xcc, //接收機地址
0x58 //16位CRC校驗,允許校驗,晶振16MHz,沒有外部時鐘
};
/*******************************************************************************************/
uchar data TxBuf[32]={0x70};
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); // Initialize
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)
{
SetTxMode(); // Set Tx Mode
TxPacket(); // Transmit Tx buffer data
while(DR==0)
{
P37=0;
Delay(100);
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=1; // set radio in Tx 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 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
while(DR!=1);
TRX_CE=0; // Set TRX_CE low
}
/*******************************************************************************************/
//function SetTxMode();
/*******************************************************************************************/
void SetTxMode(void)
{
PWR_UP=1;
TX_EN=1;
TRX_CE=0;
Delay(10); // delay for mode change(>=650us)
}
/*******************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -