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

📄 rf24e1.lst

📁 基于无线单片机24e1的组网程序。在无线传感器之类的应用中的成功案例。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 189          //We can be so lazy!!
 190          //filename:SetRxMode()
 191          //input:none
 192          //output:none
 193          //================================================================
 194          /*static void SetRxMode(void)
 195          {
 196                  CE = 0;
 197                  CS = 1;
 198                  Delay100us(0);
 199                  SpiReadWrite(rconf.buf[14]);
 200                  CS = 0;
 201          }*/
 202          //================================================================
 203          //函数功能:将无线子系统设置为发射模式
 204          //filename:SetRxMode()
 205          //input:none
 206          //output:none
 207          //================================================================
 208          /*
 209          static void SetTxMode(void)
 210          {
 211                  CE = 0;
 212                  CS = 1;
 213                  Delay100us(0);
 214                  SpiReadWrite(tconf.buf[14]);
 215                  CS = 0;
 216          }*/
 217          //================================================================
 218          //函数功能:将无线子系统初始化
 219          //filename:SetRxMode()
 220          //input:none
 221          //output:none
 222          //================================================================
 223          void fRfInit(void){
 224   1              uchar b;
 225   1      
 226   1          PWR_UP = 1;                         // Turn on Radio
 227   1          Delay100us(30);                     // Wait > 3ms 
 228   1          SPICLK = 0;                         // Max SPI clock (XTAL/8)
 229   1          SPI_CTRL = 0x02;                    // Connect internal SPI controller to Radio
 230   1              CS = 1;                                 // RF SPI CS = 1,进行配置
 231   1              Delay100us(0);
 232   1          for(b=0;b<rconf.n;b++)                              //初始化接收状态
 233   1          {
 234   2              SpiReadWrite(rconf.buf[b]);
 235   2          }
 236   1          CS = 0;                                                             //退出配置状态
 237   1              Delay100us(0);
 238   1              CE = 1;                                                         //启动接收                              
 239   1      
C51 COMPILER V8.02   RF24E1                                                                10/05/2006 10:18:20 PAGE 5   

 240   1      }
 241          void SysInit(void)
 242          {
 243   1      //void IO_Init(void)
 244   1      
 245   1          P0_ALT = 0x06;                                      // Select alternate functions on pins P0.1 and P0.2,  TXD RXD 
 246   1          P0_DIR = 0x00;                              // P0 work as output
 247   1          P0 = 0xff;                          // all hight    
 248   1              P1_DIR = 0x00;  
 249   1      
 250   1      
 251   1      
 252   1      //void InitSerial(void) 
 253   1      
 254   1              TH1 = 0x98;      // 2400@16MHz (when T1M=1 and SMOD=1)
 255   1              CKCON |= 0x10;  // T1M=1 (/4 timer clock)
 256   1              PCON = 0x80;    // SMOD=1 (double baud rate)
 257   1              SCON = 0x52;    // Serial mode1, enable receiver
 258   1              TMOD = 0x20;    // Timer1 8bit auto reload 
 259   1              TR1 = 1;        // Start timer1
 260   1      
 261   1              ES = 1;
 262   1      //void Timer0_Init(void)
 263   1      
 264   1      
 265   1              TMOD &= ~0x03;
 266   1              TMOD |= 0x01;                           // mode 1
 267   1              //CKCON |= 0x08;                        // T0M = 1 (/4 timer clock)
 268   1                                                              // Clear any pending Timer0 interrupts
 269   1              TH0=0xcb;
 270   1              TL0=0xea;                                                               //10ms
 271   1              ET0 = 1;                                // Enable Timer0 interrupt
 272   1              TR0 = 1;                                // Start Timer0
 273   1      //      EA=1;
 274   1      //      EA=1;  
 275   1      
 276   1      }
 277          void InitADC(void)
 278          {
 279   1              ADCCON = 0x20;                  //  NPD=1,内部参考电压
 280   1              ADCSTATIC &= 0x1c;
 281   1              ADCSTATIC |= 0x03;              // 12位ADC
 282   1      }       
 283          
 284          
 285          //================================================================
 286          //函数功能:发射一个对查询命令('f')
 287          //filename:TransmitCMD()
 288          //input:节点地址的最低字节   2006-8-18该的
 289          //output:none
 290          //================================================================
 291          /*
 292          void TransmitCMD(unsigned char nda)
 293          {
 294              unsigned char i;
 295              CE = 1;
 296              Delay100us(0);
 297                  tconf.buf[ADDR_INDEX+ADDR_COUNT-1]=nda;
 298              for(i=0;i<ADDR_COUNT;i++)
 299                  {
 300              SpiReadWrite(tconf.buf[ADDR_INDEX+i]);      //写目标地址
 301                  }
C51 COMPILER V8.02   RF24E1                                                                10/05/2006 10:18:20 PAGE 6   

 302          
 303              SpiReadWrite('f');                                          //写数据(8字节)
 304                  CE = 0;
 305              Delay100us(3);                              // Wait ~300us   
 306          }
 307          */
 308          /*****************************************************************************************
 309          //函数名:RxPacket()
 310          //输入:none
 311          //输出:无
 312          //功能描述:接收一组数据包
 313          /*****************************************************************************************/
 314          /*unsigned char RxPack(void)
 315          {
 316              unsigned char b,jj=0;
 317              CE = 1;
 318              while(!DR1)
 319                  {
 320          
 321                          if(ReqTimeout>15)//50ms超时
 322                          {
 323          
 324                          ReqTimeout=0xff;
 325                          return 0;
 326                          }                                       
 327                  }
 328                  while(DR1)
 329                  {
 330              b = SpiReadWrite(0);
 331                  adcResult_list[jj][0]=b;
 332                  b=SpiReadWrite(0);
 333                  adcResult_list[jj++][1]=b;
 334                  }
 335              CE = 0;
 336              return jj;
 337                  ReqTimeout=0;
 338          }*/
 339          
 340          
 341          
 342          
 343          /*****************************************************************************************
 344          //函数名:ReadShowADC()
 345          //输入:通道选择,0~7,8为电源电压;
 346          //输出:the value of the certain chanel
 347          //功能描述:显示相关通道的采样值
 348          /*****************************************************************************************/
 349          unsigned int ReadShowADC(unsigned char chindex)
 350          {       unsigned long xdata long_temp;
 351   1              unsigned int xdata result;
 352   1         
 353   1              ADCCON |= chindex;
 354   1              ADCCON &= ~0x80;                // 
 355   1              ADCCON |= 0x80;                 // 开始转换                     //
 356   1              while((EXIF & 0x10) == 0)       // 转换完成
 357   1              ;
 358   1              EXIF &= ~0x10;                  // 清除标致            
 359   1              result = (ADCDATAH<<8) + (ADCDATAL);// 读ADC值12位
 360   1              result >>= 4;
 361   1              long_temp=(unsigned long)(result)*1220;
 362   1          result=long_temp/0xfff;//实际值的1000倍
 363   1                                                              //注:这里采样地是通道地原始值,系数在M128方处理了。
C51 COMPILER V8.02   RF24E1                                                                10/05/2006 10:18:20 PAGE 7   

 364   1      
 365   1              return result;  
 366   1      }
 367          
 368          //================================================================
 369          //函数功能:校验和
 370          //filename:CheckSum()
 371          //input:
 372          //output:
 373          //================================================================
 374          void CheckSum(unsigned char xdata  *ptr)
 375          {
 376   1      //        unsigned char da;
 377   1              unsigned char i;
 378   1      //       CrcTemp.iWord = 0xffff;
 379   1                      CheckSumTemp.iWord = 0;
 380   1      //              SBUF=*ptr;
 381   1              for( i=0; i<count; i++ )
 382   1              {
 383   2      //                da=CrcTemp.iData.cHigh >> 4; /* 暂存CRC的高四位 */
 384   2      
 385   2      //               CrcTemp.iWord <<= 4; /* CRC右移4位,相当于取CRC的低12位)*/
 386   2      
 387   2      //                CrcTemp.iWord ^= crc_ta[da^(*ptr/16)]; /* CRC的高4位和本字节的前半字节相加后查表计算CRC

⌨️ 快捷键说明

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