金牌会员 
   
	- 积分
 - 1648
 
        - 金钱
 - 1648 
 
       - 注册时间
 - 2012-8-28
 
      - 在线时间
 - 73 小时
 
 
 
 | 
 
 
 楼主 |
发表于 2018-2-14 20:39:20
|
显示全部楼层
 
 
 
 本帖最后由 750273008 于 2018-2-25 21:39 编辑  
 
////////////////////////////////////////////////////////// 
//中断中函数 
u8 NRF24L01_bilateral_Pack(u8 *rxbuf,u8 *txbuf)//双向一个包的数据 
{ 
          u8 temp=0;//状态值 
//    u8 look; 
         
//////////////////////////////////////////////////////////////// 
//状态;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
           temp=NRF24L01_Read_Reg(STATUS);  //0x52, 0x42,0x02 
 
////////////////////////////////// 
//RX数据优先 
                 if((temp&0x0e)!= 0x0e)//接收到数据 
           { 
//                        NRF24L01_Write_Reg(STATUS,temp); //清除中断   0x07应该0x0e 
 
                        NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//0x61 读取数据 
 
                        return temp; //接收完成  
                 } 
                  
                  
/////////////////////////////////////// 
//TX模式//第一次发送3时接收机显示1(缓存了3组内容)或者发“A”发3次后,接收机显示A 
                  if(*txbuf!=0x00)//数据非空 
             { 
                          NRF24L01_Write_Reg(STATUS,temp); //清除中断 
                         //      0x00寄存器配置参数   
                                NRF24L01_Write_Reg(CONFIG, 0<<6 |    //IRQ中断脚使用   0开,1关 
                                                                                                                                         0<<5 |    //发送完成中断    0开,1关 
                                                                                                                                         0<<4 |    //重发超限中断    0开,1关 
                                                                                                                                         1<<3 |    //CRC开关         0关,1开 
                                                                                                                                         1<<2 |    //CRC字节         0八,1十六 
                                                                                                                                         1<<1 |    //上电模式        0关,1开 
                                                                                                                                         0<<0 ); //广播模式     0发送   1接收 
                         
                                NRF24L01_CE=0;                         //关闭24L01天线 
                                NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//0xa0写数据到TX BUF  max32个字节 
                                NRF24L01_CE=1;//启动发送         
/////////////////////////////// 
//等中断 
                                while((NRF24L01_IRQ&0x01)!=0);//等待中断脚输出 
                                temp=NRF24L01_Read_Reg(STATUS);  //0x02下TX后  0x22 
                                 NRF24L01_Write_Reg(STATUS,temp); //清除TX_DS或MAX_RT中断标志 
                          
                                if(temp&1<<6)//发送过程中收到数据 
                                { 
                                        NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//0x61 读取数据 
                                        return temp;//接收优先 
                                } 
////////////////////////////// 
                                if(temp&1<<4)//达到最大重发次数(发送失败0x1e) 
                                { 
                                        //清除缓存 
                                        NRF24L01_Write_Reg(FLUSH_TX,0xff);//0xE1 清除TX FIFO寄存器  
                                } 
/////////////////////////////////////// 
//RX模式 
     //0x00寄存器配置参数   
                                NRF24L01_Write_Reg(CONFIG, 0<<6 |    //IRQ中断脚使用   0开,1关 
                                                                                                                                         0<<5 |    //发送完成中断    0开,1关 
                                                                                                                                         0<<4 |    //重发超限中断    0开,1关 
                                                                                                                                         1<<3 |    //CRC开关         0关,1开 
                                                                                                                                         1<<2 |    //CRC字节         0八,1十六 
                                                                                                                                         1<<1 |    //上电模式        0关,1开 
                                                                                                                                         1<<0 ); //广播模式     0发送   1接收 
                                //////////////////// 
                                //准备接收 
                                delay_us(250);//越小反而不好。 
                                return temp;//0x07寄存器值 
                        } 
} 
 
 
 
 |   
 
 
 
 |