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

📄 rf2401_demo.lst

📁 无线收发程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 313   2                      {
 314   3                              DATA_BUF |= BYTE_BIT0;
 315   3                      }
 316   2                      else
 317   2                      {
 318   3                              DATA_BUF &= ~BYTE_BIT0;
 319   3                      }
 320   2                      CLK1 = 0;
 321   2               }
 322   1      
 323   1               return DATA_BUF;
 324   1      }
 325          
 326          void Spi_ByteWrite(unsigned char send)
 327          {
 328   1              unsigned char i;
 329   1      
 330   1              DATA_BUF = send;
 331   1      
 332   1              CLK1 = 0;
 333   1      
 334   1              for (i=0; i<8; i++)
 335   1              {
 336   2                      
 337   2                      if (DATA7)      //总是发送最高位
 338   2                      {
 339   3                              DATA = 1;
 340   3                      }
 341   2                      else
 342   2                      {
 343   3                              DATA = 0;
 344   3                      }
 345   2                      CLK1 = 1;
 346   2                      DATA_BUF = DATA_BUF << 1;
 347   2                      CLK1 = 0;
 348   2              }
 349   1      }
 350          
 351          
 352          
 353          
 354          /*      <RF2401配置寄存器的写入方式>
 355          NOTE.
 356          On the falling edge of CS, the nRF2401A updates the number of bits actually shifted
 357          in during the last configuration.
 358          Ex:
 359          If the nRF2401A is to be configured for 2 channel RX in ShockBurst., a total of 120
 360          bits must be shifted in during the first configuration after VDD is applied.
 361          Once the wanted protocol, modus and RF channel are set, only one bit (RXEN) is
 362          shifted in to switch between RX and TX.
 363          */
 364          void Config2401(void)
 365          { 
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 7   

 366   1              unsigned int i = 0; 
 367   1              unsigned char variablel;
 368   1      
 369   1              //RF2401进入配置方式
 370   1              CS = 0;
 371   1              CE = 0;
 372   1              PWR_UP = 1; //上电 
 373   1      
 374   1              for(i=0; i<20; i++) 
 375   1              {
 376   2                      Delay100();
 377   2              }
 378   1      
 379   1              CS = 1;
 380   1              DATA = 0;
 381   1              CLK1 = 0;
 382   1      
 383   1              Delay100();//-----
 384   1      
 385   1      
 386   1         /*
 387   1              for(i=0; i<20; i++) 
 388   1              {
 389   1                      Delay100();
 390   1              }
 391   1         */
 392   1              //PWR_DWN -> Configuration_mode Delay_3ms
 393   1              
 394   1      
 395   1              for(i=0; i<18; i++)
 396   1              { 
 397   2                      variablel = nRF2401_Conf[i]; 
 398   2                      Spi_ByteWrite(variablel);
 399   2              } 
 400   1      
 401   1              Delay100();     // configuration mode -> stand by mode ??
 402   1      
 403   1              CS = 0; //CS置低使配置有效
 404   1              Delay100(); 
 405   1      } 
 406          
 407          void SetTxMode(void)
 408          { 
 409   1              //设置为配置模式
 410   1              PWR_UP = 1;
 411   1              CE = 0; 
 412   1              CS = 1; 
 413   1      
 414   1              Delay100(); 
 415   1      
 416   1              //配置寄存器0字节RXEN 设置为0:发送模式
 417   1              DATA = 0; 
 418   1              CLK1=1; 
 419   1              CLK1=0; 
 420   1      
 421   1              //设置为Activemodes(Tx)
 422   1              CS=0; 
 423   1              CE=1;
 424   1              Delay100(); 
 425   1      }
 426          
 427          void SetRxMode(void)
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 8   

 428          { 
 429   1              Delay100(); 
 430   1              //设置为配置模式
 431   1              PWR_UP = 1;
 432   1              CE=0; 
 433   1              CS=1; 
 434   1              Delay100(); /////----
 435   1              //配置寄存器0字节RXEN 设置为1:接收模式
 436   1              DATA = 1; 
 437   1              CLK1 = 1; 
 438   1              CLK1 = 0; 
 439   1      
 440   1              //设置为Activemodes(Rx)
 441   1              CS=0; 
 442   1              CE=1;
 443   1              Delay100();
 444   1      }
 445          
 446          
 447          
 448          //接收方通道硬件地址 
 449          unsigned char TxAddress[]={0xcc,0xcc,0xcc,0xcc};
 450          
 451          //nRF2401数据发送函数定义如下:
 452          void RF2401_TxPacket(unsigned char TxBuf[])
 453          {
 454   1              int i; 
 455   1              unsigned char variable2; 
 456   1      
 457   1      
 458   1              CE=1;
 459   1              Delay100(); 
 460   1              for(i=0;i< (ADDR_W/8);i++)      //写入接收地址(按字节对齐)
 461   1              {
 462   2                      variable2=TxAddress[i]; 
 463   2                      Spi_ByteWrite(variable2);
 464   2              } 
 465   1      
 466   1              for(i=0;i<(DATA1_W/8);i++)      //写入需要发送的数据(按字节对齐)
 467   1              {
 468   2                      variable2=TxBuf[i]; 
 469   2                      Spi_ByteWrite(variable2);
 470   2              } 
 471   1      
 472   1              CE=0; //CE置低使发送有效
 473   1               
 474   1              Delay100(); //时钟信号高电平保持 
 475   1              Delay100(); //时钟信号高电平保持 
 476   1              Delay100(); //时钟信号高电平保持 
 477   1              Delay100(); //时钟信号高电平保持 
 478   1      
 479   1      }
 480          
 481          /*******************************************/
 482          //接收数据函数
 483          //返回 0:没有数据接收
 484          //     1:接收到数据
 485          unsigned char RF2401_RxPacket(unsigned char *RxBuf)
 486          { 
 487   1              unsigned int i;
 488   1      
 489   1              DR1=1; 
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 9   

 490   1      
 491   1              if(DR1)
 492   1              {
 493   2                      for (i=0; i<DATA1_W/8; i++)
 494   2                      {
 495   3                              *RxBuf  = Spi_ByteRead();
 496   3                              RxBuf++;
 497   3                      }
 498   2                      return 1;
 499   2              }
 500   1              return 0;
 501   1      }
 502          
 503          
 504          //*****************************************************************
 505          //*****************************************************************
 506          //*****************************************************************
 507          unsigned char TxRxBuf[2];
 508          
 509          
 510          
 511          
 512          void main(void)
 513          { 
 514   1              unsigned int i = 0;
 515   1              unsigned int j = 0; 
 516   1              unsigned int led0_count = 0;
 517   1              unsigned int led1_count = 0;
 518   1              unsigned  int tem;
 519   1              unsigned char inbuf[5];
 520   1      
 521   1          //
 522   1              Config2401(); 
 523   1              Delay100(); 
 524   1      
 525   1              //TxRxBuf[0] = 1;
 526   1              //TxRxBuf[DATA1_W/8 - 1] = 1;
 527   1      
 528   1      //      SetTxMode();                                                    // Set Tx Mode
 529   1      
 530   1      //      RF2401_TxPacket(TxRxBuf);                               // Transmit Tx buffer data
 531   1      
 532   1              LED0 = 0;
 533   1              LED1 = 0;
 534   1      
 535   1              Delay(500);                             // delay for led light  
 536   1          Delay(500);
 537   1              Delay(500);
 538   1              Delay(500);
 539   1      
 540   1      
 541   1      
 542   1              LED0 = 1;
 543   1              LED1 = 1;                               // led close
 544   1      
 545   1       //     TxRxBuf[0] = 0xff;
 546   1      //      TxRxBuf[DATA1_W/8 - 1] = 0xff;
 547   1      
 548   1                                              
 549   1              SetRxMode();                            // Set RF2401 in Rx mode
 550   1          init_serial();        
 551   1      
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 10  

 552   1              while(1) 
 553   1              { 
 554   2                      send_string("start to select\n",16);
 555   2                      Delay(500);                     
 556   2              Delay(500);
 557   2                  Delay(500);
 558   2                  Delay(500);                                         
 559   2                      for(i=0;i<30;i++) for(j=0;j<30;j++);
 560   2      
 561   2                      if (RF2401_RxPacket(TxRxBuf) == 1)      //返回1 表明有数据包接收到
 562   2                      {         tem=(TxRxBuf[0]+TxRxBuf[1]);
 563   3                              }
 564   2      
 565   2                       
 566   2                              //tem=163;
 567   2                          sprintf(inbuf,"%d\n",tem);
 568   2                              send_string(inbuf,strlen(inbuf));    //向串口发送字符串
 569   2                              Delay(500);                             // delay for led light  
 570   2                  Delay(500);
 571   2                      Delay(500);
 572   2                      Delay(500);
 573   2                              
 574   2                              
 575   2                              //      send_string("start to select1\n",17);
 576   2                /*
 577   2      
 578   2                      //按键检测
 579   2                      if (KEY0==0)
 580   2                      {
 581   2                              TxRxBuf[0] = 1;
 582   2                              led0_count=15;
 583   2                              while(  KEY0==0);
 584   2                      }
 585   2                      if (KEY1==0)
 586   2                      {
 587   2                              TxRxBuf[DATA1_W/8 - 1] = 1;
 588   2                              led1_count=15;
 589   2                              while(  KEY1==0);
 590   2                      }
 591   2                      if (TxRxBuf[0]==1 || TxRxBuf[DATA1_W/8 - 1]==1)
 592   2                      {
 593   2                              SetTxMode();                            //设置为发射模式
 594   2                              RF2401_TxPacket(TxRxBuf);       //发送数据
 595   2                              SetRxMode();
 596   2                      }
 597   2                      TxRxBuf[0]=0;
 598   2                      TxRxBuf[DATA1_W/8 - 1]=0;
 599   2      
 600   2      
 601   2                      //LED显示延时
 602   2                      if (led0_count>0)       
 603   2                      {
 604   2                              led0_count--;
 605   2                              LED0 = 0;
 606   2                      }
 607   2                      else LED0 = 1;
 608   2                      if (led1_count>0)
 609   2                      {
 610   2                              led1_count--;
 611   2                              LED1 = 0;
 612   2                      }
 613   2                      else LED1 = 1;
C51 COMPILER V8.12   RF2401_DEMO                                                           04/27/2008 19:15:28 PAGE 11  

 614   2      
 615   2              }//end_while(1);
 616   2              */
 617   2      }
 618   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    596    ----
   CONSTANT SIZE    =     39    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7      25
   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 + -