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

📄 nrf24l01+̤

📁 nRF24L01无线模块6个接收通道
💻
字号:
C51 COMPILER V7.00  NRF24L01                                                               04/05/2010 10:41:29 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE NRF24L01
OBJECT MODULE PLACED IN nRF24L01.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE nRF24L01.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include"nRF24L01.h"
   2          
   3          
   4          //uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01};  // 定义一个静态发送地址
   5          uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0xb2,0xb2,0xb3,0xb4,0x01};
   6          //uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x02,0xb4,0xb3,0xb2,0xb1};
   7          
   8          uchar RX_BUF[TX_PLOAD_WIDTH];
   9          uchar TX_BUF[TX_PLOAD_WIDTH]=
  10          {
  11          0x01,0x02,0x03,0x4,0x05,0x06,0x07,0x08,
  12          0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,
  13          0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,
  14          0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,
  15          };
  16          uchar flag,status;
  17          uchar DATA = 0x01;
  18          
  19          uchar bdata sta;
  20          sbit  RX_DR      = sta^6;
  21          sbit  TX_DS      = sta^5;
  22          sbit  MAX_RT = sta^4;
  23          /**************************************************/
  24          
  25          /**************************************************
  26          函数: init_io()
  27          
  28          描述:
  29              初始化IO
  30          /**************************************************/
  31          void init_io(void)
  32          {
  33   1              CE  = 0;        // 待机
  34   1              CSN = 1;        // SPI禁止
  35   1              SCK = 0;        // SPI时钟置低
  36   1              IRQ = 1;        // 中断复位
  37   1              LED = 0x00;             // 关闭指示灯
  38   1      }
  39          /**************************************************/
  40          
  41          /**************************************************
  42          函数:delay_ms()
  43          
  44          描述:
  45              延迟x毫秒
  46          /**************************************************/
  47          void delay_ms(uchar x)
  48          {
  49   1          uchar i, j;
  50   1          i = 0;
  51   1          for(i=0; i<x; i++)
  52   1          {
  53   2             j = 250;
  54   2             while(--j);
  55   2                 j = 250;
C51 COMPILER V7.00  NRF24L01                                                               04/05/2010 10:41:29 PAGE 2   

  56   2             while(--j);
  57   2          }
  58   1      }
  59          /**************************************************/
  60          
  61          /**************************************************
  62          函数:SPI_RW()
  63          
  64          描述:
  65              根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01
  66                  读出一字节
  67          /**************************************************/
  68          uchar SPI_RW(uchar byte)
  69          {
  70   1              uchar i;
  71   1              for(i=0; i<8; i++)          // 循环8次
  72   1              {
  73   2                      MOSI = (byte & 0x80);   // byte最高位输出到MOSI
  74   2                      byte <<= 1;             // 低一位移位到最高位
  75   2                      SCK = 1;                // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据
  76   2                      byte |= MISO;           // 读MISO到byte最低位
  77   2                      SCK = 0;                // SCK置低
  78   2              }
  79   1          return(byte);               // 返回读出的一字节
  80   1      }
  81          /**************************************************/
  82          
  83          /**************************************************
  84          函数:SPI_RW_Reg()
  85          
  86          描述:
  87              写数据value到reg寄存器
  88          /**************************************************/
  89          uchar SPI_RW_Reg(uchar reg, uchar value)
  90          {
  91   1              uchar status;
  92   1              CSN = 0;                   // CSN置低,开始传输数据
  93   1              status = SPI_RW(reg);      // 选择寄存器,同时返回状态字
  94   1              SPI_RW(value);             // 然后写数据到该寄存器
  95   1              CSN = 1;                   // CSN拉高,结束数据传输
  96   1              return(status);            // 返回状态寄存器
  97   1      }
  98          /**************************************************/
  99          
 100          /**************************************************
 101          函数:SPI_Read()
 102          
 103          描述:
 104              从reg寄存器读一字节
 105          /**************************************************/
 106          uchar SPI_Read(uchar reg)
 107          {
 108   1              uchar reg_val;
 109   1              CSN = 0;                    // CSN置低,开始传输数据
 110   1              SPI_RW(reg);                // 选择寄存器
 111   1              reg_val = SPI_RW(0);        // 然后从该寄存器读数据
 112   1              CSN = 1;                    // CSN拉高,结束数据传输
 113   1              return(reg_val);            // 返回寄存器数据
 114   1      }
 115          /**************************************************/
 116          
 117          /**************************************************
C51 COMPILER V7.00  NRF24L01                                                               04/05/2010 10:41:29 PAGE 3   

 118          函数:SPI_Read_Buf()
 119          
 120          描述:
 121              从reg寄存器读出bytes个字节,通常用来读取接收通道
 122                  数据或接收/发送地址
 123          /**************************************************/
 124          uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)
 125          {
 126   1              uchar status, i;
 127   1              CSN = 0;                    // CSN置低,开始传输数据
 128   1              status = SPI_RW(reg);       // 选择寄存器,同时返回状态字
 129   1              for(i=0; i<bytes; i++)
 130   1              pBuf[i] = SPI_RW(0);    // 逐个字节从nRF24L01读出
 131   1              CSN = 1;                    // CSN拉高,结束数据传输
 132   1              return(status);             // 返回状态寄存器
 133   1      }
 134          /**************************************************/
 135          
 136          /**************************************************
 137          函数:SPI_Write_Buf()
 138          
 139          描述:
 140              把pBuf缓存中的数据写入到nRF24L01,通常用来写入发
 141                  射通道数据或接收/发送地址
 142          /**************************************************/
 143          uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)
 144          {
 145   1              uchar status, i;
 146   1              CSN = 0;                    // CSN置低,开始传输数据
 147   1              status = SPI_RW(reg);       // 选择寄存器,同时返回状态字
 148   1              for(i=0; i<bytes; i++)
 149   1              SPI_RW(pBuf[i]);        // 逐个字节写入nRF24L01
 150   1              CSN = 1;                    // CSN拉高,结束数据传输
 151   1              return(status);             // 返回状态寄存器
 152   1      }
 153          /**************************************************/
 154          
 155          /**************************************************
 156          函数:RX_Mode()
 157          
 158          描述:
 159              这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包
 160          /**************************************************/
 161          void RX_Mode(void)
 162          {
 163   1              CE = 0;
 164   1              SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);  // 接收设备接收通道0使用和发送设备相

⌨️ 快捷键说明

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