找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3711|回复: 2
打印 上一主题 下一主题
收起左侧

51 NRF24L01 收到的数据都是0 大神帮忙看下

[复制链接]
跳转到指定楼层
楼主
ID:129670 发表于 2016-7-16 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
发送端主函数                                                                                                                                                  

void main(void)
{
nRF24L01_Init();//NRF24L01初始化
while(1)
{
  DhtReadData();   //读取传感器的数据  这个函数没有问题的。
TX_Buffer[0]=Humi;
nRF24L01_Set_TX_Mode(TX_Buffer);//发送数据
while(Check_Ack());//等待发送完成
_nop_();
_nop_();
_nop_();
LED=~LED;
delay_ms(2000);
  }
}

接收端主函数
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);
  }
}


收发模式设置的函数应该都没有问题吧   我觉得。

//设置发送模式
void nRF24L01_Set_TX_Mode(uchar *TX_Data)
{
CE=0;//待机(写寄存器之前一定要进入待机模式或掉电模式)
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);//为了接收设备应答信号,接收通道0地址与发送地址相同
SPI_W_DBuffer(W_TX_PLOAD,TX_Data,TX_DATA_WITDH);//写有效数据地址+有效数据+有效数据宽度

SPI_W_Reg(W_REGISTER+EN_AA,0x01);//接收通道0自动应答
SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01);//使能接收通道0
SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a);//自动重发延时250US+86US,重发10次
SPI_W_Reg(W_REGISTER+RF_CH,0);//2.4GHZ
SPI_W_Reg(W_REGISTER+RF_SETUP,0x07);//1Mbps速率,发射功率:0DBM,低噪声放大器增益
SPI_W_Reg(W_REGISTER+CONFIG,0x0e);//发送模式,上电,16位CRC校验,CRC使能

CE=1;//启动发射
_delay_ms(5);//CE高电平持续时间最少10US以上
}
//检测应答信号
uchar Check_Ack(void)
{
sta=SPI_R_byte(R_REGISTER+STATUS);//读取寄存状态
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);//如果没有这一句只能发一次数据,大家要注意
CSN=1;
return 0;
}
else
return 1;
}




//接受模式
void nRF24L01_Set_RX_Mode(void)
{
CE=0;//待机
// 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系统采集的数据发送到B系统显示    结果B系统收到的数据都是0’
代码如上   希望大神指点一二。感激不尽
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:79544 发表于 2016-7-17 12:38 | 只看该作者
现在发送和接受的状态指示灯有变化吗?没有就把发送的延时适当延长试试。_delay_ms(5);加到200.试试
回复

使用道具 举报

板凳
ID:141688 发表于 2017-3-18 19:08 | 只看该作者
楼主,你问题解决没,我遇到和你同样的问题,想向你请教一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表