金牌会员
- 积分
- 1633
- 金钱
- 1633
- 注册时间
- 2012-8-28
- 在线时间
- 71 小时
|
楼主 |
发表于 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寄存器值
}
}
|
|