跪求大神解啊,NRF24L01 接收问题

2019-07-15 22:10发布

用了好几天时间把发送调好,可是接收怎么也调不好,求指导啊  
NRF24L01肯定是好的

发送部分的mcu是15L204EA     每次发送后STATUS=0X2E   FIFO_STATUS=0X11; 寄存器配置是 EN_AA =0X00;
EN_RXADDR=0X01; SETUP_RETR=0X00;自动无限循环重发


接收部分是89c52  贴程序啊


void main(void)
{
unsigned char tf =0;
    init_io();
init_lcd();
LED1 = 0;
LED2 = 0;
Delay(6000);
LED1 = 1;
  LED2 = 1;
while(1)
{
  KEY2=1;
  KEY1=1;
     while(KEY2==0||KEY1 ==0)
  {
   IRQ=1;
   SPI_RW_Reg(WRITE_REG+STATUS,0xff);
      if(KEY1 ==0)   
     {           
       TxBuf[0] = 0xAA ;   
      }
   else
      if(KEY2 ==0 )
      {
    TxBuf[0] = 0x55 ;
     }
   nRF24L01_TxPacket(TxBuf);
   mark_tx();
   tf = 1;
  }                                              //以上是发送部分  正常  
  if(tf)
  {
         tf=0;
         SetRX_Mode();              //接收模式
         IRQ=1;
         while(IRQ==0);
         inerDelay_us(400);
     }
  IRQ=1;
  if(IRQ==0)                       //现在就是卡在这里了  IRQ永远不等于0,
  {
   LED2=0;
      sta=SPI_Read(STATUS);    //读取状态寄存器
   display();                                 //1602用16进制显示状态寄存器
   SPI_RW_Reg(WRITE_REG+STATUS,0xff);   //清楚状态寄存器
   if(sta&0x40)                                //判断状态寄存器是不是的RX_DR是不是置1
   {
    SPI_Read_Buf(RD_RX_PLOAD,RxBuf,TX_PLOAD_WIDTH);     //数据读到RxBuf
    if( RxBuf[0]==0xAA)
    {   
      LED2=0;
      Delay(6000);
      LED2=1;
    }
    else
    if( RxBuf[0]==0x55)
    {
      LED2=0;
      Delay(6000);
      LED2=1;
    }
    RxBuf[0]=0;
   }
   else        //如果Rx_DR没有置1  则清除所有状态和FLUSH
   {
    CLR_ALL();
    SetRX_Mode();
    IRQ=1;
    while(IRQ==0);
   }
   
  
}
display();
      
}

}     
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zyy91507
1楼-- · 2019-07-16 12:47
liuyongping1986 发表于 2013-10-13 01:02
问题解决了,是因为mcu 速度差太多了时序不对

请问楼主,设定发射端寄存器EN_AA =0X00; EN_RXADDR=0X01; SETUP_RETR=0X00,但是每次发送完读取寄存器STATUS读到的不是0x2E而是0x1F是什么情况...楼主能指教一下吗?用的MCU是C8051f41
sony1182535456
2楼-- · 2019-07-16 18:15
 精彩回答 2  元偷偷看……

一周热门 更多>