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

📄 24l01.lst

📁 RF24L01例程(FLY2000-51)
💻 LST
📖 第 1 页 / 共 2 页
字号:
 129   2                      _nop_();
 130   2                      _nop_();
 131   2                      SCK = 1;                      // Set SCK high..
 132   2                      _nop_();
 133   2                      _nop_();
 134   2                      uchar |= MISO;                    // capture current MISO bit
 135   2                      _nop_();
 136   2                      _nop_();
 137   2                      SCK = 0;                          // ..then set SCK low again
 138   2                      _nop_();
 139   2                      _nop_();
 140   2              }
 141   1          return(uchar);                        // return read uchar
 142   1      }
 143          /****************************************************************************************************
 144          /*函数:uchar SPI_Read(uchar reg)
 145          /*功能:NRF24L01的SPI时序
 146          /****************************************************************************************************/
 147          uchar SPI_Read(uchar reg)
 148          {
 149   1              uchar reg_val;
 150   1              
 151   1              CSN = 0;                      // CSN low, initialize SPI communication...
 152   1              SPI_RW(reg);            // Select register to read from..
 153   1              reg_val = SPI_RW(0);    // ..then read registervalue
 154   1              CSN = 1;                // CSN high, terminate SPI communication
 155   1              
 156   1              return(reg_val);        // return register value
 157   1      }
 158          /****************************************************************************************************/
 159          /*功能:NRF24L01读写寄存器函数
 160          /****************************************************************************************************/
 161          uint SPI_RW_Reg(uchar reg, uchar value)
 162          {
 163   1              uint status;
 164   1              
 165   1              CSN = 0;                   // CSN low, init SPI transaction
 166   1              status = SPI_RW(reg);      // select register
 167   1              SPI_RW(value);             // ..and write value to it..
 168   1              CSN = 1;                   // CSN high again
 169   1              
 170   1              return(status);            // return nRF24L01 status uchar
 171   1      }
 172          /****************************************************************************************************/
 173          /*函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
 174          /*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数
 175          /****************************************************************************************************/
 176          uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
C51 COMPILER V7.06   24L01                                                                 08/18/2010 16:05:47 PAGE 4   

 177          {
 178   1              uint status,uchar_ctr;
 179   1              
 180   1              CSN = 0;                                // Set CSN low, init SPI tranaction
 181   1              status = SPI_RW(reg);                   // Select register to write to and read status uchar
 182   1              
 183   1              for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)
 184   1                      pBuf[uchar_ctr] = SPI_RW(0);    // 
 185   1              
 186   1              CSN = 1;                           
 187   1              
 188   1              return(status);                    // return nRF24L01 status uchar
 189   1      }
 190          /*********************************************************************************************************
 191          /*函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
 192          /*功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数
 193          /*********************************************************************************************************
             -/
 194          uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
 195          {
 196   1              uint status,uchar_ctr;
 197   1              
 198   1              CSN = 0;            //SPI使能       
 199   1              status = SPI_RW(reg);   
 200   1              for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) //
 201   1              SPI_RW(*pBuf++);
 202   1              CSN = 1;           //关闭SPI
 203   1              return(status);    // 
 204   1      }
 205          /****************************************************************************************************/
 206          /*函数:void SetRX_Mode(void)
 207          /*功能:数据接收配置 
 208          /****************************************************************************************************/
 209          void SetRX_Mode(void)
 210          {
 211   1              CE=0;
 212   1      
 213   1              SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);                   // IRQ收发完成中断响应,16位CRC ,主接收
 214   1      
 215   1              CE = 1; 
 216   1              inerDelay_us(130);                       //old is '130'
 217   1      }
 218          /******************************************************************************************************/
 219          /*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
 220          /*功能:数据读取后放如rx_buf接收缓冲区中
 221          /******************************************************************************************************/
 222          unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
 223          {
 224   1          unsigned char revale=0;
 225   1              sta=SPI_Read(STATUS);   // 读取状态寄存其来判断数据接收状况
 226   1      
 227   1              if(RX_DR)                               // 判断是否接收到数据
 228   1              {
 229   2                  CE = 0;                     //SPI使能
 230   2      
 231   2                      SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
 232   2                      revale =1;                      //读取数据完成标志
 233   2              }
 234   1              SPI_RW_Reg(WRITE_REG+STATUS,sta);   //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
 235   1              return revale;
 236   1      }
 237          /*********************************************************************************************************
C51 COMPILER V7.06   24L01                                                                 08/18/2010 16:05:47 PAGE 5   

             -**
 238          /*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)
 239          /*功能:发送 tx_buf中数据
 240          /*********************************************************************************************************
             -*/
 241          void nRF24L01_TxPacket(unsigned char * tx_buf)
 242          {
 243   1              CE=0;                   //StandBy I模式 
 244   1              SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
 245   1              SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);                      // 装载数据    
 246   1              SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);                    // IRQ收发完成中断响应,16位CRC,主发送
 247   1              CE=1;            //置高CE,激发数据发送
 248   1              inerDelay_us(60);                // old is '10'
 249   1      }
 250          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    450    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     20      16
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   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 + -