新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 用nRF905和DS18B20制作的51單片機溫度數(shù)據(jù)無線傳輸系統(tǒng)

用nRF905和DS18B20制作的51單片機溫度數(shù)據(jù)無線傳輸系統(tǒng)

作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
void main()
{
unsigned int cyc=0;
unsigned int distan=0;
//================NRF905初始化
CSN=1;// Spidisable
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
//================
Config905();// Config nRF905 module
TxBuf[0] = 1;
TxBuf[1] = 1;
SetTxMode();// Set Tx Mode
TxPacket();// Transmit Tx buffer data
LED1 = 0;
LED2 = 0;
Delay(500);// delay for led light
LED1 = 1;
LED2 = 1;
TxBuf[0] = 0xff;
TxBuf[1] = 0xff;
// led close
SetRxMode();// Set nRF905 in Rx mode
while(1)
{
//=====================從鍵盤獲得數(shù)據(jù)
if(KEY1 ==0 ) { LED1 = 0; TxBuf[0] = 1 ;tf = 1 ; }
if(KEY2 ==0 ) { LED2 = 0; TxBuf[1] = 1 ;tf = 1 ; }
if (tf==1)
{
//===============NRF905發(fā)送相應(yīng)的按鍵
SetTxMode();// Set Tx Mode
TxPacket();// Transmit Tx buffer data
TxBuf[0] = 0xff;
TxBuf[1] = 0xff;
SetRxMode();// Set nRF905 in Rx mode
tf=0;
Delay(500);
LED1 = 1;
LED2 = 1;
}
//=====================等待NRF905接收
if (DR)// If recive data ready...
RxPacket();// ... recive data
}
}
//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寫放配置字
{
SpiWrite(RxTxConf.buf[i]);
}
CSN=1;// Disable Spi
}
//function SpiWrite();
void SpiWrite(ucharbyte)
{
uchar i;
DATA_BUF=byte;// Put functions 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 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 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
while(DR||AM);
// P0= RxBuf[0];// Buffer[0] output from P0 port...
TRX_CE=1;
//xx=(RxBuf[0]>>4)&0x0f;
//TxData(xx);
//=====================
if(RxBuf[0] == 1) LED1 = 0 ;
if(RxBuf[1] == 1) LED2 = 0 ;
Delay(500);// ...light led
// P0=0xff;// Close led
LED1 = 1 ;
LED2 = 1 ;
}
//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)
}****************************************

上一頁 1 2 下一頁

評論


技術(shù)專區(qū)

關(guān)閉