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

📄 main.lst

📁 无线龙ZigBee模块NRF24E1 接收-发送表演程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 222   1              ch = FRESELE << 1;
 223   1              SpiReadWrite(ch | 0x01);
 224   1              CS = 0;
 225   1      }
 226          /*****************************************************************************************
 227          //函数名:SetRxMode()
 228          //输入:无
 229          //输出:无
 230          //功能描述:转为接收模式
 231          /*****************************************************************************************/
 232          void SetTxMode(void)
 233          {
 234   1              int8u ch;
 235   1              CS = 1;
 236   1              Delay100us(0);
 237   1              ch = FRESELE << 1;
 238   1              SpiReadWrite(ch);
 239   1              CS = 0;
 240   1      }
 241          
C51 COMPILER V7.08   MAIN                                                                  10/08/2005 16:00:17 PAGE 5   

 242          /*****************************************************************************************
 243          //函数名:SendC()
 244          //输入:发送的数据
 245          //输出:无
 246          //功能描述:串口初始化
 247          /*****************************************************************************************/
 248          void SendCh(char c)
 249          {
 250   1              TI = 0;
 251   1              SBUF = c;
 252   1              while(!TI);
 253   1              TI = 0;
 254   1      }
 255          
 256          /*****************************************************************************************
 257          //函数名:Nrf24E1Init()
 258          //输入:无
 259          //输出:无
 260          //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
 261          /*****************************************************************************************/
 262          void Nrf24E1Init()
 263          {
 264   1              int8u i;
 265   1              SPICLK = 0;                                 // Max SPI clock
 266   1              SPI_CTRL = 0x02;                            // Connect internal SPI controller to Radio
 267   1              CE = 0;
 268   1              CS = 1;                                     // RF SPI CS = 1
 269   1              Delay100us(0);
 270   1              SpiReadWrite(0x00);                         // We are not using the DuoCeiver functionallity
 271   1              for(i=1;i<15;i++)
 272   1              {
 273   2                      SpiReadWrite(RFConfig[i]);
 274   2              }
 275   1              CS = 0;
 276   1      
 277   1              Delay100us(30);  
 278   1      }
 279          /*****************************************************************************************
 280          //函数名:int8u WaitAck(void)
 281          //输入:无
 282          //输出:返回应答信号
 283          //功能描述:等待应答,并返回应答信号
 284          /*****************************************************************************************/
 285          int8u WaitAck(void)
 286          {
 287   1          int8u ack;
 288   1          SetRxMode();
 289   1          CE = 1;
 290   1          ResetTimer(0);
 291   1          while(DR1 == 0)
 292   1          {
 293   2              if (ReadTimer(0) > 10)                    // 3ms time-out/10MS
 294   2              {
 295   3                  CE = 0;
 296   3                  return 0;
 297   3              }
 298   2          }
 299   1          ack = SpiReadWrite(0);
 300   1          while(DR1)
 301   1          {
 302   2              SpiReadWrite(0);
 303   2          }
C51 COMPILER V7.08   MAIN                                                                  10/08/2005 16:00:17 PAGE 6   

 304   1          CE = 0;
 305   1          return ack;
 306   1      }
 307          /*****************************************************************************************
 308          //函数名:TransmitPacket(int8u *pBuf)
 309          //输入:发送的数据
 310          //输出:无
 311          //功能描述:发送发送缓冲区的数据
 312          /*****************************************************************************************/
 313          TransmitPacket(int8u *pBuf,int8u crc)
 314          {
 315   1              int8u i;
 316   1      
 317   1              SetTxMode();
 318   1              CE = 1;
 319   1              Delay100us(1);
 320   1      
 321   1              for (i=0;i<ADDR_COUNT;i++)
 322   1              {
 323   2                      SpiReadWrite(rfAddress[i]);
 324   2              }
 325   1              SpiReadWrite(crc);
 326   1              for (i=0;i<4;i++)
 327   1              {
 328   2                      SpiReadWrite(pBuf[i]);
 329   2              }
 330   1              CE = 0;
 331   1              Delay100us(6);                              // Wait until finished transmitting (200us + 256us)//delay(5)
 332   1      }
 333          
 334          
 335          /******************************************************************************************
 336          *******************************************************************************************
 337          ************************************中断服务程序*******************************************
 338          *******************************************************************************************
 339          ******************************************************************************************/
 340          void Timer0ISR (void) interrupt 1  using 1
 341          {
 342   1              TF0 = 0;                                    // Clear Timer0 interrupt
 343   1              TH0 = t0hrel;                               // Reload Timer0 high byte
 344   1              TL0 = t0lrel;                               // Reload Timer0 low byte
 345   1              timer[0]++;                                 // Increment timer[0]
 346   1              timer[1]++;                                 // Increment timer[1
 347   1      }
 348          
 349          void UartISR (void) interrupt 4 using 2
 350          {
 351   1              int8u temp;
 352   1              
 353   1              EA = 0;
 354   1              if(RI)
 355   1              {
 356   2                      temp = SBUF;
 357   2                      if(temp == '@')//
 358   2                      {               
 359   3                              Rx.Buf[0] = '@';
 360   3                              Rx.Counter = 1; 
 361   3                      }
 362   2                      else if(temp == '*')//?β
 363   2                      {               
 364   3                              Rx.Buf[Rx.Counter] = temp;
 365   3                              Rx.Buf[Rx.Counter + 1] = '\0';
C51 COMPILER V7.08   MAIN                                                                  10/08/2005 16:00:17 PAGE 7   

 366   3                              Rx.NewData = 1;
 367   3                      }
 368   2                      else if(Rx.Counter < 39){
 369   3                              Rx.Buf[Rx.Counter] = temp;
 370   3                              Rx.Counter += 1;
 371   3                      }
 372   2                      RI = 0;
 373   2              }
 374   1              if(TI)
 375   1              {
 376   2                      TI = 0;
 377   2              }
 378   1              EA = 1;
 379   1      }
 380          
 381          
 382          
 383          
 384          
 385          
 386          
 387          
 388          /******************************************************************************************
 389          *******************************************************************************************
 390          ******************************************主程序*******************************************
 391          *******************************************************************************************
 392          ******************************************************************************************/
 393          main(void)
 394          {
 395   1              static int8u cmd,crc;
 396   1              SciInit();
 397   1              TimerInit();
 398   1              EA=1;  
 399   1              LEDR=0;
 400   1              LEDG=0;
 401   1      
 402   1              LEDR=1;
 403   1              LEDG=1;
 404   1              TxBuf[0] = 0x40;
 405   1              TxBuf[1] = 0x41;
 406   1              TxBuf[2] = 0x42;
 407   1              TxBuf[3] = 0x43;
 408   1              
 409   1              Nrf24E1Init();
 410   1      
 411   1      
 412   1              while(1)
 413   1              {
 414   2                      
 415   2                      while(1)
 416   2                      {
 417   3                              cmd = (int8u)rand();
 418   3                              if(cmd != 0)break;
 419   3                      }
 420   2                      TransmitPacket(TxBuf,cmd);
 421   2                      crc = WaitAck();
 422   2                      if(cmd == crc)
 423   2                      {
 424   3                              LEDR=0;
 425   3                              LEDG=0;
 426   3                              delay(5000);
 427   3                              LEDR=1;
C51 COMPILER V7.08   MAIN                                                                  10/08/2005 16:00:17 PAGE 8   

 428   3                              LEDG=1;
 429   3                      }
 430   2                      delay(60000);
 431   2                      delay(60000);
 432   2              } 
 433   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    554    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     55       3
   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 + -