NRF24L01 发射端能工作,接收端接收不到数据

在使用NRF24L01无线模块进行单片机间通信时,遇到一个问题:发射端能够正常发送数据,但接收端始终无法接收到任何信息。已检查发射端代码无误,现正排查接收端代码可能出现的问题,包括配置设置、中断处理和数据接收函数等。初步怀疑可能是硬件连接或者配置参数不正确导致。
摘要由CSDN通过智能技术生成

发射端代码



#include <reg52.h>		 //	51单片机通用寄存器地址库,52也部分通用
#include <stdio.h>
#include <string.h>		 //	字符串功能函数库
#include "api.h"		 //	NRF24L01的SPI寄存器地址库
#include "ds18b20.h"	 //	OLED屏幕功能函数库
#include "lcd1602.h"
#include "smg.h"
#include <intrins.h>

#define uchar unsigned char	  //  uchar宏定义
#define uint unsigned int	  //  uint宏定义
sbit CE  = P1^2;
sbit CSN = P1^3;
sbit SCK = P1^7;
sbit MOSI= P1^1;
sbit MISO= P1^6;
sbit IRQ = P1^4;			   //射频接口配置



/***************************************************/
#define TX_ADR_WIDTH   32  // 32字节宽度的发送/接收地址
#define TX_PLOAD_WIDTH 26 // 数据通道有效数据宽度


uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 定义一个静态发送地址
uchar RX_BUF[TX_PLOAD_WIDTH];		 //定义接收窗口数组
uchar TX_BUF[TX_PLOAD_WIDTH];		 //定义发送窗口数组
uchar box[TX_PLOAD_WIDTH];			  //定义过渡数据包数组
uchar flag;
uchar str[TX_PLOAD_WIDTH];			 //定义字符串数组
uchar bdata sta;
float Q,F,num;
sbit  RX_DR	 = sta^6;				 
sbit  TX_DS	 = sta^5;
sbit  MAX_RT = sta^4;				 //配置NRF射频模块中断接口


/**************************************************
函数: init_io()

描述:
    初始化IO
/**************************************************/
void init_io(void)
{
	CE  = 0;        // 待机
	CSN = 1;        // SPI禁止
	SCK = 0;        // SPI时钟置低
	IRQ = 1;        // 中断复位   	             
	memset(&str,0,sizeof(str));			  // 清空字符串数组
	memset(&TX_BUF,0,sizeof(TX_BUF));	  // 清空发送窗口数组
	memset(&box,0,sizeof(box));			  // 清空过渡数据包数组
	TMOD = 0X15;//定时器计数器工作方式配置
    TH0=0;
    TL0=0;
    TH1=(65536-45872)/256;
    TL1=(65536-45872)%256;
    EA = 1;     //总中断打开
    ET0 = 1;	//中断运行
    ET1 = 1;
    TR0 = 1;    //运行控制位
    TR1 = 1; 
}
/**************************************************/

/**************************************************
函数:delay_ms()

描述:
    延迟x毫秒
/**************************************************/

/**************************************************/

/**************************************************
函数:SPI_RW()

描述:
    根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01
	读出一字节
/**************************************************/
uchar SPI_RW(uchar byte)
{
	uchar i;
   	for(i=0; i<8; i++)          // 循环8次
   	{
   		MOSI = (byte & 0x80);   // byte最高位输出到MOSI
     	byte <<= 1;             // 低一位移位到最高位
   		SCK = 1;                // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据
   		byte |= MISO;       	// 读MISO到byte最低位
   		SCK = 0;            	// SCK置低
   	}
    return(byte);           	// 返回读出的一字节
}
/**************************************************/

/**************************************************
函数:SPI_RW_Reg()

描述:
    写数据value到reg寄存器
/**************************************************/
uchar SPI_RW_Reg(uchar reg, uchar value)
{
	uchar status;
  	CSN = 0;                   // CSN置低,开始传输数据
  	status = SPI_RW(reg);      // 选择寄存器,同时返回状态字
  	SPI_RW(value);             // 然后写数据到该寄存器
  	CSN = 1;                   // CSN拉高,结束数据传输
  	return(status);            // 返回状态寄存器
}
/**************************************************/

/**************************************************
函数:SPI_Read()

描述:
    从reg寄存器读一字节
/**************************************************/
uchar SPI_Read(uchar r
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值