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

📄 nrf2401.lst

📁 NRF2401 模块的C8051收发程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.17   NRF2401                                                               02/02/2009 22:23:53 PAGE 1   


C51 COMPILER V8.17, COMPILATION OF MODULE NRF2401
OBJECT MODULE PLACED IN nRF2401.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE nRF2401.c OPTIMIZE(7,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //====================================================================================
   2          //文 件 名: nRF2401.c
   3          //功能描述: nRF2401的驱动程序
   4          //维护记录: 2006年10月20
   5          //====================================================================================
   6          
   7          #include "C8051F330.h"
   8          
   9          sbit    PWR         =   P1^0;                                           
  10          sbit    CE          =   P1^1;                                                   
  11          sbit    CS          =   P1^2;                                                   
  12          sbit    DR1         =   P1^3;                                                           
  13          sbit    CLK1    =       P1^4;                                                   
  14          sbit    DATA    =       P1^5;
  15          
  16          code unsigned int InitData[15] =                                // nRF2401 控制字 15 Byte
  17          {
  18          //      0x01,
  19          //      0x01,
  20          //      0x01,
  21                  0x08,                                                                           // 通道二接收数据宽度(bit)
  22                  0x08,                                                                           // 通道一接收数据宽度(bit)
  23                  0x00,                                                                           // 通道二地址(A24)
  24                  0x00,                                                                           // 通道二地址(A23)
  25                  0x00,                                                                           // 通道二地址(A22)
  26                  0x00,                                                                           // 通道二地址(A21)
  27                  0x01,                                                                           // 通道二地址(A20)
  28                  0x00,                                                                           // 通道一地址(A14)
  29                  0x00,                                                                           // 通道一地址(A13)
  30                  0x00,                                                                           // 通道一地址(A12)
  31                  0x00,                                                                           // 通道一地址(A11)
  32                  0x01,                                                                           // 通道一地址(A10)
  33                  0xA3,                                                                           // b7~b2:接收地址宽度,和发送端一致,不超过40bit;
  34                                                                                                          // b1~b0:CRC模式选择(01-8bit;11-16bit;00/10-no)
  35                  0x4f,                                                                           // b15:接收通道选择(0-通道1;1-通道1和2)
  36                                                                                                          // b14:收发模式(0-Direct模式,1-ShockBurst模式)
  37                                                                                                          // b13:波特率选择(0-250Kbps;1-1Mbps)
  38                                                                                                          // b12~b10:晶振选择(000-4M;001-8M;010-12M;011-16M)
  39                                                                                                          // b9~b8:发射功率(11-0db)                                                                                                                               
  40                  0x05                                                                            // b7~b1:发射频率配置
  41                                                                                                          // b0:收发控制(0-发送;1-接收)
  42          };
  43          unsigned int idata AddrBuffer[5];                                               // 地址寄存器
  44          unsigned int AddrByteCnt;                                               // 地址Byte数
  45          
  46          unsigned int idata AddrBuffer[5];                                               // 地址寄存器
  47          unsigned int AddrByteCnt;                                               // 地址Byte数
  48          
  49          void nRF2401_ON();                                                              // nRF2401A上电
  50          void nRF2401_OFF();                                                             // nRF2401A掉电
  51          void nRF2401_Initial();                                                 // nRF2401A初始化
  52          void nRF2401_WriteCommand();                                    // nRF2401A写命令字
  53          void nRF2401_WriteByte(unsigned int uiData);    // 向nRF2401A写入一个Byte
  54          void nRF2401_WriteWord(unsigned int uiData);    // 向nRF2401A写入一个Word
  55          void nRF2401_Mode(unsigned int uiMode);                 // 切换nRF2401A收/发模式
C51 COMPILER V8.17   NRF2401                                                               02/02/2009 22:23:53 PAGE 2   

  56          void nRF2401_SendByte(unsigned int TxData);     
  57                                                                                                          // 将字节数据写入nRF2401A
  58          void nRF2401_SendWord(unsigned int TxData);     
  59                                                                                                          // 将字数据写入nRF2401A
  60          void nRF2401_SendBuffer_Byte(unsigned int TxData[],unsigned int DataByte);      
  61                                                                                                          // 将数组数据写入nRF2401A
  62          void nRF2401_SendBuffer_Word(unsigned int TxData[],unsigned int DataWord);      
  63                                                                                                          // 将数组数据写入nRF2401A
  64          unsigned int  nRF2401_RxStatus();                               // 判断nRF2401A是否有数据接收
  65          void nRF2401_ReceiveByte(unsigned int RxData[]);// 以Byte格式从nRF2401A读数据
  66          void nRF2401_ReceiveWord(unsigned int RxData[]);// 以Word格式从nRF2401A读数据
  67          void nRF2401_SetAddress(unsigned int Address[],unsigned int AddrByte);
  68                                                                                                          // 设置目标nRF2401A的地址
  69          void Delay_Us(unsigned int TimeCnt);                                                            // 延时(uS)
  70          
  71          //=============================================================
  72          // 语法格式:   void nRF2401_Initial(void)
  73          // 实现功能:   nRF 初始化
  74          // 参数:               无
  75          // 返回值:             无
  76          //=============================================================
  77          void nRF2401_Initial(void)
  78          {
  79   1         /*   *P_SystemClock = 0x98;                                          // 设置系统时钟为49MHz
  80   1              *P_IOB_Attrib |= (CS+DATA+PWR+CLK1+CE+DR1);
  81   1              *P_IOB_Dir |= (CS+DATA+PWR+CLK1+CE);
  82   1              *P_IOB_Dir&=~DR1;
  83   1              *P_IOB_Buffer &=~(CS+DATA+CLK1+CE+DR1);         // 初始化IO端口  */
  84   1      
  85   1              nRF2401_ON();
  86   1              Delay_Us(3000);
  87   1              nRF2401_WriteCommand();                                         // 向nRF2401A写命令字
  88   1              Delay_Us(300);
  89   1      }
  90          
  91          //=============================================================
  92          // 语法格式:   void nRF2401_ON(void)
  93          // 实现功能:   nRF 上电
  94          // 参数:               无
  95          // 返回值:             无
  96          //=============================================================
  97          void nRF2401_ON(void)
  98          {
  99   1              /**P_IOB_Buffer |= PWR;*/
 100   1              PWR = 1;
 101   1              Delay_Us(1);
 102   1      }
 103          
 104          //=============================================================
 105          // 语法格式:   void nRF2401_OFF(void)
 106          // 实现功能:   nRF 掉电
 107          // 参数:               无
 108          // 返回值:             无
 109          //=============================================================
 110          void nRF2401_OFF(void)
 111          {
 112   1              PWR = 0;        //*P_IOB_Buffer &= ~PWR;
 113   1              Delay_Us(1);
 114   1      }
 115          
 116          //=============================================================
 117          // 语法格式:   void nRF2401_WriteCommand(void)
C51 COMPILER V8.17   NRF2401                                                               02/02/2009 22:23:53 PAGE 3   

 118          // 实现功能:   nRF 写命令字
 119          // 参数:               无
 120          // 返回值:             无
 121          //=============================================================
 122          void nRF2401_WriteCommand(void)
 123          {
 124   1              unsigned int i;
 125   1               CE= 0;         //*P_IOB_Buffer &= ~CE;
 126   1              CS = 1;         //*P_IOB_Buffer |= CS;
 127   1               Delay_Us(1);
 128   1              Delay_Us(1);
 129   1              for(i=0; i<15; i++)
 130   1              {
 131   2                      nRF2401_WriteByte(InitData[i]);
 132   2              }
 133   1              Delay_Us(1);
 134   1              CS = 0;         //*P_IOB_Buffer &= ~CS;
 135   1              CE = 1;         //*P_IOB_Buffer |= CE;
 136   1      }
 137          
 138          //=============================================================
 139          // 语法格式:   void nRF2401_Mode(unsigned int uiMode)
 140          // 实现功能:   设置nRF2401A的工作方式
 141          // 参数:               uiMode:0--接收;1--发送                                 
 142          // 返回值:             无
 143          //=============================================================
 144          void nRF2401_Mode(unsigned int uiMode)
 145          {
 146   1              CE = 0;         //*P_IOB_Buffer &= ~CE;
 147   1              CS = 1;         //*P_IOB_Buffer |= CS;
 148   1              Delay_Us(1);
 149   1              if(uiMode == 0)
 150   1                      nRF2401_WriteByte(InitData[14] | 0x01);                 // 接收
 151   1              else
 152   1                      nRF2401_WriteByte(InitData[14] & 0xFE);                 // 发送
 153   1              Delay_Us(1);
 154   1              CS = 0;         //*P_IOB_Buffer &= ~CS;
 155   1              CE = 1;         //*P_IOB_Buffer |= CE;
 156   1      }
 157          
 158          //=============================================================
 159          // 语法格式:   void nRF2401_SetAddress(unsigned int *Address,unsigned int AddrByte)
 160          // 实现功能:   设置目标nRF2401A的地址
 161          // 参数:               unsigned int *Address:地址数组
 162          //                              unsigned int AddrByte:数组的长度                                        
 163          // 返回值:             无
 164          //=============================================================
 165          void nRF2401_SetAddress(unsigned int *Address,unsigned int AddrByte)
 166          {
 167   1              unsigned int i;
 168   1              for(i=0; i<AddrByte; i++)
 169   1              {
 170   2                      AddrBuffer[i] = Address[i];
 171   2              }
 172   1              AddrByteCnt = AddrByte;
 173   1      }
 174          
 175          //=============================================================
 176          // 语法格式:   void nRF2401_WriteByte(unsigned int uiData)
 177          // 实现功能:   向nRF2401A写入一个字节数据
 178          // 参数:               unsigned int uiData: 待写入数据
 179          // 返回值:             无
C51 COMPILER V8.17   NRF2401                                                               02/02/2009 22:23:53 PAGE 4   

 180          //=============================================================
 181          void nRF2401_WriteByte(unsigned int uiData)
 182          {
 183   1              unsigned int i;
 184   1              for(i=0; i<8; i++)
 185   1              {
 186   2                      CLK1 = 0;               //*P_IOB_Buffer &= ~CLK1;
 187   2                      if(uiData&0x80)
 188   2                              DATA = 1;               //*P_IOB_Buffer |= DATA;
 189   2                      else
 190   2                              DATA = 0;               //*P_IOB_Buffer &= ~DATA;
 191   2                      Delay_Us(1);
 192   2                              CLK1 = 1;               //*P_IOB_Buffer |= CLK1;
 193   2                      Delay_Us(1);
 194   2                              CLK1 = 0;               //*P_IOB_Buffer &= ~CLK1;
 195   2                              uiData = uiData<<1;
 196   2              }
 197   1      }
 198          
 199          //=============================================================
 200          // 语法格式:   void nRF2401_WriteWord(unsigned int uiData)
 201          // 实现功能:   向nRF2401A写入一个字数据
 202          // 参数:               unsigned int uiData: 待写入数据
 203          // 返回值:             无
 204          //=============================================================
 205          void nRF2401_WriteWord(unsigned int uiData)
 206          {
 207   1              unsigned int i;
 208   1              for(i=0; i<16; i++)
 209   1              {
 210   2                      CLK1 = 0;               //*P_IOB_Buffer &= ~CLK1;
 211   2                      if(uiData&0x8000)
 212   2                              DATA = 1;               //*P_IOB_Buffer |= DATA;
 213   2                      else
 214   2                              DATA = 0;               //*P_IOB_Buffer &= ~DATA;
 215   2                      Delay_Us(1);

⌨️ 快捷键说明

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