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

📄 ex1c.lst

📁 一个基于nRF24E1的无线通讯程序.24E1是2.4G频段的无线模块,适合在工业及RFID等领域使用.该程序描述了设置及通讯的方式.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 272   2              if ((rxTout != 0) && (GetTimer(1) > rxTout))
 273   2              {
 274   3                  CE = 0;
 275   3                  return 0;
 276   3              }
 277   2          }
 278   1          cmd = SpiReadWrite(0);
 279   1          i = 0;
 280   1          while(DR1)
 281   1          {
 282   2              pBuf[i++] = SpiReadWrite(0);
 283   2              if (i == nBytes)
 284   2                  break;
 285   2          }
 286   1          while(DR1)
 287   1          {
 288   2              SpiReadWrite(0);
 289   2          }
 290   1          CE = 0;
 291   1          return cmd;
 292   1      }
 293          
 294          static unsigned char WaitAck(void)
 295          {
 296   1          unsigned char ack;
 297   1          SetRxMode();
 298   1          CE = 1;
 299   1          ResetTimer(0);
 300   1          while(DR1 == 0)
 301   1          {
 302   2              if (GetTimer(0) > 10)                    // 3ms time-out/10MS
C51 COMPILER V7.08   EX1C                                                                  06/06/2005 17:50:27 PAGE 6   

 303   2              {
 304   3                  CE = 0;
 305   3                  return 0;
 306   3              }
 307   2          }
 308   1          ack = SpiReadWrite(0);
 309   1          while(DR1)
 310   1          {
 311   2              SpiReadWrite(0);
 312   2          }
 313   1          CE = 0;
 314   1          return ack;
 315   1      }
 316          
 317          unsigned char TransmitPacket(unsigned char *pBuf)
 318          {
 319   1          unsigned int i;
 320   1          unsigned char cmdt, cmdr, j;
 321   1      
 322   1          seq++;
 323   1          cmdt = 0x10 | (seq & 0x0f);
 324   1          cmdr = 0;
 325   1          ResetTimer(1);
 326   1          for(;;)
 327   1          {
 328   2              for (i=0;i<3;i++)          //JUST 6 TIME
 329   2              {
 330   3                  // Repeat two times on all channels if no ACK is received
 331   3                  for (j=0;j<2;j++)
 332   3                  {
 333   4                      TransmitBytes(pBuf, cmdt);
 334   4                      cmdr = WaitAck();
 335   4                      if ((cmdr != 0) && ((cmdr & 0x0f) == (cmdt & 0x0f)))
 336   4                      {
 337   5                          //hopIdx++;    NOT HOP
 338   5                          return 1;
 339   5                      }
 340   4                  }
 341   3                 // hopIdx++;     NOT HOP
 342   3                  if ((txTout != 0) && (GetTimer(1) > txTout))
 343   3                      return 0;
 344   3              }
 345   2          }
 346   1          return 0;
 347   1      }
 348          
 349          unsigned char ReceivePacket(unsigned char *pBuf)
 350          {
 351   1          unsigned char cmd;
 352   1      
 353   1          //done = 0;
 354   1          while(1)
 355   1          {
 356   2              cmd = ReceiveBytes(pBuf);
 357   2               if (cmd == 0)
 358   2                  return 0;
 359   2               cmd = (cmd & 0x0f) | 0x20;
 360   2               SendAck(cmd);
 361   2               Delay100us(1);
 362   2               SendAck(cmd);
 363   2               Delay100us(10);
 364   2               SendAck(0X20);
C51 COMPILER V7.08   EX1C                                                                  06/06/2005 17:50:27 PAGE 7   

 365   2              //hopIdx++;
 366   2              if ((cmd & 0x0f) != seq)
 367   2              {
 368   3                  seq = cmd & 0x0f;
 369   3                  //done = 1;
 370   3                   break;
 371   3              }
 372   2          }
 373   1          return 1;
 374   1      }
 375          
 376          //void ReceiverTimeout(unsigned tOut)
 377          //{
 378                  // Set the receiver timeout in ms.
 379                  // 1ms = min timeout, 65536ms is max, 0 means wait forever
 380          //      rxTout = tOut;
 381          //}
 382          
 383          //void TransmitterTimeout(unsigned tOut)
 384          //{
 385                  // Set the transmitter timeout in ms
 386                  // 1ms is min timeout, 65536ms is max, 0 means wait forever
 387          //      txTout = tOut;
 388          //}
 389          
 390          void InitReceiver(unsigned char n, unsigned char *pAddr)
 391          {
 392   1          seq = 15;
 393   1          rxTout = 1000;                                                              // Default 3s timeout    
 394   1          nBytes = n;                                 // Number of data bytes (0-25)
 395   1      
 396   1          SPICLK = 0;                                 // Max SPI clock
 397   1          SPI_CTRL = 0x02;                            // Connect internal SPI controller to Radio
 398   1          CE = 0;
 399   1          CS = 1;                                     // RF SPI CS = 1
 400   1          Delay100us(0);
 401   1      
 402   1          SpiReadWrite(0x00);                         // We are not using the DuoCeiver functionallity
 403   1          SpiReadWrite((n+1)*8);                      // Number of Rx data bits
 404   1          InitCommon(pAddr);
 405   1      }
 406          
 407          void InitTransmitter(unsigned char n, unsigned char *pAddr)
 408          {
 409   1          seq = 0;
 410   1          txTout = 1000;                                                              // Default 3s timeout
 411   1          nBytes = n;                                 // Number of data bytes (0-25)
 412   1          SPICLK = 0;                                 // Max SPI clock
 413   1          SPI_CTRL = 0x02;                            // Connect internal SPI controller to Radio
 414   1          CE = 0;
 415   1          CS = 1;                                     // RF SPI CS = 1
 416   1          Delay100us(0);
 417   1          SpiReadWrite(0x00);                         // We are not using the DuoCeiver functionallity
 418   1          SpiReadWrite(8);                            // Number of Rx data bits is 8 for the transmitter
 419   1          InitCommon(pAddr);
 420   1      }
 421          void ReceiveFile(void)
 422          {
 423   1         // unsigned char xdata i;
 424   1      
 425   1          InitReceiver(25, 0);
 426   1          while(1)
C51 COMPILER V7.08   EX1C                                                                  06/06/2005 17:50:27 PAGE 8   

 427   1          {
 428   2             if (ReceivePacket(buf) != 0)
 429   2                      {
 430   3                           
 431   3                                 LEDG=0;
 432   3                                         LEDR=1;
 433   3                                      
 434   3                                         //for (i=0;i<25;i++)             //if use ISD debug ,dont use this one
 435   3                                             //   { PutChara(buf[i]);}
 436   3                     //for (j=0;j<20;j++)
 437   3                         //{Delay100us(200);}      //LEDG  400mS
 438   3                                                                                                       
 439   3                                       }
 440   2                      else
 441   2                      {
 442   3                          LEDR=0; 
 443   3                                          LEDG=1;   // Indicates an error
 444   3                     //for (j=0;j<20;j++)
 445   3                         //{Delay100us(200);}      //LEDG  400mS
 446   3      
 447   3                      }
 448   2                  //PutChar(buf[n++]);
 449   2          }
 450   1      }
 451          
 452          
 453          void TransmitFile(void)
 454          {
 455   1          unsigned int xdata temp,j;
 456   1          unsigned char xdata  n;
 457   1              n=0;
 458   1          InitTransmitter(25, 0);
 459   1          while(1)
 460   1          {   
 461   2               for (aaa=0;aaa<25;aaa++)
 462   2                {buf[aaa]=ID[aaa];} 
 463   2               n=n+1;
 464   2                   buf[24]=n;
 465   2          
 466   2                  temp= ( TransmitPacket(buf));
 467   2                                 
 468   2                          if (temp==1)
 469   2                                  {  LEDR=0;
 470   3                                     //s=s-1;
 471   3                                        // buf[19]=s;
 472   3                                        // speeker();
 473   3                                      }
 474   2                              else   {LEDG=0;                //Y LED OFF
 475   3                                     // i=4;
 476   3                                         //   s=4;
 477   3                                    // speeker1();
 478   3                                     }
 479   2                               if (temp==1)
 480   2                 {  for (j=0;j<25;j++)
 481   3                         {Delay100us(200);}      //LEDG  20mS
 482   3                           //LEDR=0;
 483   3                   LEDR=1;
 484   3                           }
 485   2                               else {
 486   3                                   for (j=0;j<25;j++)
 487   3                         {Delay100us(200);}      //LEDG  400mS
 488   3                             //LEDR=0;
C51 COMPILER V7.08   EX1C                                                                  06/06/2005 17:50:27 PAGE 9   

 489   3                      LEDG=1;
 490   3                                     }
 491   2                    for (bbb=0;bbb<2;bbb++)           //2s
 492   2                {     
 493   3                        for (aaa=0;aaa<100;aaa++)        //delay 1s
 494   3                {Delay100us(100);}               //delay10ms
 495   3                        }
 496   2          }
 497   1      }
 498          int main(void)
 499          {       unsigned char aaa;
 500   1          Init();
 501   1              
 502   1          ISDwait();
 503   1          EA=1;
 504   1              LEDR=0;
 505   1              LEDG=0;
 506   1              for (aaa=0;aaa<100;aaa++)
 507   1                {Delay100us(50);}
 508   1        
 509   1          LEDR=1;
 510   1              LEDG=1;
 511   1              for (aaa=0;aaa<100;aaa++)
 512   1                {Delay100us(100);}
 513   1          LEDR=0;
 514   1              LEDG=0;
 515   1          while(1)
 516   1          {
 517   2      
 518   2              //    case 'R':
 519   2                          if (KEYR==0)
 520   2                                {
 521   3                                  LEDR=1;
 522   3                          LEDG=0;
 523   3                     ReceiveFile();
 524   3                      }
 525   2                      
 526   2                  //case 'T':
 527   2                              if (KEYT==0)
 528   2                                {
 529   3                                  LEDR=0;
 530   3                          LEDG=1;
 531   3                      TransmitFile();
 532   3                                 }
 533   2      
 534   2          }
 535   1      
 536   1          return 0;
 537   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1192    ----
   CONSTANT SIZE    =    256    ----
   XDATA SIZE       =   ----       5
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     69      19
   IDATA SIZE       =     40    ----
   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 + -