Znn3bq.jpeg
²é¿´: 342  |  »Ø¸´: 2
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£

ahua532

гæ (³õÈëÎÄ̳)

[½»Á÷] ¡¾ÇóÖú¡¿ÇóÖúNRF24L01Çý¶¯³ÌÐò

дNRF24L01µÄÇý¶¯Óöµ½ÎÊÌâ Ë­Äܸø¸öÍêÕûµÄÇý¶¯°¡¡£

[ Last edited by bslt on 2009-5-11 at 10:39 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

Îҳɲ»ÁËÌì²Å£¬ÏëÒª³ÉΪÈ˲Å
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

»ÃÓ°ÎÞºÛ

ÈÙÓþ°æÖ÷ (ÖªÃû×÷¼Ò)

Сľ³æÂÛ̳×ܼà

ÓÅÐã°æÖ÷

Õâ¸ö´ÓÍøÉÏÕÒ²»µ½Âð£¿
ûÄÜÁ¦Î£º¦×æ¹ú£¬Ã»ÀíÓɱ³ÀëÈËÃñ£¬Ã»×ʱ¾ºÃÒݶñÀÍ£¬Ã»±¾ÊÂËðÈËÀû¼º£¬Ã»»ú»á¼ûÀûÍüÒ壬ûµ¨Á¿Î¥·¨ÂҼͣ¬Ã»³®Æ±½¾ÉÝÒùÒÝ£¬Ö»ºÃÓÞÃÁÎÞÖªÁË£¡
2Â¥2009-05-11 09:36:35
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

bslt

½ð³æ (ÖøÃûдÊÖ)

--<-<-<@

http://blog.21ic.com/user1/5601/archives/2009/56945.html

nRF2401µÄC51Çý¶¯³ÌÐò[ÒѾ­µ÷ÊÔͨ¹ý]

Microcontrol CODE


  Desc    Demo App for RF2401 Module
      Vender  httpwww.newmsg.com
  Date    2007-3-12
  Update   2007-9-8

ÕâÊÇÎÒ¹ºÂòÔÚnRF2401ʱ´Ó¿ª·¢ÉÌÖеõ½µÄ´úÂë¡£ÎÒÒѾ­ÑéÖ¤¹ý¡£
¹©´ó¼ÒѧϰÓã¬Ö»ÒªÐÞ¸ÄÏ´úÂë¾Í¿ÉÒÔÓ¦Óõ½ÆäËûµÄµ¥Æ¬»ú¡£
Õâ¸ö³ÌÐòÊÇÒ»¸ö°ëË«¹¤µÄͨÐÅģʽ.


££i nclude reg51.h
³£Á¿¶¨Òå
#define uchar unsigned char
#define uint  unsigned int

#define BYTE_BIT0      0x01
#define BYTE_BIT1      0x02
#define BYTE_BIT2      0x04
#define BYTE_BIT3      0x08
#define BYTE_BIT4      0x10
#define BYTE_BIT5      0x20
#define BYTE_BIT6      0x40
#define BYTE_BIT7      0x80

RF2401_Pins ¶ÔÓ¦Òý½Å , ¾ßÌåϸ½ÚÇë²Î¿¼Ïà¹Øµç·ͼ NewMsg_RFDemo2401.SchDoc(ÓÃPortelDXP´ò¿ª)
sbit PWR_UP      = P1^6;
sbit CE            = P1^2;
      sbit DR2      = P3^5;            ÔÝʱûÓÐÓõ½
      sbit CLK2      = P3^4;
      sbit OUT2      = P3^3;
sbit CS            = P1^1;
sbit DR1      = P1^0;
sbit CLK1      = P3^7;
sbit DATA      = P3^3;

sbit LED0      = P3^4;
sbit LED1      = P3^5;
sbit KEY0      = P3^0;
sbit KEY1      = P3^1;


     RF2401 Configuration                                    
     ±£´æ2401µÄÅäÖÃÐÅÏ¢                                    

=====RF-Configuration-Register ÅäÖÃÐÅÏ¢=====
оƬ²âÊÔÓÃ,ÎÞÐèÐÞ¸Ä
#define TEST_2            0x8E      MSB      D143~D136
#define TEST_1            0x08            D135~D128
#define      TEST_0            0x1C            D127~D120

×¢Òâ DATAx_W + ADDRx_W + CRC µÄÖµ±ØÐëСÓÚ256 !  µ¥¸öÊý¾Ý°üµÄ´óС±ØÐëСÓÚ32×Ö½Ú(256λ)  
#define DATA2_W            0x10      2×Ö½Ú      ÆµµÀ2 Êý¾Ý³¤¶È(µ¥Î»Bit)
#define DATA1_W            0xE0      28×Ö½Ú      ÆµµÀ1 Êý¾Ý³¤¶È(µ¥Î»Bit)

      0xE0 = 224
16bit Address + 224bit(28byte)Data + 16bit CRC = 256bit

×¢Òâ2401ºöÂÔADDRÖг¬¹ýADDR_WÉ趨¿í¶ÈµÄÄÇЩλ,ͬʱµØÖ·²»ÄÜÈ«²¿ÉèÖÃΪ0  
ƵµÀ2 ½ÓÊÕµØÖ·(µ±Ç°Ä£¿éµØÖ·)
#define ADDR2_4            0x00
#define ADDR2_3            0x1c
#define ADDR2_2            0xcc
#define ADDR2_1            0xcc                                                
#define ADDR2_0            0xcc
ƵµÀ1 ½ÓÊÕµØÖ·
#define ADDR1_4            0x00
#define ADDR1_3            0xcc
#define ADDR1_2            0xcc
#define ADDR1_1            0xcc
#define ADDR1_0            0xcc

#define ADDR_W            0x10            2×Ö½Ú      ½ÓÊÕµØÖ·¿í¶È(µ¥Î»Bit)
#define CRC_L            0x1            CRCģʽ 08λ      116
#define CRC_EN            0x1            CRCУÑéÆôÓÃ

#define RX2_EN            0x0            Ë«ÆµµÀ¹¦ÄÜÆôÓÃ
#define CM                  0x1            0Direct mode      1ShockBurst mode
#define RFDR_SB            0x0            0250kbps      11Mbps
#define XO_F            0x3            16M            nRF2401¾§ÕñƵÂÊ
#define RF_PWR            0x3            Ðźŷ¢É书ÂÊ

#define RF_CH            0x2            Channel RF ƵÂÊ
#define RXEN            0x0DEF_RXEN      0Tx      1Rx
³ÌÐò»áÖØÐÂÉèÖôËÏî²ÎÊý

-----------------------------------------------------------
½«ÉèÖÃÐÅÏ¢×éºÏ³Éÿ¸ö×Ö½ÚµÄÊý¾ÝÐÅÏ¢£¬´ËÇøÓòÎÞÐèÐÞ¸Ä
#define RFConfig_Byte0      TEST_2
#define RFConfig_Byte1      TEST_1
#define RFConfig_Byte2      TEST_0
#define RFConfig_Byte3      DATA2_W
#define RFConfig_Byte4      DATA1_W
#define RFConfig_Byte5      ADDR2_4
#define RFConfig_Byte6      ADDR2_3
#define RFConfig_Byte7      ADDR2_2
#define RFConfig_Byte8      ADDR2_1
#define RFConfig_Byte9      ADDR2_0
#define RFConfig_Byte10      ADDR1_4
#define RFConfig_Byte11      ADDR1_3
#define RFConfig_Byte12      ADDR1_2
#define RFConfig_Byte13      ADDR1_1
#define RFConfig_Byte14      ADDR1_0
#define RFConfig_Byte15      (ADDR_W2  CRC_L1  CRC_EN)
#define RFConfig_Byte16      (RX2_EN7  CM6     RFDR_SB5  XO_F 2  RF_PWR)
#define RFConfig_Byte17      (RF_CH1   RXEN)

------------------------------------------------------------
ͨ¹ýºê¶¨Ò彫18×ֽڵļĴæÆ÷²ÎÊý°´ÕÕ¸÷¸ö¹¦ÄÜ·Ö½â,ÒÔ±ãÓÚ²ÎÊýµÄµ÷Õû
unsigned char code nRF2401_Conf[18] ={
     RFConfig_Byte0,      
     RFConfig_Byte1,      
     RFConfig_Byte2,      
     RFConfig_Byte3,      
     RFConfig_Byte4,
     RFConfig_Byte5,      
     RFConfig_Byte6,      
     RFConfig_Byte7,      
     RFConfig_Byte8,      
     RFConfig_Byte9,
     RFConfig_Byte10,
     RFConfig_Byte11,
     RFConfig_Byte12,
     RFConfig_Byte13,
     RFConfig_Byte14,
     RFConfig_Byte15,
     RFConfig_Byte16,
     RFConfig_Byte17
};

------------------------------------------------------------

      nRF2401 TxRx s                              

      void Delay100(void);
      void Config2401(void);      ÅäÖÃ2401,дÈë³õʼ»¯ÉèÖÃ
      void SetTxMode(void);            ÉèÖÃΪ·¢ËÍģʽ
      void SetRxMode(void);            ÉèÖÃΪ½ÓÊÕģʽ
      void nRF2401_TxPacket(unsigned char TxBuf[]);
      ·¢ËÍTxBuf[]ÄÚµÄÊý¾Ý ³¤¶ÈÓÉ DATA1_W ¾ö¶¨
      unsigned char nRF2401_RxPacket(unsigned char RxBuf);
      ¼ì²éÊÇ·ñÓÐÊý¾ÝÐèÒª½ÓÊÜ Èç¹ûÓÐ,Ôò±£´æÖÁRxBuf[]
         ·µ»ØÖµ 0ûÓнÓÊÕµ½Êý¾Ý      1½ÓÊÕµ½Êý¾Ý


16M¾§Õñ 600us×óÓÒ
void Delay100(void)
{
     unsigned int i;
     for(i=0;i100;i++);
}

void Delay(uchar n)
{
     uint i;
     while(n--)
     for(i=0;i80;i++);      
}

bdata unsigned  char DATA_BUF;
#define DATA7      ((DATA_BUF & BYTE_BIT7) != 0)
#define DATA0   ((DATA_BUF & BYTE_BIT0) != 0)

      2401Êý¾Ý´«Êä½Ó¿Ú
      ÏêϸÄÚÈݲμû2401ÊÖ²áConfiguration mode timingÕ½Ú

unsigned char Spi_ByteRead(void)
{
     unsigned char i = 0;
     for (i=0; i8; i++)
     {
           DATA_BUF = DATA_BUF  1;
           CLK1 = 1;
           DATA = 1;      ÉèÖÃΪÊäÈë״̬
           if (DATA)      ¶ÁÈ¡×î¸ß룬±£´æÖÁ×îĩβ£¬Í¨¹ý×óÒÆÎ»Íê³ÉÕû¸ö×Ö½Ú
           {
                 DATA_BUF = BYTE_BIT0;
           }
           else
           {
                 DATA_BUF &= ~BYTE_BIT0;
           }
           CLK1 = 0;
      }

      return DATA_BUF;
}

void Spi_ByteWrite(unsigned char send)
{
     unsigned char i;

     DATA_BUF = send;

     CLK1 = 0;

     for (i=0; i8; i++)
     {
            
          if (DATA7)      ×ÜÊÇ·¢ËÍ×î¸ßλ
       {
               DATA = 1;
        }
       else
         {
            DATA = 0;
         }
           CLK1 = 1;
           DATA_BUF = DATA_BUF  1;
           CLK1 = 0;
     }
}

      RF2401ÅäÖüĴæÆ÷µÄдÈ뷽ʽ
NOTE.
On the falling edge of CS, the nRF2401A updates the number of bits actually shifted
in during the last configuration.
Ex
If the nRF2401A is to be configured for 2 channel RX in ShockBurst., a total of 120
bits must be shifted in during the first configuration after VDD is applied.
Once the wanted protocol, modus and RF channel are set, only one bit (RXEN) is
shifted in to switch between RX and TX.

void Config2401(void)
{
     unsigned int i = 0;
     unsigned char variablel;

     RF2401½øÈëÅäÖ÷½Ê½
     CS = 0;
     CE = 0;
     PWR_UP = 1; Éϵç

     for(i=0; i20; i++)
     {
           Delay100();
     }

     CS = 1;
     DATA = 0;
     CLK1 = 0;

     Delay100();-----
   
     for(i=0; i20; i++)
     {
           Delay100();
     }
   
     PWR_DWN - Configuration_mode      Delay_3ms      

     for(i=0; i18; i++)
     {
           variablel = nRF2401_Conf[I];
           Spi_ByteWrite(variablel);
     }

     Delay100();       configuration mode - stand by mode  

     CS = 0; CSÖõÍʹÅäÖÃÓÐЧ
     Delay100();
}

void SetTxMode(void)
{
     ÉèÖÃΪÅäÖÃģʽ
     PWR_UP = 1;
     CE = 0;
     CS = 1;

     Delay100();

     ÅäÖüĴæÆ÷0×Ö½ÚRXEN ÉèÖÃΪ0·¢ËÍģʽ
     DATA = 0;
     CLK1=1;
     CLK1=0;

     ÉèÖÃΪActivemodes(Tx)
     CS=0;
     CE=1;
     Delay100();
}

void SetRxMode(void)
{
     Delay100();
     ÉèÖÃΪÅäÖÃģʽ
     PWR_UP = 1;
     CE=0;
     CS=1;
     Delay100(); ----
     ÅäÖüĴæÆ÷0×Ö½ÚRXEN ÉèÖÃΪ1½ÓÊÕģʽ
     DATA = 1;
     CLK1 = 1;
     CLK1 = 0;

     ÉèÖÃΪActivemodes(Rx)
     CS=0;
     CE=1;
     Delay100();
}

½ÓÊÕ·½Í¨µÀÓ²¼þµØÖ·
unsigned char TxAddress[]={0xcc,0xcc,0xcc,0xcc};

nRF2401Êý¾Ý·¢Ëͺ¯Êý¶¨ÒåÈçÏ£º
void RF2401_TxPacket(unsigned char TxBuf[])
{
     int i;
     unsigned char variable2;
     CE=1;
     Delay100();
     for(i=0;i (ADDR_W8);i++)      Ð´Èë½ÓÊÕµØÖ·(°´×Ö½Ú¶ÔÆë)
     {
           variable2=TxAddress[I];
           Spi_ByteWrite(variable2);
     }

     for(i=0;i(DATA1_W8);i++)      Ð´ÈëÐèÒª·¢Ë͵ÄÊý¾Ý(°´×Ö½Ú¶ÔÆë)
     {
           variable2=TxBuf[I];
           Spi_ByteWrite(variable2);
     }

     CE=0; CEÖõÍʹ·¢ËÍÓÐЧ
      
     Delay100(); ʱÖÓÐÅºÅ¸ßµçÆ½±£³Ö
     Delay100(); ʱÖÓÐÅºÅ¸ßµçÆ½±£³Ö
     Delay100(); ʱÖÓÐÅºÅ¸ßµçÆ½±£³Ö
     Delay100(); ʱÖÓÐÅºÅ¸ßµçÆ½±£³Ö
}


½ÓÊÕÊý¾Ýº¯Êý
·µ»Ø 0ûÓÐÊý¾Ý½ÓÊÕ
     1½ÓÊÕµ½Êý¾Ý
unsigned char RF2401_RxPacket(unsigned char RxBuf)
{
     unsigned int i;

     DR1=1;

     if(DR1)
     {
           for (i=0; iDATA1_W8; i++)
           {
                 RxBuf      = Spi_ByteRead();
                 RxBuf++;
           }
           return 1;
     }
     return 0;
}





unsigned char TxRxBuf[32];
void main(void)
{
     unsigned int i = 0;
     unsigned int j = 0;
     unsigned int led0_count = 0;
     unsigned int led1_count = 0;

     
     Config2401();
     Delay100();

     TxRxBuf[0] = 1;
     TxRxBuf[DATA1_W8 - 1] = 1;

     SetTxMode();                         Set Tx Mode

     RF2401_TxPacket(TxRxBuf);                   Transmit Tx buffer data

     LED0 = 0;
     LED1 = 0;

     Delay(500);                         delay for led light      

     LED0 = 1;
     LED1 = 1;                         led close
     TxRxBuf[0] = 0xff;
     TxRxBuf[DATA1_W8 - 1] = 0xff;                              
     SetRxMode();                         Set RF2401 in Rx mode
     while(1)
     {                                         
       for(i=0;i30;i++) for(j=0;j30;j++);
       if (RF2401_RxPacket(TxRxBuf) == 1)      ·µ»Ø1 ±íÃ÷ÓÐÊý¾Ý°ü½ÓÊÕµ½
           {
                 if (TxRxBuf[0]==1)
                 {
                       led0_count=15;
                 }
                 if (TxRxBuf[DATA1_W8 - 1]==1)
                 {
                       led1_count=15;
                 }
           }
           TxRxBuf[0]=0;
           TxRxBuf[DATA1_W8 - 1]=0;
           °´¼ü¼ì²â
           if (KEY0==0)
           {
                 TxRxBuf[0] = 1;
                 led0_count=15;
                 while(      KEY0==0);
           }
           if (KEY1==0)
           {
                 TxRxBuf[DATA1_W8 - 1] = 1;
                 led1_count=15;
                 while(      KEY1==0);
           }
           if (TxRxBuf[0]==1  TxRxBuf[DATA1_W8 - 1]==1)
           {
                 SetTxMode();                        ÉèÖÃΪ·¢Éäģʽ
                 RF2401_TxPacket(TxRxBuf);      ·¢ËÍÊý¾Ý
                 SetRxMode();
           }
           TxRxBuf[0]=0;
           TxRxBuf[DATA1_W8 - 1]=0;

           LEDÏÔʾÑÓʱ
           if (led0_count0)      
           {
                 led0_count--;
                 LED0 = 0;
           }
           else LED0 = 1;
           if (led1_count0)
           {
                 led1_count--;
                 LED1 = 0;
           }
           else LED1 = 1;

     }end_while(1);
}

[ Last edited by bslt on 2009-5-11 at 10:12 ]
±ðÃÔÁµ¸ç£¬¸ç²»Ö»ÊǸö´«Ëµ...
3Â¥2009-05-11 10:07:41
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ ahua532 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 293Çóµ÷¼Á +5 ÎÒ°®¸ßÊý¸ßÊý°®Î 2026-04-12 5/250 2026-04-12 08:36 by Sealedwind
[¿¼ÑÐ] 086000µ÷¼Á +5 Ê®Æßsa 2026-04-07 5/250 2026-04-11 10:38 by ×ÏêØ×ÏÆå
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤µ÷¼Á 10+11 ÏÂÒ»Õ¾Éϰ¶@ 2026-04-10 36/1800 2026-04-11 10:26 by 89436494
[¿¼ÑÐ] Ò»Ö¾Ô¸211£¬»¯Ñ§310·Ö£¬±¾¿ÆÖصãË«·Ç£¬Çóµ÷¼Á +23 ŬÁ¦·Ü¶·112 2026-04-08 23/1150 2026-04-10 23:29 by 314126402
[¿¼ÑÐ] ±¾¿ÆÄÏ·½Ò½¿Æ´óѧ Ò»Ö¾Ô¸985 ҩѧѧ˶284·Ö Çóµ÷¼Á +4 ÈõË®ÌýÎÄ 2026-04-09 4/200 2026-04-10 22:01 by doctff
[¿¼ÑÐ] ÉúÎïѧ308·ÖÇóµ÷¼Á£¨Ò»Ö¾Ô¸»ª¶«Ê¦´ó£©×ö¹ý·Ö×ÓʵÑé +8 ÏàÐűػá¹ââÍòÕ 2026-04-07 9/450 2026-04-10 21:03 by zhouxiaoyu
[ÂÛÎÄͶ¸å] mdpiСÐÞrvrʱ¼äËÄÎåÌìÁË 20+3 ¹þ¹þhigh 2026-04-08 5/250 2026-04-10 16:02 by ±±¾©À³ÒðÈóÉ«
[¿¼ÑÐ] 336²ÄÁÏÓ뻯¹¤085600Çóµ÷¼Á +21 Ë®ÐǼÇinfp 2026-04-05 24/1200 2026-04-10 15:28 by luoyongfeng
[¿¼ÑÐ] ²ÄÁϵ÷¼Á +11 Ò»ÑùYWY 2026-04-05 11/550 2026-04-10 09:32 by ÖÓÖÞ2011
[¿¼ÑÐ] ²ÄÁϹ¤³Ìµ÷¼Á +12 СÁõͬѧ߹߹ 2026-04-06 13/650 2026-04-09 17:07 by luoyongfeng
[¿¼ÑÐ] »¯Ñ§¹¤³ÌÓë¼¼Êõרҵһ־Ը¹þ¹¤³Ì 291·ÖBÇø ¹ú¼Ò¼¶´ó´´¸ºÔðÈË ÓÐÒ»×÷ÂÛÎÄ +13 Emmy~ 2026-04-09 13/650 2026-04-09 14:47 by onlyÖÜ
[¿¼ÑÐ] ÇóÖú071001µ÷¼Á£¡£¡£¡ +7 »ÆÊØËÉ 2026-04-05 8/400 2026-04-09 09:07 by ÐìÁ¼°×ü´óÏÀ
[¿¼ÑÐ] 275 Çóµ÷¼Á +8 Lei812514 2026-04-07 8/400 2026-04-08 12:46 by chemisry
[¿¼ÑÐ] 323Çóµ÷¼Á +3 ÁÖzlu 2026-04-07 4/200 2026-04-07 23:21 by lbsjt
[¿¼ÑÐ] 22408 µ÷¼Á²ÄÁÏ +7 ÎÒ½Ðez 2026-04-06 8/400 2026-04-07 17:12 by À¶ÔÆË¼Óê
[¿¼ÑÐ] Ò»Ö¾Ô¸Î÷µç085401Çóµ÷¼Á +4 sunw1306 2026-04-07 4/200 2026-04-07 16:40 by à£à£à£0119
[¿¼ÑÐ] 372·Ö²ÄÁÏÓ뻯¹¤£¨085600£©Ó¢¶þÊý¶þÇóµ÷¼Á +4 À¶¼ãƬ 2026-04-06 4/200 2026-04-07 12:30 by dongzh2009
[¿¼ÑÐ] 297·Ö083200ÇóÖú +9 aekx 2026-04-05 9/450 2026-04-06 20:57 by flysky1234
[¿¼ÑÐ] 307Çóµ÷¼Á +3 ËùÄî¼°ËùÍû 2026-04-06 3/150 2026-04-06 17:30 by ÍÁľ˶ʿÕÐÉú
[¿¼ÑÐ] 0857´óÀà»·¾³¹¤³ÌBÇøÇóµ÷¼Á +3 ¹¨ÓíÃú 2026-04-05 3/150 2026-04-06 10:22 by À¶ÔÆË¼Óê
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û