神了个奇了,51+NRF24L01每次都要发送两条同样指令才有反应

2020-02-02 09:35发布

用51+NRF24L01控制继电器开关,发送端发送0x01代表开,0x10代表关,但是不知道怎么搞的每次都得发送两条一样的命令才有反应,发一条开、一条关就木有反应。程序用的是myqiang1990的一对一程序,程序本体运行良好,就是不知道为什么会变成这样。
下面贴出主程序:
void main(void)
{
        unsigned char TxBuf[20]={0};  
        unsigned char RxBuf[20]={0};

        delayms(100);
        init_NRF24L01() ;
        Delay(6000);

        P2=0x00;     

        while(1)
        {                       
                SetRX_Mode(); //无按键直接跳转到接收,一直循环。
                nRF24L01_RxPacket(RxBuf);
                if(RX_DR==0)        //如果收到数据
                {
                        if(RxBuf[1]==0x01)        //打开开关
                        {
                                LED1=0;
                                Delay(5000);
                        }
                        else if(RxBuf[1]==0x10)//关闭开关
                        {
                                LED1=1;
                                Delay(5000);
                        }
                        SPI_RW_Reg(FLUSH_RX,0x00);                 //冲马桶
                }
        }

}

初始化函数:
//NRF24L01初始化
void init_NRF24L01(void)
{
delayms(1);
CE=0; // chip enable
CSN=1; // Spi disable
SCK=0; // Spi clock line init high
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 写本地地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 写接收端地址
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道0自动 ACK应答允许
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道0,如果需要多频道可以参考Page21
SPI_RW_Reg(WRITE_REG + RF_CH, 0); // 设置信道工作为2.4GHZ,收发必须一致
SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为32字节
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为1MHZ,发射功率为最大值0dB
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。