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

📄 nrf2401.lst

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

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

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

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

⌨️ 快捷键说明

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