nrf24l01;89c52

高玩们我的89C52的板子跟NRF24L01的模块连接不上不知道是程序的问题还是很硬件,先帮我看看程序有啥问题吧!

//====================================
/*************Í·º¯Êý**********/

#include 
#include 
#include 
#include 

//===================================

#define uchar unsigned char        // ÒÔºóunsigned char¾Í¿ÉÒÔÓÃuchar´úÌæ
#define uint  unsigned int        // ÒÔºóunsigned int ¾Í¿ÉÒÔÓÃuint ´úÌæ

//====================================

sbit GM=P2^0;          //¹âÃô
sbit hw=P2^6;          //ÈËÌåºìÍâ
sbit relay=P2^3;      //¼ÌµçÆ÷¿ØÖƵÆ
sbit yellow = P2^5; //ÈËÌåºìÍâָʾµÆ
uchar rece_buf[32];
uchar gMode=1;            // 1ÊÇÊÖ¶¯Ä£Ê½£¬2ÊÇÁÁ¶È×Ô¶¯Ä£Ê½

//=====================================

void io_inithw(void)
{

}

void int_inithw(void)
{
    EX0=1;
    EA=1;

}

//=======================================
/****************ÑÓßtº¯”µ***************/

void DelayMs(uint time)
{
    uint i,j;
    for(i=0;ifor(j=0;j<120;j++);
}

//=========================================
/***************¹¤×÷º¯”µ******************/

void work()                                //¹¤×÷º¯Êý
{
    static uchar value,miao;  
    
    if(GM==1)                                //¹âÏß°µ£¨ÍíÉÏ£©
    {        
        if(hw==1)                            //¸ÐÓ¦µ½ÈËÌå
        {
            relay=0;                         //¼ÌµçÆ÷ÎüºÏ¡ª¡ªŸôÁÁ
            miao = 0;                        //±äÁ¿ÇåÁã
            value = 0;                    //±äÁ¿ÇåÁã
        }
     }
    if(relay == 0)                //¼ÌµçÆ÷ÎüºÏ ¼ÆÊ±10Ãë
    {
        value ++;
        if(value >= 10)                //ÕâÀïÊÇ1Ãë 
        {
            value = 0;
            miao ++;                        //¼Ó1Ãë
            if(miao >= 10)            //10ÃëµÄʱ¼ä 
            {
                miao = 0; 
                relay = 1;                //¹Ø±Õ¼ÌµçÆ÷ 
            }
        }    
    }
}

//===========================================

void main()                                        //Ö÷º¯Êý
{
    yellow = 0;                                   //¿ª»ú»ÆµÆÁÁÒ»ÏÂ
    DelayMs(500);                            //ÑÓʱ500ms
    io_inithw();
    int_inithw();
    
    while(NRF24L01_Check());     // µÈ´ý¼ì²âµ½NRF24L01£¬³ÌÐò²Å»áÏòÏÂÖ´ÐÐ
    NRF24L01_Init();                     // NRF24L01³õʼ»¯ÅäÖà ³õʼ»¯Îª½ÓÊÕģʽ
    
    while(1)                                        //Ñ­»·
    {
        work();                                        //µ÷Óù¤×÷º¯Êý
        yellow = ~hw;                       //ºìÍâÈËÌå¸ÐӦָʾµÆ 
        DelayMs(100);                   //100ms
        
        //--------------------------------------------
        
            if(NRF_IRQ==0)                                                 // Èç¹ûÎÞÏßÄ£¿é½ÓÊÕµ½Êý¾Ý
        {
            if(NRF24L01_RxPacket(rece_buf)==0)  // Èç¹ûÕýÈ·½ÓÊÕµ½Êý¾Ý
            {
                if((rece_buf[0])==0x01)                      // Èç¹ûÊÕµ½µÄ32¸ö×Ö½ÚÖеĵÚ1¸ö×Ö½ÚÊÇ1
                {
                    gMode++;
                    if(gMode==3)                    // Èç¹ûµ½¾¡Í·ÁË
                        gMode=1;                        // »Øµ½µÚÒ»ÖÖģʽ
                }
              else if((rece_buf[0])==0x03 || gMode == 2)                      // Èç¹ûÊÕµ½µÄ32¸ö×Ö½ÚÖеĵÚ1¸ö×Ö½ÚÊÇ3
                {
                        relay = 0;
                }
                else if((rece_buf[0])==0x04 || gMode == 2)          // Èç¹ûÊÕµ½µÄ32¸ö×Ö½ÚÖеĵÚ1¸ö×Ö½ÚÊÇ4
                {
                        relay = 1;
                }
            }
        }
        

    }
}




//================================================================================================================================
//================================================ÒÔÏÂÊÇNRFµÄ×Ó³ÌÐòŽì=============================================================
//================================================================================================================================
/* ¶¨Òå·¢ËͺͽÓÊÕµØÖ· */
const unsigned char TX_ADDRESS[TX_ADR_WIDTH]={0x68,0x86,0x66,0x88,0x28}; 
const unsigned char RX_ADDRESS[RX_ADR_WIDTH]={0x68,0x86,0x66,0x88,0x28}; 

/* SPIͨÐÅÊÕ·¢Ò»¸ö×Ö½Ú */

unsigned char SPI_RW(unsigned char dat)
{
    unsigned char i;
    
    for(i=0; i<8; i++) // Êä³ö8λ
    {
        NRF_MOSI=(dat&0x80); // MSB TO MOSI
        dat=(dat<<1);    // shift next bit to MSB
        NRF_SCK=1;
        dat|=NRF_MISO;            // capture current MISO bit
        NRF_SCK=0;
    }
    return dat;
}

/*********************************************/
/* º¯Êý¹¦ÄÜ£º¸ø24L01µÄ¼Ä´æÆ÷дֵ£¨Ò»¸ö×Ö½Ú£© */
/* Èë¿Ú²ÎÊý£ºreg   ҪдµÄ¼Ä´æÆ÷µØÖ·          */
/*           value ¸ø¼Ä´æÆ÷дµÄÖµ            */
/* ³ö¿Ú²ÎÊý£ºstatus ״ֵ̬                   */
/*********************************************/
unsigned char NRF24L01_Write_Reg(unsigned char reg,unsigned char value)
{
    unsigned char status;

    NRF_CSN=0;                  //CSN=0;   
      status = SPI_RW(reg);//·¢ËͼĴæÆ÷µØÖ·,²¢¶Áȡ״ֵ̬
    SPI_RW(value);
    NRF_CSN=1;                  //CSN=1;

    return status;
}

/*************************************************/
/* º¯Êý¹¦ÄÜ£º¶Á24L01µÄ¼Ä´æÆ÷Öµ £¨Ò»¸ö×Ö½Ú£©      */
/* Èë¿Ú²ÎÊý£ºreg  Òª¶ÁµÄ¼Ä´æÆ÷µØÖ·               */
/* ³ö¿Ú²ÎÊý£ºvalue ¶Á³ö¼Ä´æÆ÷µÄÖµ                */
/*************************************************/
unsigned char NRF24L01_Read_Reg(unsigned char reg)
{
     unsigned char value;

    NRF_CSN=0;              //CSN=0;   
      SPI_RW(reg);//·¢ËͼĴæÆ÷Öµ(λÖÃ),²¢¶Áȡ״ֵ̬
    value = SPI_RW(NOP);
    NRF_CSN=1;             //CSN=1;

    return value;
}
/*********************************************/
/* º¯Êý¹¦ÄÜ£º¶Á24L01µÄ¼Ä´æÆ÷Öµ£¨¶à¸ö×Ö½Ú£©   */
/* Èë¿Ú²ÎÊý£ºreg   ¼Ä´æÆ÷µØÖ·                */
/*           *pBuf ¶Á³ö¼Ä´æÆ÷ÖµµÄ´æ·ÅÊý×é    */
/*           len   Êý×é×Ö½Ú³¤¶È              */
/* ³ö¿Ú²ÎÊý£ºstatus ״ֵ̬                   */
/*********************************************/
unsigned char NRF24L01_Read_Buf(unsigned char reg,unsigned char *pBuf,unsigned char len)
{
    unsigned char status,i;
    NRF_CSN=0;                   //CSN=0       
      status=SPI_RW(reg);//·¢ËͼĴæÆ÷µØÖ·,²¢¶Áȡ״ֵ̬          
     for(i=0; i0XFF);//¶Á³öÊý¾Ý
    NRF_CSN=1;                 //CSN=1
      return status;        //·µ»Ø¶Áµ½µÄ״ֵ̬
}
/**********************************************/
/* º¯Êý¹¦ÄÜ£º¸ø24L01µÄ¼Ä´æÆ÷дֵ£¨¶à¸ö×Ö½Ú£©  */
/* Èë¿Ú²ÎÊý£ºreg  ҪдµÄ¼Ä´æÆ÷µØÖ·            */
/*           *pBuf ÖµµÄ´æ·ÅÊý×é               */
/*           len   Êý×é×Ö½Ú³¤¶È               */
/**********************************************/
unsigned char NRF24L01_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char len)
{
    unsigned char status, i;
    
    NRF_CSN=0;
  status = SPI_RW(reg);//·¢ËͼĴæÆ÷Öµ(λÖÃ),²¢¶Áȡ״ֵ̬
  for(i=0; i//дÈëÊý¾Ý
    NRF_CSN=1;
    
  return status;          //·µ»Ø¶Áµ½µÄ״ֵ̬
}                                                     

/*********************************************/
/* º¯Êý¹¦ÄÜ£º24L01½ÓÊÕÊý¾Ý                   */
/* Èë¿Ú²ÎÊý£ºrxbuf ½ÓÊÕÊý¾ÝÊý×é              */
/* ·µ»ØÖµ£º 0   ³É¹¦ÊÕµ½Êý¾Ý                 */
/*          1   ûÓÐÊÕµ½Êý¾Ý                 */
/*********************************************/
unsigned char NRF24L01_RxPacket(unsigned char *rxbuf)
{
    unsigned char state;
     
    state=NRF24L01_Read_Reg(STATUS);  //¶Áȡ״̬¼Ä´æÆ÷µÄÖµ         
    NRF24L01_Write_Reg(WRITE_REG+STATUS,state); //Çå³ýTX_DS»òMAX_RTÖжϱêÖ¾
    if(state&RX_OK)//½ÓÊÕµ½Êý¾Ý
    {
        NRF24L01_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//¶ÁÈ¡Êý¾Ý
        NRF24L01_Write_Reg(FLUSH_RX,0xff);//Çå³ýRX FIFO¼Ä´æÆ÷
        return 0; 
    }       
    return 1;//ûÊÕµ½ÈκÎÊý¾Ý
}
/**********************************************/
/* º¯Êý¹¦ÄÜ£ºÉèÖÃ24L01Ϊ·¢ËÍģʽ              */
/* Èë¿Ú²ÎÊý£ºtxbuf  ·¢ËÍÊý¾ÝÊý×é              */
/* ·µ»ØÖµ£» 0x10    ´ïµ½×î´óÖØ·¢´ÎÊý£¬·¢ËÍʧ°Ü*/
/*          0x20    ³É¹¦·¢ËÍÍê³É              */
/*          0xff    ·¢ËÍʧ°Ü                  */
/**********************************************/
unsigned char NRF24L01_TxPacket(unsigned char *txbuf)
{
    unsigned char state;
   
    NRF_CE=0;//CEÀ­µÍ£¬Ê¹ÄÜ24L01ÅäÖÃ
      NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//дÊý¾Ýµ½TX BUF  32¸ö×Ö½Ú
     NRF_CE=1;//CEÖøߣ¬Ê¹ÄÜ·¢ËÍ       
    while(NRF_IRQ==1);//µÈ´ý·¢ËÍÍê³É
    state=NRF24L01_Read_Reg(STATUS);  //¶Áȡ״̬¼Ä´æÆ÷µÄÖµ       
    NRF24L01_Write_Reg(WRITE_REG+STATUS,state); //Çå³ýTX_DS»òMAX_RTÖжϱêÖ¾
    if(state&MAX_TX)//´ïµ½×î´óÖØ·¢´ÎÊý
    {
        NRF24L01_Write_Reg(FLUSH_TX,0xff);//Çå³ýTX FIFO¼Ä´æÆ÷ 
        return MAX_TX; 
    }
    if(state&TX_OK)//·¢ËÍÍê³É
    {
        return TX_OK;
    }
    return 0xff;//·¢ËÍʧ°Ü
}
/********************************************/
/* º¯Êý¹¦ÄÜ£º¼ì²â24L01ÊÇ·ñ´æÔÚ              */
/* ·µ»ØÖµ£»  0  ´æÔÚ                        */
/*           1  ²»´æÔÚ                      */
/********************************************/ 
unsigned char NRF24L01_Check(void)
{
    unsigned char check_in_buf[5]={0x11,0x22,0x33,0x44,0x55};
    unsigned char check_out_buf[5]={0x00};

    NRF24L01_Write_Buf(WRITE_REG+TX_ADDR, check_in_buf, 5);
    
    NRF24L01_Read_Buf(READ_REG+TX_ADDR, check_out_buf, 5);
    
    
    if((check_out_buf[0] == 0x11)&&\
       (check_out_buf[1] == 0x22)&&\
       (check_out_buf[2] == 0x33)&&\
       (check_out_buf[3] == 0x44)&&\
       (check_out_buf[4] == 0x55))return 0;
    else return 1;
}    

/* NRF24L01³õʼ»¯ÅäÖà ³õʼ»¯Îª½ÓÊÕģʽ */
void NRF24L01_Init(void)
{    
    NRF_CE=0;          
  NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//Ñ¡ÔñͨµÀ0µÄÓÐЧÊý¾Ý¿í¶È
    NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(unsigned char*)TX_ADDRESS,TX_ADR_WIDTH);//дTX½ÚµãµØÖ· 
    NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(unsigned char*)RX_ADDRESS,RX_ADR_WIDTH); //ÉèÖÃTX½ÚµãµØÖ·,Ö÷ҪΪÁËʹÄÜACK      
    NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01);     //ʹÄÜͨµÀ0µÄ×Ô¶¯Ó¦´ð    
    NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01); //ʹÄÜͨµÀ0µÄ½ÓÊÕµØÖ·  
    NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);//ÉèÖÃ×Ô¶¯ÖØ·¢¼ä¸ôʱ¼ä:500us + 86us;×î´ó×Ô¶¯ÖØ·¢´ÎÊý:10´Î
    NRF24L01_Write_Reg(WRITE_REG+RF_CH,40);       //ÉèÖÃRFͨµÀΪ125
    NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x27);  //7dbÔöÒæ,250kbps 
    NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0f);    //ÅäÖûù±¾¹¤×÷ģʽµÄ²ÎÊý;PWR_UP,EN_CRC,16BIT_CRC,½ÓÊÕģʽ,¿ªÆôËùÓÐÖжÏ
    NRF24L01_Write_Reg(FLUSH_RX,0xff);//Çå³ýRX FIFO¼Ä´æÆ÷    
    NRF24L01_Write_Reg(FLUSH_TX,0xff);//Çå³ýTX FIFO¼Ä´æÆ÷    
    NRF_CE=1;    //CEÖøß
}

/* ÅäÖÃΪ·¢ËÍģʽ */
void TX_Mode(void)  
{
    NRF_CE=0;
    NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);    //ÅäÖûù±¾¹¤×÷ģʽµÄ²ÎÊý;PWR_UP,EN_CRC,16BIT_CRC,·¢ËÍģʽ,¿ªÆôËùÓÐÖжÏ
    NRF24L01_Write_Reg(FLUSH_RX,0xff);//Çå³ýRX FIFO¼Ä´æÆ÷
    NRF24L01_Write_Reg(FLUSH_TX,0xff);//Çå³ýRX FIFO¼Ä´æÆ÷ 
    NRF_CE=1;          
}

/* ÅäÖÃΪ½ÓÊÕģʽ */
void RX_Mode(void)  
{
    NRF_CE=0;          
    NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0f);    //ÅäÖûù±¾¹¤×÷ģʽµÄ²ÎÊý;PWR_UP,EN_CRC,16BIT_CRC,½ÓÊÕģʽ,¿ªÆôËùÓÐÖжÏ
    NRF24L01_Write_Reg(FLUSH_RX,0xff);//Çå³ýRX FIFO¼Ä´æÆ÷
    NRF24L01_Write_Reg(FLUSH_TX,0xff);//Çå³ýRX FIFO¼Ä´æÆ÷ 
    NRF_CE=1;          
}

//================================================================================================================================







不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^