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

📄 main.lst

📁 nrf24e1 PWM输出程序,可以调节占空比,可用做音频信号输出.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.08   MAIN                                                                  10/13/2006 13:38:11 PAGE 5   

 242   1              Delay100us(0);
 243   1              ch = FRESELE << 1;
 244   1              SpiReadWrite(ch);
 245   1              CS = 0;
 246   1      }
 247          /*****************************************************************************************
 248          //函数名:SendC()
 249          //输入:发送的数据
 250          //输出:无
 251          //功能描述:串口初始化
 252          /*****************************************************************************************/
 253          void SendCh(char c)
 254          {
 255   1              TI = 0;
 256   1              SBUF = c;
 257   1              while(!TI);
 258   1              TI = 0;
 259   1      }
 260          
 261          /*****************************************************************************************
 262          //函数名:Nrf24E1Init()
 263          //输入:无
 264          //输出:无
 265          //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
 266          /*****************************************************************************************/
 267          void Nrf24E1Init()
 268          {
 269   1              int8u i;
 270   1              SPICLK = 0;                                 // Max SPI clock
 271   1              SPI_CTRL = 0x02;                            // Connect internal SPI controller to Radio
 272   1              CE = 0;
 273   1              CS = 1;                                     // RF SPI CS = 1
 274   1              Delay100us(0);
 275   1              SpiReadWrite(0x00);                         // We are not using the DuoCeiver functionallity
 276   1              for(i=1;i<15;i++)
 277   1              {
 278   2                      SpiReadWrite(RFConfig[i]);
 279   2              }
 280   1              CS = 0;
 281   1      
 282   1              Delay100us(30);  
 283   1      }
 284          
 285          
 286          /*****************************************************************************************
 287          //函数名:TransmitPacket(int8u *pBuf)
 288          //输入:发送的数据
 289          //输出:无
 290          //功能描述:发送发送缓冲区的数据
 291          /*****************************************************************************************/
 292          TransmitPacket(int8u *pBuf)
 293          {
 294   1              int8u i;
 295   1      
 296   1              SetTxMode();
 297   1              CE = 1;
 298   1              Delay100us(1);
 299   1      
 300   1              for (i=0;i<ADDR_COUNT;i++)
 301   1              {
 302   2                      SpiReadWrite(rfAddress[i]);
 303   2              }
C51 COMPILER V7.08   MAIN                                                                  10/13/2006 13:38:11 PAGE 6   

 304   1              SpiReadWrite(1);
 305   1              for (i=0;i<4;i++)
 306   1              {
 307   2                      SpiReadWrite(pBuf[i]);
 308   2              }
 309   1              CE = 0;
 310   1              Delay100us(13);                              // Wait until finished transmitting (200us + 256us)//delay(5
             -)
 311   1      }
 312          
 313          
 314          /*****************************************************************************************
 315          //函数名:void SendAck(unsigned char msgid)
 316          //输入:发送的数据
 317          //输出:无
 318          //功能描述:发送发送缓冲区的数据
 319          /*****************************************************************************************/
 320          void SendAck(unsigned char msgid)
 321          {
 322   1          
 323   1          int8u i;
 324   1      
 325   1          SetTxMode();
 326   1          CE = 1;
 327   1          Delay100us(2);
 328   1      
 329   1          for (i=0;i<4;i++)
 330   1          {
 331   2              SpiReadWrite(rfAddress[i]);
 332   2          }
 333   1          SpiReadWrite(msgid);                        
 334   1          CE = 0;
 335   1          Delay100us(1);                               
 336   1                                                      
 337   1      }
 338          /*****************************************************************************************
 339          //函数名:int8u ReceivePacket(int8u *pBuf)
 340          //输入:接收数据缓冲区
 341          //输出:成功返回1,否则返回0
 342          //功能描述:接收数据存在缓冲区内
 343          /*****************************************************************************************/
 344          int8u ReceivePacket(int8u *pBuf)
 345          {
 346   1              int8u i,cmd;
 347   1      
 348   1              SetRxMode();
 349   1              CE = 1;    
 350   1              ResetTimer(1);
 351   1              while(DR1 == 0)
 352   1              {
 353   2                      if (ReadTimer(1) > 1000)
 354   2                      {
 355   3                              CE = 0;
 356   3                              return 0;
 357   3                      }
 358   2              }
 359   1              cmd = SpiReadWrite(0);
 360   1              i = 0;
 361   1              while(DR1)
 362   1              {
 363   2                      pBuf[i] = SpiReadWrite(0);
 364   2                      i++;
C51 COMPILER V7.08   MAIN                                                                  10/13/2006 13:38:11 PAGE 7   

 365   2                      if (i == 5)
 366   2                      break;
 367   2              }
 368   1              while(DR1)
 369   1              {
 370   2                      SpiReadWrite(0);
 371   2              }
 372   1              CE = 0;
 373   1              return cmd;
 374   1      }
 375          
 376          /******************************************************************************************
 377          *******************************************************************************************
 378          ************************************中断服务程序*******************************************
 379          *******************************************************************************************
 380          ******************************************************************************************/
 381          void Timer0ISR (void) interrupt 1  using 1              //定时器0中断
 382          {
 383   1              TF0 = 0;                                        // Clear Timer0 interrupt
 384   1              TH0 = t0hrel;                                   // Reload Timer0 high byte
 385   1              TL0 = t0lrel;                                   // Reload Timer0 low byte
 386   1              timer[0]++;                                     // Increment timer[0]
 387   1              timer[1]++;                                     // Increment timer[1
 388   1      }
 389          
 390          void UartISR (void) interrupt 4 using 2                 //串口中断
 391          {
 392   1              int8u temp;
 393   1              
 394   1              EA = 0;
 395   1              if(RI)
 396   1              {
 397   2                      temp = SBUF;
 398   2                      if(temp == '@')                         //帧头
 399   2                      {               
 400   3                              Rx.Buf[0] = '@';
 401   3                              Rx.Counter = 1; 
 402   3                      }
 403   2                      else if(temp == '*')                    //帧尾
 404   2                      {               
 405   3                              Rx.Buf[Rx.Counter] = temp;
 406   3                              Rx.Buf[Rx.Counter + 1] = '\0';
 407   3                              Rx.NewData = 1;
 408   3                      }
 409   2                      else if(Rx.Counter < 39){
 410   3                              Rx.Buf[Rx.Counter] = temp;
 411   3                              Rx.Counter += 1;
 412   3                      }
 413   2                      RI = 0;
 414   2              }
 415   1              if(TI)
 416   1              {
 417   2                      TI = 0;
 418   2              }
 419   1              EA = 1;
 420   1      }
 421          
 422          
 423          /******************************************************************************************
 424          *******************************************************************************************
 425          ******************************************主程序*******************************************
 426          *******************************************************************************************
C51 COMPILER V7.08   MAIN                                                                  10/13/2006 13:38:11 PAGE 8   

 427          ******************************************************************************************/
 428          void main(void)
 429          {       
 430   1              unsigned char temp;
 431   1              unsigned char i;
 432   1      
 433   1              SciInit();
 434   1              TimerInit();
 435   1              EA=1;  
 436   1              LEDR=0;
 437   1              LEDG=0;
 438   1              delay(10000);
 439   1              LEDR=1;
 440   1              LEDG=1;
 441   1              
 442   1              Nrf24E1Init();
 443   1              PWMINIT();
 444   1      
 445   1              while(1)
 446   1              {
 447   2                      for(i=0;i<256;i++)
 448   2                      {       
 449   3                              //PWMDUTY=i;
 450   3                              delay(10);                      
 451   3                      }
 452   2      
 453   2      
 454   2              }
 455   1      
 456   1              while(1)
 457   1              {
 458   2                      for(i=0;i<100;i++) SendCh(0xaa);
 459   2      
 460   2                      
 461   2                      temp = ReceivePacket(buf);
 462   2                      if(temp != 0)
 463   2                      {
 464   3                              SendAck(temp);
 465   3                              LEDR=0;
 466   3                              LEDG=0;
 467   3                              delay(5000);
 468   3                              LEDR=1;
 469   3                              LEDG=1;
 470   3                      }
 471   2      
 472   2              }
 473   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    585    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     53       8
   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 + -