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

📄 rf.lst

📁 单片机与a7105组成无线收发程序2.4G多通道
💻 LST
📖 第 1 页 / 共 3 页
字号:
 577   2              if(value & 0x80)
 578   2              {
 579   3                  RF_SDIO_HIGH();
 580   3              }        
 581   2              else
 582   2              {
 583   3                  RF_SDIO_LOW();
 584   3              }
 585   2              RF_SCK_HIGH();
 586   2              value <<= 0x01;
 587   2              RF_SCK_LOW();
 588   2          }    
 589   1      }
 590                  
 591          /***************************************************
 592          name:           read_register
 593          input:          none
 594          output:         ret_byte 
 595          Describe:       读取RF寄存器的值
 596          Notice:         1.在调用该函数时一定要先将MCU与SDIO相连的pin设置为输入
 597                                  2.在调用该函数前一定要先写入需要读的寄存器地址
 598          creat date:     2008-7-20
 599          creator:        dengyihong              
 600          ***************************************************/
 601          U8 read_register(void)
 602          {
 603   1          U8 i = 0;
 604   1          U8 ret_byte = 0;
 605   1          
 606   1              RF_SDIO_INPUT();
 607   1          for(i=0; i<0x08; i++)
 608   1          {
 609   2              ret_byte <<= 0x01;
 610   2              if(GET_RF_SDIO())
C51 COMPILER V7.06   RF                                                                    10/29/2008 11:22:42 PAGE 11  

 611   2              {
 612   3                  ret_byte |= 0x01;   
 613   3              }
 614   2              RF_SCK_HIGH();                  
 615   2              RF_SCK_LOW();
 616   2          } 
 617   1          return ret_byte;
 618   1      }
 619                  
 620                  
 621          
 622          /***************************************************
 623          name:           A7105_write_command
 624          input:          command: 写入到RF的命令
 625          output:         none
 626          Describe:       写命令到RF
 627          Notice:      
 628          creat date:     2008-7-20
 629          creator:        dengyihong              
 630          ***************************************************/
 631          void A7105_write_command(U8 command)
 632          {
 633   1          RF_SCS_LOW();
 634   1          write_register(0x04, command);
 635   1          RF_SCS_HIGH();
 636   1      }
 637          
 638          /***************************************************
 639          name:           A7105_write_register
 640          input:          1. address 写寄存器的地址
 641                                  2. value 写寄存器的值
 642          output:         none
 643          Describe:       写数据到RF寄存器        
 644          Notice:
 645          creat date:     2008-7-20
 646          creator:        dengyihong              
 647          ***************************************************/
 648          void A7105_write_register(U8 address,U8 value)
 649          {
 650   1          RF_SCS_LOW();
 651   1          
 652   1          address &= 0x7f;                            // write data register
 653   1          write_register(0x08,address);       // write address
 654   1          write_register(0x08,value);         // write data
 655   1          
 656   1          RF_SCS_HIGH();
 657   1      }
 658          
 659          /***************************************************
 660          name:           A7105_read_register
 661          input:          address 写入要读寄存器的地址
 662          output:         temp
 663          Describe:       从RF寄存器读数据        
 664          Notice:
 665          creat date:     2008-7-20
 666          creator:        dengyihong              
 667          ***************************************************/
 668          U8 A7105_read_register(U8 address)
 669          {
 670   1          U8 temp = 0;
 671   1          
 672   1          RF_SCS_LOW(); 
C51 COMPILER V7.06   RF                                                                    10/29/2008 11:22:42 PAGE 12  

 673   1          
 674   1          address &= 0x7f;
 675   1          address |= 0x40;
 676   1          write_register(0x08,address);
 677   1      //    RF_SDIO_INPUT();
 678   1          temp = read_register();
 679   1          
 680   1          RF_SCS_HIGH();
 681   1          
 682   1          return temp;
 683   1      }
 684          
 685          
 686          
 687          
 688          /***************************************************
 689          name:           A7105_write_ID
 690          input:          none
 691          output:         none
 692          Describe:       写入ID
 693          Notice:
 694          creat date:     2008-7-20
 695          creator:        dengyihong              
 696          ***************************************************/
 697          
 698          void A7105_write_ID(void)
 699          {
 700   1          RF_SCS_LOW();
 701   1          
 702   1          write_register(0x08,RF_REG_ID_DATA);                // write address
 703   1          
 704   1          write_register(0x08,RF_ID_CODE0);                   // 写ID code                            
 705   1          write_register(0x08,RF_ID_CODE1);
 706   1          write_register(0x08,RF_ID_CODE2);
 707   1          write_register(0x08,RF_ID_CODE3);   
 708   1          
 709   1          RF_SCS_HIGH();
 710   1      }
 711          
 712          
 713          /***************************************************
 714          name:           A7105_read_ID
 715          input:          none
 716          output:         none
 717          Describe:       从RF中读ID      
 718          Notice:
 719          creat date:     2008-7-20
 720          creator:        dengyihong              
 721          ***************************************************/
 722          
 723          void A7105_read_ID(U8 *read_ptr)
 724          {
 725   1          U8 id_buff[4] = {0};
 726   1              
 727   1          RF_SCS_LOW();
 728   1          
 729   1          write_register(0x08,(RF_REG_ID_DATA | 0x40));                       // 先写入要读的寄存器地址
 730   1      
 731   1          RF_SDIO_INPUT();        
 732   1          *read_ptr++ = read_register(); 
 733   1          *read_ptr++ = read_register();
 734   1          *read_ptr++ = read_register();
C51 COMPILER V7.06   RF                                                                    10/29/2008 11:22:42 PAGE 13  

 735   1          *read_ptr++ = read_register();       
 736   1      
 737   1          RF_SCS_HIGH();      
 738   1      }
 739          
 740          
 741          
 742          /***************************************************
 743          name:           write_data_to_fifo
 744          input:          send_cnt 写入的字节数
 745          output:         none
 746          Describe:       写数据到FIFO中  
 747          Notice:
 748          creat date:     2008-7-20
 749          creator:        dengyihong              
 750          ***************************************************/
 751          void write_data_to_fifo(U8 send_cnt)
 752          {
 753   1          U8 i = 0;
 754   1              
 755   1              if(send_cnt > RF_FIFO_LEN)
 756   1              {
 757   2                      send_cnt = RF_FIFO_LEN;
 758   2              }
 759   1      
 760   1          RF_SCS_LOW();  
 761   1          write_register(0x08,RF_REG_FIFO_DATA);                              // 先写地址
 762   1          for(i=0; i<send_cnt; i++)                                           // 这里固定写RF_FIFO_LEN个字节
 763   1          {
 764   2                      write_register(0x08,Rf_Send_Buf[i]);        
 765   2          } 
 766   1          RF_SCS_HIGH();  
 767   1      }
 768          
 769          /***************************************************
 770          name:           read_data_from_fifo
 771          input:          none
 772          output:         none
 773          Describe:       从RF的FIFO中读取数据    
 774          Notice:
 775          creat date:     2008-7-20
 776          creator:        dengyihong              
 777          ***************************************************/
 778          void read_data_from_fifo(void)
 779          {
 780   1          U8 i = 0;
 781   1          U8 rec_cnt = 0;
 782   1               
 783   1          RF_SCS_LOW();
 784   1          write_register(0x08,RF_REG_FIFO_DATA|0x40);                 // 先写地址和读命令
 785   1          
 786   1          for(i=0; i<RF_FIFO_LEN; i++)                                                // 这里是固定读RF_FIFO_LEN个字节
 787   1          {
 788   2                      Rf_Rec_Buf[i] = read_register();
 789   2          }
 790   1          RF_SCS_HIGH();        
 791   1      }
 792          
 793          
 794          
 795          /***************************************************
 796          name:           send_data_by_RF
C51 COMPILER V7.06   RF                                                                    10/29/2008 11:22:42 PAGE 14  

 797          input:          send_byte_cnt  发送字节数
 798          output:         none
 799          Describe:       通过RF发送数据  
 800          Notice:
 801          creat date:     2008-7-20
 802          creator:        dengyihong              
 803          ***************************************************/
 804          void send_data_by_RF(U8 send_byte_cnt)
 805          {
 806   1          if(send_byte_cnt)
 807   1          {
 808   2      //        EX1 = 0;                                                      // disable int1 interrupt (如果是设置为中断接收,在发送时应该屏蔽该中断)
 809   2                      
 810   2              A7105_entry_stby();                                     // RX -> STBY -> TX                     
 811   2                      A7105_setup_channel(Rf_Rec_Channel+1);  // 设置发射频率
 812   2              delay_2us(50);    
 813   2              write_data_to_fifo(send_byte_cnt);              // 写数据到fifo          
 814   2              A7105_entry_tx();                                               // 进入发送状态发送数据
 815   2              delay_2us(150);                                                 // 从通过软件命令让RF进入发送状态到开始发送,这中间有140us的延时
 816   2                                                                                                      // 因此这里要经过>=140us 的延时后再读GPIO1的状态                                                                                                                                                                                
 817   2                      RF_GPIO1_INPUT();
 818   2                      while(GET_RF_GPIO1())                                   // GPIO1由高变低表示发送完成。GPIO1在这里的状态取决于0x0b寄存器的设置
 819   2              {
 820   3      
 821   3              }
 822   2              delay_2us(10);
 823   2              A7105_setup_channel(Rf_Rec_Channel);    // 设置接收频率         
 824   2              delay_2us(100);
 825   2              A7105_entry_rx();                                               // 进入接收状态(发送完成后返回到接收状态)
 826   2      
 827   2                      IE1 = 0;                                                                // 这里要清除中断标志,以免影响接收
 828   2      //              EX1 = 1;
 829   2          }
 830   1      }
 831          
 832          
 833          /***************************************************
 834          name:           rec_rf_data
 835          input:          none
 836          output:         none
 837          Describe:       接收RF数据      
 838          Notice:
 839          creat date:     2008-7-20
 840          creator:        dengyihong              
 841          ***************************************************/
 842          void rec_rf_data(void)
 843          {
 844   1          U8 temp_buf = 0;
 845   1              
 846   1          temp_buf = A7105_read_register(0x00);       
 847   1          read_data_from_fifo();                                     
 848   1              A7105_entry_rx();
 849   1              delay_2us(100);
 850   1      }
 851          
 852          
 853          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    780    ----
   CONSTANT SIZE    =     62    ----
C51 COMPILER V7.06   RF                                                                    10/29/2008 11:22:42 PAGE 15  

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      11
   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 + -