nRF24L01无线模块引脚检测MOSI值一直是0x0e和0x08 求解TT

我用pic24fv模块作为CPU的 用设备检测nRF24L01 MOSI信号一直显示0x0e和0x08 程序如下:
#include <p24fxxxx.h>
#include "ComDef.h"
#include "PIC_nRF24L01.h"
#include "PIC_Delay.h"

#define MISO PORTBbits.RB13
#define MOSI PORTBbits.RB12
#define SCK PORTBbits.RB11
#define CE PORTBbits.RB14
#define CSN PORTBbits.RB10
//#define IRQ PORTBbits.RB5

uchar sta; // the status of nRF24L01

uchar Rx_Buf[ RX_PLOAD_WIDTH ]; // receive buffer

uchar TX_ADDRESS[ TX_ADR_WIDTH ] = {0x34,0x43,0x10,0x10,0x01}; // transport address
uchar RX_ADDRESS[ RX_ADR_WIDTH ] = {0x34,0x43,0x10,0x10,0x01}; // receive address
uchar Tx_Buf[ TX_PLOAD_WIDTH ] = {0xff};// transmit buff

uchar SPI_RW( uchar byte );
uchar SPI_Write_Buf( uchar reg, uchar *pBuf, uchar bytes );
void nRF24L01_IO_Init( void );

uchar SPI_Read( uchar reg )
{
uchar reg_val;
CSN=0;
SPI_RW(reg);
reg_val=SPI_RW( 0 );
CSN=1;
return( reg_val );
}

uchar SPI_RW_Reg( uchar reg, uchar value )
{
uchar status;
CSN=0;
status=SPI_RW(reg);
SPI_RW(value);
CSN=1;
return( status );
}

void TX_Mode( void )
{
nRF24L01_IO_Init();
SCK=0;
CSN=1;
CE=0;
SPI_RW_Reg(FLUSH_TX,0x00);
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);
SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);
SPI_RW_Reg(WRITE_REG + RF_CH, 0x40);
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);
SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);
CE=1;
delay_ms( 100 );
}

void Transmit( uchar* tx_buf )
{
CE=0;
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
SPI_RW_Reg(FLUSH_TX,0x00);
SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);
CE=1;
delay_ms(150);
}

uchar SPI_RW( uchar byte )
{
uchar bit_ctr;
for(bit_ctr=0;bit_ctr<8;bit_ctr++)
{
MOSI=( byte&0x80 );

byte=( byte<<1 );
SCK=1;
byte|=MISO;
//led=MISO;Delay(150);
SCK=0;
}
return( byte );
}

uchar SPI_Write_Buf( uchar reg, uchar *pBuf, uchar bytes )
{
uchar status,byte_ctr;
CSN = 0;
status = SPI_RW(reg);
for(byte_ctr=0; byte_ctr<bytes; byte_ctr++)
SPI_RW(*pBuf++);
CSN = 1;
return( status );
}

void nRF24L01_IO_Init( void )
{
TRISBbits.TRISB13 = 1;
TRISBbits.TRISB12 = 0;
TRISBbits.TRISB11 = 0;
TRISBbits.TRISB14 = 0;
TRISBbits.TRISB10 = 0;
}

第1个回答  2015-04-17
你研究挺深哦的嘛 没事跟数字过不去追问

求解答啊TT

追答

我是文盲

NRF24L01的STATUS的值为0x0e
那说明芯片没有收到数据,也没发送数据,处于空闲状态。

关于nrf24l01模块,status为0x0e 这是怎么回事
STATUS = 0x0E (0000 1110)代表:RX_DR=0=当前没有接收完成中断产生 TX_DS=0=当前没有发送结束中断产生 MAX_RT=0=当前没有发送超限中断产生 RX_P_NO=111=RX FIFO空(没有任何数据)TX_FULL=0=TX FIFO有可用的空间(未满)

nRF24L01中状态寄存器读出来的数据都是00, 写0x70后,读出为0x0e,怎么...
查看的时候主要从以下几方面入手:sck是否为标准的矩形脉冲信号,总共应该有16个周期(如果发送数据是16位的话,那么应该是24个周期);mosi管脚上的电平时序即为你从单片机写入芯片的值,比如你写入0x70,则应该是0111 0000;miso是你从芯片读出来的值;2、再仔细检查一遍nRF24l01的各个管脚是否和程序中...

关于NRF24L01通信的问题
最近在弄2401,弄了三四天了,还没弄出来,现在的主要问题是接收不到数据,发送部分感觉应该是没问题了,因为读出来STATUS和FIFO_STATUS的值是00X2E和0X11,这样应该是发送成功了吧,但是在接收端读出来的值分别是0x0E和0X11,这样根本就没有接收到数据,接受缓存是空的,问题出在什么地方呢?有没遇到过同样的问题没?去...

nRF24l01无线模块 程序里有个头文件:#include<api.h> 谁知道,麻烦给下...
比如你要用_irol_这个函数,你就得包含它,要不让编译器会找不到这个函数,就会报错。举例:include <intrins.h> main(){ unsigned int y;y=0x00ff;y=_irol_(y,4);} 如果没有#include <intrins.h> ,就会报错的,所以,如果想使用 <intrins.h> 里面的函数,就要#include <intrins.h> 希...

相似回答