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 + -
显示快捷键?