?? system.lst
字號(hào):
288
289
290 /* HexToAscii - Take one byte and return its two ASCII */
291 /* values for both nibbles */
292
293 UINT16 hextoascii (UINT8 c)
294 {
295 UINT8 ch = c;
C51 COMPILER V7.06 SYSTEM 11/26/2004 11:32:44 PAGE 6
296 UINT8 as1;
297 UINT8 as2;
298
299 /* take the char and turn it to ASCII */
300
301 as1 = ch;
302 as1 >>= 4;
303 as1 &= 0x0F;
304 if ( as1<10 )
305 as1 += 48;
306 else
307 as1 += 55;
308
309 as2 = ch;
310 as2 &= 0x0F;
311 if ( as2<10 )
312 as2 += 48;
313 else
314 as2 += 55;
315
316 return( ((UINT16)(as1)<<8) + as2 );
317
318
319 }
320
321
322 /* Convert ASCII character to numerical */
323 /* e.g. '1' -> 0x01, 'A' ->0x0A */
324
325 UINT8 asciitohex (UINT8 ch)
326 {
327 if( (ch < 58) && (ch > 47) )
328 return(ch - 48);
329
330 if( (ch < 71 ) && (ch > 64) )
331 return(ch - 55);
332 }
333
334
335 void ltoa (UINT32 nmbr, UINT8 *ch )
336 {
337 /* Transforms value of long word to ASCII string */
338 /* Makes it iterative */
339
340 UINT16 multiple;
341 UINT32 decade,comp;
342 UINT8 i,found;
343
344 /* Init String */
345
346 for( i=0; i<10;i++ )
347 *ch++ = '0';
348
349 ch -= 10;
350
351 /* See if Zero */
352
353 if(nmbr == 0) {
354 *ch++ = '0';
355 *ch = '\0';
356 }
357
C51 COMPILER V7.06 SYSTEM 11/26/2004 11:32:44 PAGE 7
358
359 decade = 1000000000;
360
361 found = FALSE;
362
363 for( i=0; i<10; i++) {
364
365 if(i != 0)
366 decade /= 10;
367
368 for( multiple=9; multiple>0; multiple--) {
369 if( (i==0) && (multiple > 2) )
370 continue;
371
372 comp = decade * multiple;
373
374 if(nmbr >= comp) {
375 *ch = hextoascii(multiple);
376 nmbr -= comp;
377 found = TRUE;
378
379 break; /* Still processing */
380 }
381 }
382
383 if( found == TRUE)
384 ch++;
385
386 }
387
388 *ch = '\0'; /* EOL */
389
390 }
391
392
393
394
395 void itoa (UINT16 nmbr, UINT8* ch )
396 {
397 /* Transforms value of word to ASCII string */
398 /* Makes it iterative */
399
400 UINT16 decade, multiple;
401 UINT32 comp;
402 UINT8 i,found;
403
404 /* Init String */
405
406
407 for( i=0; i<5;i++)
408 *ch++ = '0';
409
410 ch -= 5;
411
412 /* See if Zero */
413
414 if(nmbr == 0) {
415 *ch++ = '0';
416 *ch = '\0';
417 }
418
419 decade = 10000;
C51 COMPILER V7.06 SYSTEM 11/26/2004 11:32:44 PAGE 8
420
421 found = FALSE;
422
423 for( i=0; i<5; i++) {
424
425
426 if(i != 0)
427 decade /= 10;
428
429 for( multiple=9; multiple>0; multiple--) {
430 if( (i==0) && (multiple > 6) )
431 continue;
432
433 comp = decade * multiple;
434
435 if(nmbr >= comp) {
436 *ch = hextoascii(multiple);
437 nmbr -= comp;
438 found = TRUE;
439
440 break; /* Still processing */
441 }
442 }
443
444 if( found == TRUE)
445 ch++;
446
447 }
448
449 *ch = '\0'; /* EOL */
450
451 }
452
453
454 /* Convert given buffer containing ASCII numbers */
455 /* to numerical positive INT16 value (max. 32767) */
456
457 INT16 atoi (UINT8 *buf, UINT8 buflen)
458 {
459 INT16 oval = 0;
460 UINT8 nval = 0;
461
462 while(buflen--) {
463
464 if(*buf == '\0')
465 break;
466
467 if( isnumeric(*buf) == 0 )
468 return(-1);
469
470 nval = asciitohex(*buf++);
471
472 oval = oval * 10;
473 oval += nval;
474
475 /* Overflow? */
476
477 if(oval < nval)
478 return(-1);
479
480 }
481
C51 COMPILER V7.06 SYSTEM 11/26/2004 11:32:44 PAGE 9
482 return(oval);
483
484 }
485
486
487 /* Debug/String output */
488
489 void mputs (UINT8* msg)
490 {
491 #ifndef MONITOR
while( *msg !='\0') {
sendchar(*msg);
msg++;
}
#endif
497 }
498
499 /* Debug/Hex output a number*/
500 void mputhex(UINT8 nbr) {
501
502 UINT16 i;
503 #ifndef MONITOR
i=hextoascii(nbr);
sendchar((UINT8)(i>>8));
sendchar((UINT8)i);
#endif
508 }
509
510 /* Watchdog refresh */
511
512 void kick_WD (void) {
513 // WDTC_WTE=0;
514 /* S.A. 8052 have another SFR */
515 }
516
517 /* Wait for unaccurate use */
518
519 void wait (INT16 i)
520 {
521 for(;i;i--) kick_WD();
522 }
523
524
525 /* Return "Random" Number */
526
527 UINT32 random (void)
528 {
529 /* TODO: Return REAL random number */
530 return(0x345A2890);
531 }
532
533 /* Do nothing */
534
535 void dummy (void)
536 {
537 /* That's it */
538 }
539
540 /* Power saving mode */
541
542 void enter_power_save (void)
543 {
C51 COMPILER V7.06 SYSTEM 11/26/2004 11:32:44 PAGE 10
544 /* Are we on sleep mode already? */
545
546 if (sleep_mode)
547 return;
548
549 sleep_mode = 1;
550
551 /* Shut down the RS transmitter chip */
552 /* S.A. 8052 have another SFRs */
553 /// PDR8_P82 = 0;
554
555 /* Set the CPU to intermitted operation mode */
556
557 /// LPMCR = 0x1E;
558
559 return;
560 }
561
562
563
564 void exit_power_save (void)
565 {
566 UINT8 i;
567
568 if (sleep_mode) {
569 /* Release RS transmitter chip */
570 /* S.A. 8052 have another SFR */
571 /// PDR8_P82 = 1;
572
573 /* Set CPU to normal mode */
574
575 /// LPMCR = 0x18;
576
577 /* Wait for a while */
578
579 for( i=0; i<128; i++)
580 sleep_mode = 0;
581
582 }
583
584 }
585
586
C51 COMPILATION COMPLETE. 5 WARNING(S), 1 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -