⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nrf24l01.lst

📁 C51驱动nrf24l01无线发送
💻 LST
📖 第 1 页 / 共 2 页
字号:
 159   1          unsigned char revale=0;
 160   1        sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况
 161   1        if(RX_DR)       // 判断是否接收到数据
 162   1        {
 163   2          CE = 0;       //SPI使能
 164   2          inerDelay_us(DELAY);
 165   2          SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
 166   2          revale =1;      //读取数据完成标志
 167   2        }
 168   1        SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
 169   1        return revale;
 170   1      }
 171          /*********************************************************************************************************
             -**
 172          /*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)
 173          /*功能:发送 tx_buf中数据
 174          /*********************************************************************************************************
             -*/
C51 COMPILER V9.00   NRF24L01                                                              07/18/2012 17:58:49 PAGE 4   

 175          void nRF24L01_TxPacket(unsigned char * tx_buf)
 176          {
 177   1        CE=0;     //StandBy I模式 
 178   1        inerDelay_us(DELAY);
 179   1        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
 180   1        SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);        // 装载数据  
 181   1        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);        // IRQ收发完成中断响应,16位CRC,主发送
 182   1        CE=1;    //置高CE,激发数据发送
 183   1        inerDelay_us(130);
 184   1      }
 185          
 186          void nRF24L01_Initial(void)
 187          {
 188   1        CE=0;// chip enable
 189   1        CSN=1;// Spi disable
 190   1        SCK=0;// Spi clock line init high
 191   1        MOSI = 1;//mosi input
 192   1        IRQ = 1;//IRQ input
 193   1        
 194   1      }
 195          /**************************************************
 196          Function: RX_Mode();
 197          
 198          Description:
 199            This function initializes one nRF24L01 device to
 200            RX Mode, set RX address, writes RX payload width,
 201            select RF channel, datarate & LNA HCURR.
 202            After init, CE is toggled high, which means that
 203            this device is now ready to receive a datapacket. */
 204          /**************************************************/
 205          /*
 206          void RX_Mode(void)
 207          {
 208            CE=0;
 209            inerDelay_us(10);
 210          //  DI();
 211            SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // Use the same address on the RX devic
             -e as the TX device
 212          
 213              //SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
 214            SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);      // disable Auto.Ack:Pipe0
 215            SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
 216            SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03);//5byte的地址
 217            SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00);//禁止重发
 218            SPI_RW_Reg(WRITE_REG + RF_CH, 20);        // Select RF channel 2440M
 219            SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width
 220            SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
 221            SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enable
             -d..
 222          //  EI();
 223            CE=1;
 224            inerDelay_us(500);
 225            //IE0 = 0;
 226            //  This device is now ready to receive one packet of 16 bytes payload from a TX device sending to addres
             -s
 227            //  '3443101001', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 2Mbps.
 228          
 229          }*/
 230          void RX_Mode(void)
 231          {
 232   1        CE=0;  
 233   1        SPI_Write_Buf(WRITE_REG  +  RX_ADDR_P0,  TX_ADDRESS,  TX_ADR_WIDTH);  
C51 COMPILER V9.00   NRF24L01                                                              07/18/2012 17:58:49 PAGE 5   

 234   1        SPI_RW_Reg(WRITE_REG  +  EN_AA,  0x01);           //  Enable  Auto.Ack:Pipe0   
 235   1        SPI_RW_Reg(WRITE_REG  +  EN_RXADDR,  0x01);    //  Enable  Pipe0   
 236   1        SPI_RW_Reg(WRITE_REG  +  RF_CH,  40);               //  Select  RF  channel  40 
 237   1        SPI_RW_Reg(WRITE_REG  +  RX_PW_P0,  TX_PLOAD_WIDTH);  //&  Prim:RX.  RX_DR  enabled..    
 238   1        SPI_RW_Reg(WRITE_REG  +  RF_SETUP,  0x07);   
 239   1        SPI_RW_Reg(WRITE_REG  +  CONFIG,  0x0f); 
 240   1        CE  =  1;  
 241   1      }
 242          /**************************************************/
 243          
 244          /**************************************************
 245          Function: TX_Mode();
 246          
 247          Description:
 248            This function initializes one nRF24L01 device to
 249            TX mode, set TX address, set RX address for auto.ack,
 250            fill TX payload, select RF channel, datarate & TX pwr.
 251            PWR_UP is set, CRC(2 bytes) is enabled, & PRIM:TX.
 252          
 253            ToDo: One high pulse(>10us) on CE will now send this
 254            packet and expext an acknowledgment from the RX device. */
 255          /**************************************************/
 256          /*
 257          void TX_Mode(unsigned char *Rf_Send_Buf)
 258          {
 259            CE=0;
 260            inerDelay_us(10);
 261            SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
 262            SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
 263              //SPI_Write_Buf(WR_TX_PLOAD, Buffer, TX_PLOAD_WIDTH); // Writes data to TX payload
 264            SPI_Write_Buf(WR_TX_PLOAD, Rf_Send_Buf, TX_PLOAD_WIDTH); // Writes data to TX payload
 265              //SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
 266            SPI_RW_Reg(WRITE_REG + EN_AA, 0x00);      // disable Auto.Ack:Pipe0
 267            SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
 268            SPI_RW_Reg(WRITE_REG + SETUP_AW, 0x03);//5byte的地址
 269              //SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
 270            SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x00);//禁止重发
 271            SPI_RW_Reg(WRITE_REG + RF_CH, 20);        // Select RF channel 2440M
 272            SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR 
 273            SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); //设置发送数据长度,本次设置为32字节
 274              //SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & 
             -TX_DS enabled..
 275            SPI_RW_Reg(WRITE_REG + CONFIG, 0x3e);//
 276            CE=1;
 277            inerDelay_us(500);
 278            SPI_RW_Reg(FLUSH_TX, 0x00); 
 279            SPI_RW_Reg(WRITE_REG + STATUS, 0x70);//RESET INTTERUPT
 280            //IE0 = 0;
 281          }
 282          */
 283          void TX_Mode(unsigned char *Rf_Send_Buf)
 284          {   
 285   1        CE=0;  
 286   1         
 287   1        SPI_Write_Buf(WRITE_REG  +  TX_ADDR,  TX_ADDRESS,  TX_ADR_WIDTH);  
 288   1        SPI_Write_Buf(WRITE_REG  +  RX_ADDR_P0,  TX_ADDRESS,  TX_ADR_WIDTH);  
 289   1        SPI_Write_Buf(WR_TX_PLOAD,  Rf_Send_Buf,  TX_PLOAD_WIDTH);  //  Writes  data  to  TX  payload  
 290   1         
 291   1        SPI_RW_Reg(WRITE_REG  +  EN_AA,  0x01);           //  Enable  Auto.Ack:Pipe0   
 292   1        SPI_RW_Reg(WRITE_REG  +  EN_RXADDR,  0x01);    //  Enable  Pipe0   
 293   1        SPI_RW_Reg(WRITE_REG  +  SETUP_RETR,  0x1a);  //  500us  +  86us,  10  retrans...  
 294   1        SPI_RW_Reg(WRITE_REG  +  RF_CH,  40);               //  Select  RF  channel  40   
C51 COMPILER V9.00   NRF24L01                                                              07/18/2012 17:58:49 PAGE 6   

 295   1        SPI_RW_Reg(WRITE_REG  +  RF_SETUP,  0x07);     //  TX_PWR:0dBm,  Datarate:2Mbps,  LNA:HCURR  
 296   1        SPI_RW_Reg(WRITE_REG  +  CONFIG,  0x0e);  
 297   1        CE=1;    
 298   1        inerDelay_us(130);
 299   1      } 
 300          void rec_rf_data(unsigned char *Rf_Rec_Buf)
 301          {
 302   1        SPI_Read_Buf(RD_RX_PLOAD,Rf_Rec_Buf,TX_PLOAD_WIDTH);
 303   1        RX_Mode();
 304   1        SPI_RW_Reg(WRITE_REG + STATUS, 0x70);//RESET INTTERUPT
 305   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    653    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      25
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -