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

📄 rf2401_demo.lst

📁 无线收发程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 1   


C51 COMPILER V8.12, COMPILATION OF MODULE RF2401_DEMO
OBJECT MODULE PLACED IN rf2401_demo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE rf2401_demo.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /////////////////////////////////////////////////////////////////////
   2          //  Desc:    Demo App for RF2401 Module
   3          //      Vender:  http://www.newmsg.com
   4          //  Date:    2007-3-12
   5          //  Update   2007-9-8
   6          ////////////////////////////////////////////////////////////////////
   7          
   8          #include <reg51.h>
   9          #include <string.h>
  10          #include <stdio.h>
  11          
  12          
  13          // 常量定义
  14          #define uchar unsigned char 
  15          #define uint  unsigned int
  16          
  17          
  18          #define BYTE_BIT0       0x01
  19          #define BYTE_BIT1       0x02
  20          #define BYTE_BIT2       0x04
  21          #define BYTE_BIT3       0x08
  22          #define BYTE_BIT4       0x10
  23          #define BYTE_BIT5       0x20
  24          #define BYTE_BIT6       0x40
  25          #define BYTE_BIT7       0x80
  26          
  27          
  28          
  29          // <RF2401_Pins 对应引脚> , 具体细节请参考相关电路图 NewMsg_RFDemo2401.SchDoc(用PortelDXP打开)
  30          sbit PWR_UP     = P1^6;
  31          sbit CE         = P1^2;
  32          //      sbit DR2        = P3^5;         //暂时没有用到
  33          //      sbit CLK2       = P3^4;
  34          //      sbit OUT2       = P3^3;
  35          sbit CS         = P1^1;
  36          sbit DR1        = P1^0;
  37          sbit CLK1       = P3^7;
  38          sbit DATA       = P3^3;
  39          
  40          sbit LED0       = P3^4;
  41          sbit LED1       = P3^5;
  42          sbit KEY0       = P3^0;
  43          sbit KEY1       = P3^1;
  44          
  45          
  46          
  47          /*
  48          *************************************************************
  49          *       RF2401 Configuration                                                                    *
  50          *       保存2401的配置信息                                                                              *
  51          *************************************************************
  52          */
  53          /*=====<RF-Configuration-Register 配置信息>=====*/
  54          //芯片测试用,无需修改
  55          #define TEST_2          0x8E                    //MSB   D143~D136
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 2   

  56          #define TEST_1          0x08                    //              D135~D128
  57          #define TEST_0          0x1C                    //              D127~D120
  58          
  59          /* 注意: DATAx_W + ADDRx_W + CRC 的值必须小于256 !  单个数据包的大小必须小于32字节(256位) */
  60          #define DATA2_W         0x10    //2字节     //频道2 数据长度(单位:Bit)
  61          //#define DATA1_W               0xE0    //28字节        //频道1 数据长度(单位:Bit)
  62          #define DATA1_W         0x10    //2字节 //频道1 数据长度(单位:Bit)
  63          //                                      0xE0 = 224
  64          //16bit Address + 224bit(28byte)Data + 16bit CRC = 256bit
  65          
  66          /* 注意:2401忽略ADDR中超过ADDR_W设定宽度的那些位,同时地址不能全部设置为0 */
  67          //频道2 接收地址(当前模块地址)
  68          #define ADDR2_4         0x00
  69          #define ADDR2_3         0x1c
  70          #define ADDR2_2         0xcc
  71          #define ADDR2_1         0xcc                                                            
  72          #define ADDR2_0         0xcc
  73          //频道1 接收地址
  74          #define ADDR1_4         0x00
  75          #define ADDR1_3         0xcc
  76          #define ADDR1_2         0xcc
  77          #define ADDR1_1         0xcc
  78          #define ADDR1_0         0xcc
  79          
  80          #define ADDR_W          0x10            //2字节 //接收地址宽度(单位:Bit)
  81          #define CRC_L           0x1                                     //CRC模式 0:8位 1:16
  82          #define CRC_EN          0x1                                     //CRC校验启用
  83          
  84          #define RX2_EN          0x0                                     //双频道功能启用
  85          #define CM                      0x1                                     //0:Direct mode 1:ShockBurst mode
  86          #define RFDR_SB         0x0                                     //0:250kbps             1:1Mbps
  87          #define XO_F            0x3             //16M           //nRF2401晶振频率
  88          #define RF_PWR          0x3                                     //信号发射功率
  89          
  90          #define RF_CH           0x2                                     //Channel RF 频率
  91          #define RXEN            0x0//DEF_RXEN           //0:Tx  1:Rx
  92                                                  //程序会重新设置此项参数
  93          
  94          //-----------------------------------------------------------
  95          
  96          
  97          
  98          //<将设置信息组合成每个字节的数据信息,此区域无需修改>
  99          #define RFConfig_Byte0  TEST_2
 100          #define RFConfig_Byte1  TEST_1
 101          #define RFConfig_Byte2  TEST_0
 102          #define RFConfig_Byte3  DATA2_W
 103          #define RFConfig_Byte4  DATA1_W
 104          #define RFConfig_Byte5  ADDR2_4
 105          #define RFConfig_Byte6  ADDR2_3
 106          #define RFConfig_Byte7  ADDR2_2
 107          #define RFConfig_Byte8  ADDR2_1
 108          #define RFConfig_Byte9  ADDR2_0
 109          #define RFConfig_Byte10 ADDR1_4
 110          #define RFConfig_Byte11 ADDR1_3
 111          #define RFConfig_Byte12 ADDR1_2
 112          #define RFConfig_Byte13 ADDR1_1
 113          #define RFConfig_Byte14 ADDR1_0
 114          #define RFConfig_Byte15 (ADDR_W<<2 | CRC_L<<1 | CRC_EN)
 115          #define RFConfig_Byte16 (RX2_EN<<7 | CM<<6    | RFDR_SB<<5 | XO_F <<2 | RF_PWR)
 116          #define RFConfig_Byte17 (RF_CH<<1  | RXEN)
 117          
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 3   

 118          //------------------------------------------------------------
 119          
 120          
 121          //通过宏定义将18字节的寄存器参数按照各个功能分解,以便于参数的调整
 122          
 123          
 124          unsigned char code nRF2401_Conf[18] ={
 125                  RFConfig_Byte0,         
 126                  RFConfig_Byte1,         
 127                  RFConfig_Byte2,         
 128                  RFConfig_Byte3,         
 129                  RFConfig_Byte4,
 130                  RFConfig_Byte5,         
 131                  RFConfig_Byte6,         
 132                  RFConfig_Byte7,         
 133                  RFConfig_Byte8,         
 134                  RFConfig_Byte9,
 135                  RFConfig_Byte10, 
 136                  RFConfig_Byte11, 
 137                  RFConfig_Byte12, 
 138                  RFConfig_Byte13, 
 139                  RFConfig_Byte14,
 140                  RFConfig_Byte15, 
 141                  RFConfig_Byte16, 
 142                  RFConfig_Byte17
 143          };
 144          
 145          //------------------------------------------------------------
 146          
 147          /*
 148          *************************************************************
 149          *       nRF2401 Tx/Rx functions                                                                 *
 150          *
 151          *       void Delay100(void);
 152          *       void Config2401(void);          //配置2401,写入初始化设置
 153          *       void SetTxMode(void);           //设置为发送模式
 154          *       void SetRxMode(void);           //设置为接收模式
 155          *       void nRF2401_TxPacket(unsigned char TxBuf[]);
 156          *                                                               //发送TxBuf[]内的数据 长度由 DATA1_W 决定
 157          *       unsigned char nRF2401_RxPacket(unsigned char *RxBuf);
 158          *                                                               //检查是否有数据需要接受 如果有,则保存至RxBuf[]
 159          *                                                               //返回值 0:没有接收到数据       1:接收到数据
 160          *************************************************************
 161          */
 162          
 163          //16M晶振 600us左右
 164          void Delay100(void)
 165          { 
 166   1              unsigned int i; 
 167   1              for(i=0;i<100;i++);
 168   1      }
 169          /* 串行口初始化 */
 170          
 171          void init_serial( void )    
 172          
 173          { 
 174   1      
 175   1          SCON = 0x50;                         //串行工作方式1, 8位异步通信方式
 176   1      
 177   1          TMOD |= 0x20;                        //定时器1, 方式 2, 8位自动重装
 178   1      
 179   1          PCON |= 0x80;                        //SMOD=1,表示数据传输率加倍
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 4   

 180   1      
 181   1          TH1 = 0xF4;                          //数据传输率:4800 fosc=11.0592MHz
 182   1      
 183   1          IE |= 0x90;                          //允许串行中断
 184   1      
 185   1          TR1 = 1;                             //启动定时器1
 186   1      
 187   1      } 
 188          
 189          /* 向串口发送一个字符 */
 190          
 191          void send_char( unsigned char x)
 192          
 193          { 
 194   1      
 195   1          SBUF=x; 
 196   1      
 197   1          while (TI== 0 ); 
 198   1      
 199   1          TI= 0; 
 200   1      
 201   1      } 
 202          
 203          /* 向串口发送一个字符串,string_length为该字符串长度 */
 204          
 205          void send_string( unsigned char *s, unsigned int string_length)
 206          
 207          { 
 208   1      
 209   1          unsigned int i= 0;
 210   1      
 211   1          do
 212   1      
 213   1              {
 214   2      
 215   2              send_char(*(s + i));             //向串口发送一个字符
 216   2      
 217   2              i++;
 218   2      
 219   2              }
 220   1      
 221   1          while ( i<string_length);
 222   1      
 223   1      } 
 224          
 225          /* 串口接收中断函数 */
 226          
 227          void serial () interrupt 4 using 3
 228          
 229          {
 230   1      
 231   1          if (RI)
 232   1      
 233   1              {
 234   2      
 235   2              unsigned char x;
 236   2      
 237   2              RI = 0;
 238   2      
 239   2              x=SBUF;  
 240   2              //接收字符
 241   2      
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 5   

 242   2                      /*
 243   2              if ( x> 127 )
 244   2      
 245   2                  {
 246   2      
 247   2                  counter= 0;
 248   2      
 249   2                  inbuf[counter]=x;
 250   2      
 251   2                  checksum= x- 128;
 252   2      
 253   2                  }
 254   2      
 255   2              else
 256   2      
 257   2                  {
 258   2      
 259   2                  counter++;
 260   2      
 261   2                  inbuf[counter]=x;
 262   2      
 263   2                  checksum ^= x;
 264   2      
 265   2                  if ((counter==(length- 1)) && (!checksum))
 266   2      
 267   2                      {
 268   2      
 269   2                      flag= 1;      //如果串口接收的数据达到length个,且校验没错,
 270   2      
 271   2                                  //就置位取数标志
 272   2      
 273   2                      }
 274   2      
 275   2                  }
 276   2                              */
 277   2      
 278   2              } 
 279   1      
 280   1      }
 281          
 282          
 283          
 284          
 285          
 286          
 287          
 288          void Delay(uchar n)
 289          {
 290   1              uint i;
 291   1              while(n--)
 292   1              for(i=0;i<80;i++);      
 293   1      }
 294          
 295          
 296          bdata unsigned  char DATA_BUF;
 297          #define DATA7   ((DATA_BUF & BYTE_BIT7) != 0)
 298          #define DATA0   ((DATA_BUF & BYTE_BIT0) != 0)
 299          
 300          /**********************************************************
 301          *       2401数据传输接口
 302          *       详细内容参见2401手册<Configuration mode timing>章节
 303          **********************************************************/
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 6   

 304          unsigned char Spi_ByteRead(void)
 305          {
 306   1              unsigned char i = 0;
 307   1              for (i=0; i<8; i++)
 308   1              {
 309   2                      DATA_BUF = DATA_BUF << 1;
 310   2                      CLK1 = 1;
 311   2                      DATA = 1;       //设置为输入状态
 312   2                      if (DATA)       //读取最高位,保存至最末尾,通过左移位完成整个字节

⌨️ 快捷键说明

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