打印

nrf2401无线通信无反应啊

[复制链接]
2074|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a4551296|  楼主 | 2010-12-29 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
zhya666| | 2010-12-30 10:56 | 只看该作者
void main(void)
{
    init_NRF24L01() ;       
   while(1)
     {
      
                 Delay(6000);
        nRF24L01_TxPacket(TxBuf);        // Transmit Tx buffer data
          SPI_RW_Reg(WRITE_REG+STATUS,0XFF);
              //发射前要清TX寄存器.发射完写STATUS=0x70
     }
}

使用特权

评论回复
板凳
zhya666| | 2010-12-30 12:59 | 只看该作者
void init_NRF24L01(void)
{
    inerDelay_us(100);
        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
}


      TX&RX的RFIRQ都会产生低电平中断,发射程序中开启发射后做了延时等待,然后清了STATUS,接收主程序中是通过查询STATUS中的RX_DR位来判断是否接收到数据,然后也清了STATUS,清除了中断标志,因为发射接收时间都很短,所以你没察觉到.若不能在线仿真,你可以在清Status前加Delay(6000);延时或更长,你就能看到RFIRQ的低电平.

使用特权

评论回复
地板
a4551296|  楼主 | 2010-12-30 20:20 | 只看该作者
void main(void)
{
    init_NRF24L01() ;       
Delay(6000);
SPI_RW_Reg(WRITE_REG+STATUS,0XFF);
        nRF24L01_TxPacket(TxBuf);        // Transmit Tx buffer data
        sta=SPI_Read(STATUS);        // 读取状态寄存其来判断数据接收状况
        if(RX_RT)
       
        {          SPI_RW_Reg(FLUSH_RX,0);
                                  SPI_RW_Reg(WRITE_REG+STATUS,0XFF);
}
}
发送
void main(void)
{

   TMOD=1; //置CT0定时工作方式1
   EA=1;ET0=1;//IE=0x82 //CPU开中断,CT0开中断
    init_NRF24L01() ;       
    Delay(6000);
while(1)
           {
        SetRX_Mode();
           nRF24L01_RxPacket(RxBuf);
   if(RX_DR)
{       
SPI_RW_Reg(FLUSH_RX,0);       
SPI_RW_Reg(WRITE_REG+STATUS,0xFF);
}
        if(RxBuf[0]=0xff)
        {
                playsong(sszymmh);
    }
}
}
要这么改吗?你能否改写一下,有的不太懂。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

15

帖子

1

粉丝