|
發(fā)送端主函數(shù)
void main(void)
{
nRF24L01_Init();//NRF24L01初始化
while(1)
{
DhtReadData(); //讀取傳感器的數(shù)據(jù) 這個(gè)函數(shù)沒有問題的。
TX_Buffer[0]=Humi;
nRF24L01_Set_TX_Mode(TX_Buffer);//發(fā)送數(shù)據(jù)
while(Check_Ack());//等待發(fā)送完成
_nop_();
_nop_();
_nop_();
LED=~LED;
delay_ms(2000);
}
}
接收端主函數(shù)
void main(void)
{
nRF24L01_Init();//NRF24L01初始化
ini_1602();
ini_play();
while(1)
{
nRF24L01_Set_RX_Mode();
if(nRF24L01_RX_Data())
{
w_num(RX_Buffer[0]);
Buzzer_P=0;
delay_ms(150);
Buzzer_P=1;
}
delay_ms(2000);
}
}
收發(fā)模式設(shè)置的函數(shù)應(yīng)該都沒有問題吧 我覺得。
//設(shè)置發(fā)送模式
void nRF24L01_Set_TX_Mode(uchar *TX_Data)
{
CE=0;//待機(jī)(寫寄存器之前一定要進(jìn)入待機(jī)模式或掉電模式)
SPI_W_DBuffer(W_REGISTER+TX_ADDR,TX_Addr,TX_ADDR_WITDH);//寫寄存器指令+接收節(jié)點(diǎn)地址+地址寬度
SPI_W_DBuffer(W_REGISTER+RX_ADDR_P0,TX_Addr,TX_ADDR_WITDH);//為了接收設(shè)備應(yīng)答信號,接收通道0地址與發(fā)送地址相同
SPI_W_DBuffer(W_TX_PLOAD,TX_Data,TX_DATA_WITDH);//寫有效數(shù)據(jù)地址+有效數(shù)據(jù)+有效數(shù)據(jù)寬度
SPI_W_Reg(W_REGISTER+EN_AA,0x01);//接收通道0自動(dòng)應(yīng)答
SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01);//使能接收通道0
SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a);//自動(dòng)重發(fā)延時(shí)250US+86US,重發(fā)10次
SPI_W_Reg(W_REGISTER+RF_CH,0);//2.4GHZ
SPI_W_Reg(W_REGISTER+RF_SETUP,0x07);//1Mbps速率,發(fā)射功率:0DBM,低噪聲放大器增益
SPI_W_Reg(W_REGISTER+CONFIG,0x0e);//發(fā)送模式,上電,16位CRC校驗(yàn),CRC使能
CE=1;//啟動(dòng)發(fā)射
_delay_ms(5);//CE高電平持續(xù)時(shí)間最少10US以上
}
//檢測應(yīng)答信號
uchar Check_Ack(void)
{
sta=SPI_R_byte(R_REGISTER+STATUS);//讀取寄存狀態(tài)
if(TX_DS||MAX_RT)//如果TX_DS或MAX_RT為1,則清除中斷和清除TX_FIFO寄存器的值
{
SPI_W_Reg(W_REGISTER+STATUS,0xff);
CSN=0;
SPI_RW(FLUSH_TX);//如果沒有這一句只能發(fā)一次數(shù)據(jù),大家要注意
CSN=1;
return 0;
}
else
return 1;
}
//接受模式
void nRF24L01_Set_RX_Mode(void)
{
CE=0;//待機(jī)
// SPI_W_DBuffer(W_REGISTER+TX_ADDR,TX_Addr,TX_ADDR_WITDH);
SPI_W_DBuffer(W_REGISTER+RX_ADDR_P0,TX_Addr,TX_ADDR_WITDH);
SPI_W_Reg(W_REGISTER+EN_AA,0x01);
SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01);
SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a);
SPI_W_Reg(W_REGISTER+RX_PW_P0,RX_DATA_WITDH);
SPI_W_Reg(W_REGISTER+RF_CH,0);
SPI_W_Reg(W_REGISTER+RF_SETUP,0x07);
SPI_W_Reg(W_REGISTER+CONFIG,0x0f);
CE=1;
_delay_ms(5);
}
uchar nRF24L01_RX_Data(void)
{
sta=SPI_R_byte(R_REGISTER+STATUS);
if(RX_DR)
{
CE=0;
SPI_R_DBuffer(R_RX_PLOAD,RX_Buffer,RX_DATA_WITDH);
SPI_W_Reg(W_REGISTER+STATUS,0xff);
CSN=0;
SPI_RW(FLUSH_RX);
CSN=1;
return 1;
}
else
return 0;
}
小弟看了好幾天了 不知道問題在哪里。本來就是想要把A系統(tǒng)采集的數(shù)據(jù)發(fā)送到B系統(tǒng)顯示 結(jié)果B系統(tǒng)收到的數(shù)據(jù)都是0’
代碼如上 希望大神指點(diǎn)一二。感激不盡
|
|