当前位置: 代码迷 >> 单片机 >> 大家帮忙看看这个24l01接收程序的有关问题
  详细解决方案

大家帮忙看看这个24l01接收程序的有关问题

热度:90   发布时间:2016-04-28 15:17:25.0
大家帮忙看看这个24l01接收程序的问题
现在问题是这个接收程序不能接收到数据,但是如果把#define RX_PLOAD_WIDTH  6 改为#define RX_PLOAD_WIDTH  4就可以接收,很奇怪。不是一个通道最多可以接收32byte字节的数据吗,为什么设为6就不行或者更大的,只有为4才可以,这是为什么?求解释。上程序:

#include <reg52.h>
#include <intrins.h>

typedef unsigned char uchar;
typedef unsigned char uint;
//****************************************IO端口定义***************************************
sbit  MISO =P2^4;
sbit  MOSI =P2^7;
sbit SCK     =P2^5;
sbit CE     =P2^1;
sbit CSN =P2^3;
sbit IRQ =P2^6;
//*********************************************NRF24L01*************************************
#define TX_ADR_WIDTH    5    // 5 uints TX address width
#define RX_ADR_WIDTH    5    // 5 uints RX address width
#define TX_PLOAD_WIDTH  6  // 20 uints TX payload
#define RX_PLOAD_WIDTH  6   // 20 uints TX payload
uint const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //本地地址
uint const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //接收地址
//***************************************NRF24L01寄存器指令*******************************************************
#define READ_REG        0x00   // 读寄存器指令
#define WRITE_REG       0x20  // 写寄存器指令
#define RD_RX_PLOAD     0x61   // 读取接收数据指令
#define WR_TX_PLOAD     0xA0   // 写待发数据指令
#define FLUSH_TX        0xE1  // 冲洗发送 FIFO指令
#define FLUSH_RX        0xE2   // 冲洗接收 FIFO指令
#define REUSE_TX_PL     0xE3   // 定义重复装载数据指令
#define NOP             0xFF   // 保留
//*************************************SPI(nRF24L01)寄存器地址****************************************************
#define CONFIG          0x00  // 配置收发状态,CRC校验模式以及收发状态响应方式
#define EN_AA           0x01  // 自动应答功能设置
#define EN_RXADDR       0x02  // 可用信道设置
#define SETUP_AW        0x03  // 收发地址宽度设置
#define SETUP_RETR      0x04  // 自动重发功能设置
#define RF_CH           0x05  // 工作频率设置