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

📄 rf24e1.lst

📁 基于无线单片机24e1的组网程序。在无线传感器之类的应用中的成功案例。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 140   1              return SPI_DATA;
 141   1      }
 142          //================================================================
 143          //函数功能:将无线子系统设置为接收模式
 144          //on the spec.page26:
 145          //If nFRF2401 subsystem is to be configured for 2 channel RX in ShockBuust
 146          //a total of 120 bits must be shifted in during the first configuration after VDD is 
 147          //applied.Once the wanted protocol,modus and RF channed are set ,only one bit(RXEN) is 
 148          //shifted in to switch between RX and TX.So this function can do that like it.
 149          //On the spec.page28
 150          //After VDD is turned on shockburst configureation is done once and remains set whilst VDD is 
 151          //present.during operation only the first byte for frequecy channel and Rx/Tx switch need
 152          //to be changed!
 153          //We can be so lasy!!
 154          //filename:SetRxMode()
 155          //input:none
 156          //output:none
 157          //================================================================
 158          static void SetRxMode(void)
 159          {
 160   1              CE = 0;
 161   1              CS = 1;
 162   1              Delay100us(0);
 163   1              SpiReadWrite(rconf.buf[14]);
 164   1              CS = 0;
 165   1      }
 166          //================================================================
 167          //函数功能:将无线子系统设置为发射模式
 168          //filename:SetRxMode()
 169          //input:none
 170          //output:none
 171          //================================================================
 172          
 173          static void SetTxMode(void)
 174          {
 175   1              CE = 0;
 176   1              CS = 1;
 177   1              Delay100us(0);
C51 COMPILER V8.02   RF24E1                                                                10/05/2006 09:38:17 PAGE 4   

 178   1              SpiReadWrite(tconf.buf[14]);
 179   1              CS = 0;
 180   1      }
 181          //================================================================
 182          //函数功能:将无线子系统初始化
 183          //filename:SetRxMode()
 184          //input:none
 185          //output:none
 186          //================================================================
 187          void fRfInit(void){
 188   1              uchar b;
 189   1          PWR_UP = 1;                         // Turn on Radio
 190   1          Delay100us(30);                     // Wait > 3ms 
 191   1          SPICLK = 0;                         // Max SPI clock (XTAL/8)
 192   1          SPI_CTRL = 0x02;                    // Connect internal SPI controller to Radio
 193   1              CS = 1;                                 // RF SPI CS = 1,进行配置
 194   1              Delay100us(0);
 195   1          for(b=0;b<rconf.n;b++)                              //初始化位接收状态
 196   1          {
 197   2              SpiReadWrite(rconf.buf[b]);
 198   2          }
 199   1          CS = 0;                                                             //退出配置状态
 200   1              Delay100us(0);
 201   1              CE = 1;                                                         //启动接收
 202   1      }
 203          
 204          //================================================================
 205          //函数功能:发射一数据包(8个字节的采样值)
 206          //filename:TransmitPacket()
 207          //input:
 208          //output:none
 209          //2006-8-17:修改内容:先校正后再发送,
 210          //            修改前:逐个校正逐个发送
 211          //2006-8-18:加形参,为零校正发射,为1不校正,因为这时上位机控制(在系统校正)
 212          //2006-8-31:去掉形参,不考虑在系统校正,没事做
 213          //2006-9-05:增加无线发送缓冲区(rFtxBuf[]),以免采样缓冲区被这个函数修改(问题很严重)
 214          //2006-9-26:校正不要在无线发送函数里执行,因为每次都要发送2次才成功,节约时间
 215          //================================================================
 216          
 217          void TransmitPacket(void)
 218          {
 219   1          unsigned char i;
 220   1      /*    
 221   1              for(i=0;i<4;i++)
 222   1                      rFtxBuf[i]=Calibration(i);
 223   1      */
 224   1          CE = 1;
 225   1          Delay100us(0);
 226   1              for(i=0;i<ADDR_COUNT;i++)
 227   1                      SpiReadWrite(tconf.buf[ADDR_INDEX+i]);  //写目标地址
 228   1      
 229   1              for(i=0;i<4;i++)
 230   1              {       
 231   2          SpiReadWrite((unsigned char)(rFtxBuf[i]>>8));//写数据(8字节)
 232   2              SpiReadWrite((unsigned char)(rFtxBuf[i]&0xff));    
 233   2              }
 234   1              CE = 0;
 235   1          Delay100us(3);                              // Wait ~300us   
 236   1      }
 237          /*****************************************************************************************
 238          //函数名:RxCmd()
 239          //输入:none
C51 COMPILER V8.02   RF24E1                                                                10/05/2006 09:38:17 PAGE 5   

 240          //输出:输出接收到的一个字节
 241          //功能描述:接收主站命令
 242          /*****************************************************************************************/
 243          unsigned char  RxCmd(void)
 244          {
 245   1          unsigned char b;
 246   1         /* CE = 1;
 247   1          while(DR1 == 0);
 248   1              while(DR1)
 249   1              {*/
 250   1          b = SpiReadWrite(0);
 251   1              return b;
 252   1              //CE = 0;
 253   1      
 254   1      }
 255          /*****************************************************************************************
 256          //函数名:SendC()
 257          //输入:发送的数据
 258          //输出:无
 259          //功能描述:串口发送
 260          /*****************************************************************************************/
 261          void SendCh(unsigned char c)
 262          {       
 263   1              EA=0;
 264   1              TI=0;
 265   1              SBUF = c;
 266   1              while(!TI);
 267   1              TI=0;
 268   1              EA=1;
 269   1              
 270   1      } 
 271          
 272          /*****************************************************************************************
 273          //函数名:void InitADC(void)
 274          //输入:无
 275          //输出:无
 276          //功能描述:Nrf24E1ADC初始化
 277          /*****************************************************************************************/
 278          void InitADC()
 279          {
 280   1              ADCCON = 0x20;                  //  NPD=1,内部参考电压20 ->30 test!!!!!!11
 281   1              ADCSTATIC &= 0x1c;
 282   1              #if adc12bits
 283   1              ADCSTATIC |= 0x03;              // 12位ADC
 284   1              #else
                      ADCSTATIC |=0x02;                               //10bits
                      #endif
 287   1      }
 288          /*****************************************************************************************
 289          //函数名

⌨️ 快捷键说明

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