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

📄 system.lst

📁 cs8900 c51应用
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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)

⌨️ 快捷键说明

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