main.lst

来自「用at89c2051做avr910串口下载器的资料。很好的。对没有并口的朋友来说」· LST 代码 · 共 539 行 · 第 1/2 页

LST
539 行
字号
 253   1              wrser(0x53);            // SPI write (byte 2)
 254   1              if ( (device >= 0x20) && (device <= 0x7F) )
 255   1              {
 256   2                      count = 32;
 257   2                      do {
 258   3                              if (wrser(0) == 0x53)   // SPI read (byte 3)
 259   3                                      break;
 260   3                              wrser(0x00);            // SPI write (byte 4)
 261   3                              pulse_sck();
 262   3                              wrser(0xac);            // SPI write (byte 1)
 263   3                              wrser(0x53);            // SPI write (byte 2)
 264   3      
 265   3                      } while(--count);
 266   2              }else wrser(0x00);              // SPI write (byte 3)
 267   1      
 268   1              wrser(0x00);    // SPI write (byte 4)
 269   1              Delay(100);
 270   1      }
 271          
 272          void writeFLASHdelay(void)
 273          { //根据芯片类型,决定是否延时
 274   1              if(pgm_mode == 0)
 275   1              {
 276   2      #ifndef SL_BOARD
 277   2                      Delay(100);
 278   2      #else 
                              Delay(250);
              #endif
 281   2              }
 282   1      }
 283          
 284          unsigned char w17call(unsigned char param1)
 285          {
 286   1              wrser(0x30);
 287   1              wrser(0x00);
 288   1              wrser(param1);
 289   1              return wrser(0);
 290   1      }
 291          
 292          
 293          unsigned char device;
 294          unsigned char LedData;
 295          
 296          void main(void)
 297          {
 298   1              LED_GREEN = 0;
 299   1              Delay(60254);
 300   1              LED_GREEN = 1;
 301   1              init_serial( );
 302   1              while(1)
C51 COMPILER V8.08   MAIN                                                                  12/09/2007 20:15:04 PAGE 6   

 303   1              {
 304   2                      _nop_();
 305   2                      switch(getc())
 306   2                      {
 307   3                      case 0x1b:
 308   3                              LED_GREEN = 0;
 309   3                              break;
 310   3      
 311   3                      case 'T':
 312   3                              device = getc();
 313   3                              putc(0x0d);
 314   3                              break;
 315   3      
 316   3                      case 'S':
 317   3                              showID();
 318   3                              break;
 319   3      
 320   3                      case 'V':
 321   3                              putc(SW_MAJOR);
 322   3                              putc(SW_MINOR);
 323   3                              break;
 324   3      
 325   3                      case 'v':
 326   3                              putc(HW_MAJOR);
 327   3                              putc(HW_MINOR);
 328   3                              break;
 329   3      
 330   3                      case 't':
 331   3                              show_device();//Show supported devices
 332   3                              break;
 333   3      
 334   3                      case 'p':
 335   3                              putc('S');
 336   3                              break;
 337   3      
 338   3                      case 'a':
 339   3                              putc('Y');
 340   3                              break;
 341   3      
 342   3                      case 'x':
 343   3                              LedData = getc();
 344   3                              if(LedData == 1)
 345   3                                      LED_GREEN = 0 ;
 346   3                              else 
 347   3                                      LED_GREEN = 1 ;
 348   3                              putc(0x0d);
 349   3                              break;
 350   3                      
 351   3                      case 'y':
 352   3                              LedData = getc();
 353   3                              if(LedData == 1)
 354   3                                      LED_RED2 = 0 ;
 355   3                              else 
 356   3                                      LED_RED2 = 1 ;
 357   3                              putc(0x0d);
 358   3                              break;
 359   3      
 360   3                      case 'P':
 361   3                              spiinit();
 362   3                              LED_RED1 = 0;
 363   3                              pgm_mode = check_device(device);
 364   3                              if ( pgm_mode != '?' )
C51 COMPILER V8.08   MAIN                                                                  12/09/2007 20:15:04 PAGE 7   

 365   3                                      putc(0x0d);
 366   3                              else 
 367   3                                      putc('?');
 368   3                              break;
 369   3      
 370   3                      case 'C':       //Write program memory, high byte
 371   3                              wrser(0x48);
 372   3                              wrser(Addr_H);
 373   3                              wrser(Addr_L);
 374   3                              wrser(getc());
 375   3      
 376   3                              IncAddrAuto();
 377   3      
 378   3                              writeFLASHdelay();
 379   3                              putc(0x0d);
 380   3                              break;
 381   3      
 382   3                      case 'c':       //Write program memory, low byte
 383   3                              wrser(0x40);
 384   3                              wrser(Addr_H);
 385   3                              wrser(Addr_L);
 386   3                              wrser(getc());
 387   3      
 388   3                              writeFLASHdelay();
 389   3                              putc(0x0d);
 390   3                              break;
 391   3      
 392   3                      case 'R'://Read program memory
 393   3                              wrser(0x28);
 394   3                              wrser(Addr_H);
 395   3                              wrser(Addr_L);
 396   3                              putc( wrser ( 0 ) );
 397   3      
 398   3                              wrser(0x20);
 399   3                              wrser(Addr_H);
 400   3                              wrser(Addr_L);
 401   3                              putc( wrser( 0 ) );
 402   3      
 403   3                              IncAddrAuto();
 404   3                              break;
 405   3      
 406   3                      case 'A':
 407   3                              Addr_H = getc();
 408   3                              Addr_L = getc();
 409   3                              putc( 0x0d );
 410   3                              break;
 411   3      
 412   3                      case 'D':               //Write data memory
 413   3                              wrser(0xC0);
 414   3                              wrser(Addr_H);
 415   3                              wrser(Addr_L);
 416   3                              wrser(getc() );
 417   3                              Delay(250);
 418   3                              IncAddrAuto();
 419   3                              putc(0x0d);
 420   3                              break;
 421   3      
 422   3                      case 'd':       //Read data memory
 423   3                              wrser(0xA0);
 424   3                              wrser(Addr_H);
 425   3                              wrser(Addr_L);
 426   3                              putc( wrser( 0 ) );
C51 COMPILER V8.08   MAIN                                                                  12/09/2007 20:15:04 PAGE 8   

 427   3                              IncAddrAuto();
 428   3                              break;
 429   3      
 430   3                      case 'L':               //Leave programming mode
 431   3      
 432   3                              MOSI = 1;
 433   3                              MISO = 1;
 434   3                              SCK  = 1;
 435   3                              LED_RED1 = 1;
 436   3                              putc(0x0d);
 437   3                              RESET = 1;
 438   3                              break;
 439   3      
 440   3                      case 'e':               //Chip erase
 441   3                              wrser(0xAC);
 442   3                              wrser(0x80);
 443   3                              wrser(0x04);
 444   3                              wrser(0x00);
 445   3                              Delay(10);
 446   3                              putc(0x0d);
 447   3      
 448   3                              break;
 449   3      
 450   3                      case 'l':               //Write lock bits
 451   3                              wrser(0xAC);
 452   3                              wrser( (getc() & 0x6) | 0xe0 );
 453   3                              wrser(0x00);
 454   3                              wrser(0x00);
 455   3                              Delay(10);
 456   3                              putc(0x0d);
 457   3                              break;
 458   3      
 459   3                      case 's':               //Read signature bytes
 460   3                              putc (w17call(2) );
 461   3                              putc (w17call(1) );
 462   3                              putc (w17call(0) );
 463   3                              break;
 464   3      
 465   3                      case 'm':               //Write Program Memory Page
 466   3                              wrser(0x4c);
 467   3                              wrser(Addr_H);
 468   3                              wrser(Addr_L);
 469   3                              wrser(0);
 470   3      
 471   3                              Delay(10);
 472   3                              putc(0x0d);
 473   3                              break;
 474   3      
 475   3                      case ':':               //Universal Command
 476   3                              wrser(getc());
 477   3                              wrser(getc());
 478   3                              wrser(getc());
 479   3                              putc( wrser(0));
 480   3                              Delay(10);
 481   3                              putc(0x0d);
 482   3                              break;
 483   3      
 484   3                      case '.':               //New Universal Command
 485   3                              wrser( getc() );
 486   3                              wrser( getc() );
 487   3                              wrser( getc() );
 488   3                              putc(wrser ( getc() ) );
C51 COMPILER V8.08   MAIN                                                                  12/09/2007 20:15:04 PAGE 9   

 489   3                              Delay( 10 );
 490   3                              putc( 0x0d );
 491   3                              break;
 492   3      
 493   3                      default:
 494   3                              putc('?');
 495   3                      }
 496   2              }       
 497   1      }
 498          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    855    ----
   CONSTANT SIZE    =    184    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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