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

📄 my_nrf905.lst

📁 这是我自己写的nRF905射频IC收发于一起的程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 248   3                              recv0_buf[recv0_num] = recv0_data;
 249   3                              recv0_num++;
 250   3                              recv0_flag = 1;
 251   3                      }
 252   2                      else
 253   2                      {
 254   3                              recv1_data = SBUF;
 255   3                              recv1_buf[recv1_num] = recv1_data;
 256   3                              recv1_num++;
 257   3                              recv1_flag = 1;
 258   3                      }
 259   2                      rec_ok = 1;                                                                                        //表示串口现在接收完了。
 260   2              }
 261   1              _nop_();
 262   1      }
 263          
 264          /*************串口发送一个字节子程序******/
 265          void SendByte(unsigned char x)
 266          {
 267   1              SBUF=x;
 268   1              while(!TI);
 269   1              TI=0;
 270   1      }
 271          /***********RF接收状态**********/
 272          void SetRxStatus(void)
 273          {
 274   1                              TRX_CE  =1;
 275   1                              TX_EN   =0;
 276   1                              delay650();
 277   1                              delay650();
 278   1      
 279   1                              TR0=ON;                                 //启动T0定时
 280   1                              ET0=1;
 281   1                              delay(50);
 282   1                              write_flag=False;
 283   1      }
 284          
 285          /*********RF发送打包子程序***********/
 286          void TxPack(void)
 287          {
 288   1                      unsigned char *a1,*a2;
 289   1                      unsigned char b1,b2;
 290   1                      RERFOK = 0;                                     //发送指示灯亮
 291   1                      write_flag=1;
 292   1                      TX_EN   = OFF;
 293   1                      TRX_CE  = OFF;
 294   1                      delay650();
 295   1                      
 296   1                      Spi_tx_addr();
 297   1                      _nop_();
 298   1      
 299   1                      if(recv0_flag)
 300   1                      {
 301   2                              _nop_();
 302   2                              if(deal0_flag)
 303   2                              {
C51 COMPILER V7.50   MY_NRF905                                                             11/14/2005 16:14:24 PAGE 6   

 304   3                                      a1 = &recv0_buf[0];
 305   3                                      b1 = recv0_num;
 306   3                                      SpiWrite_some(a1, b1);
 307   3                                      _nop_();
 308   3                                      
 309   3                                      RF_send ();
 310   3                                      _nop_();
 311   3                              }
 312   2                      }
 313   1                      if(recv1_flag)
 314   1                      {
 315   2                              _nop_();
 316   2                              if(deal1_flag)
 317   2                              {
 318   3                                      a2 = &recv1_buf[0];
 319   3                                      b2 = recv1_num;
 320   3                                      SpiWrite_some(a2, b2);
 321   3                                      _nop_();
 322   3                              
 323   3                                      RF_send ();
 324   3                                      _nop_();
 325   3                              }
 326   2                      }
 327   1                      RERFOK = 1;                                     //发送指示灯亮
 328   1                      write_flag = 0;
 329   1      }
 330          
 331          
 332          
 333          /**************RF接收包**********/
 334          
 335          /*******主程序*******/
 336          void main(void)
 337          {
 338   1              P1=0xff;
 339   1              P2=0xff;
 340   1              P3=0xff;
 341   1              Sysinit();                                                                              //系统初始化
 342   1      
 343   1              frequency=0;                                                                    //设置频点
 344   1              frequency=(P2^0x0f)&0x0f;
 345   1      
 346   1              delay(30);
 347   1      
 348   1              InitnRF905();
 349   1      
 350   1              DR=OFF;
 351   1              AM=OFF;
 352   1      
 353   1              delay(60);
 354   1              /*******全局变量标志位初值*********/
 355   1      
 356   1              deal0_flag = 0;                                         //处理串口数组0的标志位
 357   1              deal1_flag = 0;                                         //处理串口数组1的标志位
 358   1              rec_flag1 = 0;                                  //串口接收数组分类的标志位
 359   1              recv0_flag = 0;                                 //串口接收数组0是否有数据
 360   1              recv1_flag = 0;                                 //串口接收数组1是否有数据
 361   1      
 362   1              rec_ok = 0;                                             //串口单个字节接收是否完成的标志位
 363   1              RFrec_flag = 0;                                 //RF接收数组分类标志位
 364   1              RFrec0_flag = 0;                                //RF接收数组0是否有数据的标志位
 365   1              RFrec1_flag = 0;                            //RF接收数组1是否有数据的标志位
C51 COMPILER V7.50   MY_NRF905                                                             11/14/2005 16:14:24 PAGE 7   

 366   1      
 367   1              AMflag = 0;
 368   1              count_p = 0;
 369   1              count_r = 0;
 370   1              write_flag = 0;;                                //是否正在读取的标志位
 371   1              delay_flag = 0;                                 //延时中断标志位
 372   1      
 373   1              recv0_num = 0;                                   //串口接收数组0的字节个数
 374   1              recv1_num = 0;                                   //串口接收数组1的字节个数
 375   1      
 376   1              RFrec0_num = 0;                                  //RF接收数组0的字节个数
 377   1              RFrec1_num = 0;                                  //RF接收数组1的字节个数
 378   1      
 379   1              PWR_UP=ON;                                                //给nRF905上电,并设置
 380   1              TRX_CE=OFF;
 381   1              TX_EN=OFF;
 382   1              Config905();
 383   1      
 384   1              delay(60);
 385   1              IE0 = 0;
 386   1              EX0 = 1;
 387   1      
 388   1              delay650();
 389   1              SetRxStatus();
 390   1      
 391   1              while(1)
 392   1              {
 393   2                      _nop_();
 394   2                      /********检测串口接收数组0是否有数据发送**********/
 395   2                      if (rec_ok)
 396   2                      {
 397   3                              _nop_();
 398   3                              if (recv0_flag)
 399   3                              {
 400   4                                      rec_flag1 = 1;
 401   4                                      deal0_flag = 1;
 402   4                                      rec_ok = 0;
 403   4                                      TxPack();
 404   4                                      _nop_();
 405   4                                      delay650();
 406   4                                      delay650();
 407   4      //                              TI = 0;
 408   4      //                      for(count_r=0;count_r < recv0_num ;count_r++)
 409   4      //                              {
 410   4      //                              SendByte(recv0_buf[count_r]);
 411   4      //                              }
 412   4                                      recv0_num = 0;
 413   4                                      recv0_flag = 0;
 414   4                                      rec_flag1 = 0;
 415   4                                      deal0_flag =0;
 416   4                              }
 417   3                      }
 418   2                      /**********下面是RF接收数据**********/
 419   2                      if(RFrec0_flag)
 420   2                      {                                                         
 421   3                              
 422   3                              RFrec_flag = 1;
 423   3                              RFrec0_flag = 0;
 424   3                                      RERFOK = 0;
 425   3                                      delay650();
 426   3                              if ((rxpack0_buf[0] == 0xFA) && (rxpack0_buf[1] == 0xAF))
 427   3                              {
C51 COMPILER V7.50   MY_NRF905                                                             11/14/2005 16:14:24 PAGE 8   

 428   4                                      TI = 0;
 429   4                                      for(count_r=2;count_r < RFrec0_num + 2 ;count_r++)
 430   4                                      {
 431   5                                              SendByte(rxpack0_buf[count_r]);
 432   5                                      }
 433   4                              }
 434   3                              RFrec0_num = 0;
 435   3                              RFrec_flag = 0;
 436   3                              RERFOK = 1;
 437   3                      }
 438   2                      /**********检测接收状态************/
 439   2                      delay650();
 440   2                      SetRxStatus();
 441   2                      delay650();
 442   2                      /********检测串口接收数组1是否有数据发送**********/
 443   2                      if (rec_ok)
 444   2                      {
 445   3                              _nop_();
 446   3                              if (recv1_flag)
 447   3                              {
 448   4                                      rec_ok = 0;
 449   4                                      deal1_flag = 1;
 450   4                                      TxPack();
 451   4                                      _nop_();
 452   4                                      delay650();
 453   4                                      delay650();
 454   4      //                              TI = 0;
 455   4      //                              for(count_r=0;count_r < recv1_num; count_r++)
 456   4      //                              {
 457   4      //                              SendByte(recv1_buf[count_r]);
 458   4      //                              }
 459   4                                      recv1_num = 0;
 460   4                                      recv1_flag = 0;
 461   4                                      deal1_flag = 0;
 462   4                              }
 463   3                      }
 464   2                      /*********判断RF接收的数据是否正确***********/
 465   2                      if(RFrec1_flag)
 466   2                      {                                                         
 467   3                              RERFOK = 0;
 468   3                              RFrec1_flag = 0;
 469   3                              if ((rxpack1_buf[0] == 0xFA) && (rxpack1_buf[1] == 0xAF))
 470   3                              {
 471   4                                      TI = 0;
 472   4                                      for(count_r=2;count_r < RFrec1_num + 2;count_r++)
 473   4                                      {
 474   5                                              SendByte(rxpack1_buf[count_r]);
 475   5                                      }
 476   4                              }
 477   3                              RFrec1_num = 0;
 478   3                              RERFOK = 1;
 479   3                      }
 480   2                       /************检测接收状态************/
 481   2                      delay650();
 482   2                      SetRxStatus();
 483   2                      delay650();
 484   2              }
 485   1              _nop_();
 486   1      }
 487          


C51 COMPILER V7.50   MY_NRF905                                                             11/14/2005 16:14:24 PAGE 9   

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1004    ----
   CONSTANT SIZE    =     27    ----
   XDATA SIZE       =    765    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =     13    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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