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

📄 main.lst

📁 学校水POS读卡程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 573   2      
 574   2              case 0x4C:                                      // Load Key
 575   2      
 576   2                if(SerBuffer[MODE]&0X04) SerBuffer[MODE]=PICC_AUTHENT1B; // keyB
 577   2                else SerBuffer[MODE]=PICC_AUTHENT1A; // keyA
 578   2      // _____________________________________________________________________________
 579   2      //
 580   2      //  FUNCTION: M500PcdLoadKeyE2
 581   2      //        IN: key_type      PICC_AUTHENT1A or PICC_AUTHENT1B
 582   2      //            sector        key sector number, on which the key should be stored
 583   2      //                          values from 0 to 15 are valid
 584   2      //            uncoded_keys  6 bytes key
 585   2      //       OUT: -
 586   2      //    RETURN:
 587   2      //   COMMENT: This function stores the keys in the reader internal E2PROM.
 588   2      //            These keys are available for the function M500PiccAuthE2.
 589   2      // ______________________________________________________________________________
 590   2      //
 591   2                Status = M500PcdLoadKeyE2(SerBuffer[MODE], SerBuffer[SECNR], &SerBuffer[13]);
 592   2            ErrNum = Status;
 593   2                break;
 594   2      
 595   2      
 596   2              case 0x4D:                                      // comm check char
 597   2      
 598   2                if (SerBuffer[MODE] == SER_BCC)
 599   2                {
 600   3                      CheckByteCnt = BCC_CHECKBYTECNT;
 601   3                }
 602   2                else
 603   2                {
 604   3                      CheckByteCnt = CRC_CHECKBYTECNT;
 605   3                }
 606   2                Status = MI_OK;
 607   2                break;
 608   2      
 609   2      
 610   2              case 0x4E:                                      // Reset
 611   2      
 612   2                M500PcdRfReset(SerBuffer[TIME]);
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 11  

 613   2                Status = MI_OK;
 614   2                break;
 615   2      
 616   2      
 617   2              case 0x4F:                                      // Get Info
 618   2      
 619   2                if ((len == 0) || (len == 1 && SerBuffer[MODE] == 1))
 620   2                {
 621   3                      for (adr = INFO; adr < INFO_CNT + INFO; adr++)
 622   3                      {
 623   4                        SerBuffer[adr] = SW_Rel[adr-INFO];
 624   4                      }
 625   3                      SerBuffer[adr++] = ' ';
 626   3                      SerBuffer[adr++] = '0';
 627   3                      SerBuffer[adr++] = 'x';
 628   3                      SerBuffer[adr++] = xtoa_h(Snr_RC500[0]);
 629   3                      SerBuffer[adr++] = xtoa_l(Snr_RC500[0]);
 630   3                      SerBuffer[adr++] = xtoa_h(Snr_RC500[1]);
 631   3                      SerBuffer[adr++] = xtoa_l(Snr_RC500[1]);
 632   3                      SerBuffer[adr++] = xtoa_h(Snr_RC500[2]);
 633   3                      SerBuffer[adr++] = xtoa_l(Snr_RC500[2]);
 634   3                      SerBuffer[adr++] = xtoa_h(Snr_RC500[3]);
 635   3                      SerBuffer[adr++] = xtoa_l(Snr_RC500[3]);
 636   3                      SerBuffer[adr++] = '\0';
 637   3      
 638   3                      SerBuffer[LENGTH] = adr - INFO;
 639   3                }
 640   2                else
 641   2                {
 642   3                      if (SerBuffer[MODE] == 2)
 643   3                      {
 644   4                        SerBuffer[INFO]     = (uchar) Capt;
 645   4                        SerBuffer[INFO + 1] = (uchar)(Capt >> 8);
 646   4                        SerBuffer[INFO + 2] = BaudRate;
 647   4                        SerBuffer[INFO + 3] = DelayRate;
 648   4                      }
 649   3                      else
 650   3                      {
 651   4                        SerBuffer[INFO]     = Snr_RC500[0];
 652   4                        SerBuffer[INFO + 1] = Snr_RC500[1];
 653   4                        SerBuffer[INFO + 2] = Snr_RC500[2];
 654   4                        SerBuffer[INFO + 3] = Snr_RC500[3];
 655   4                      }
 656   3                      SerBuffer[LENGTH] = 4;
 657   3                }
 658   2      
 659   2                Status = MI_OK;
 660   2                break;
 661   2      
 662   2      
 663   2              case 0x50:                                      // Set Control Bit
 664   2                if (SerBuffer[INFO]&0x01)
 665   2                   Status = MI_OK;
 666   2                if (SerBuffer[INFO]&0x02)
 667   2                   Status = MI_OK;
 668   2                if (SerBuffer[INFO]&0x04)
 669   2                   Status = MI_OK;
 670   2      
 671   2                Status = MI_OK;
 672   2                break;
 673   2      
 674   2      
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 12  

 675   2              case 0x51:                                      // Clr Control Bit
 676   2      
 677   2                Status = MI_OK;
 678   2                break;
 679   2      
 680   2      
 681   2              case 0x52:                                      // Config
 682   2      
 683   2                Status = M500PcdConfig();
 684   2      
 685   2      #ifdef AUTODELAY
 686   2                DelayRate = 0;
 687   2      #endif
 688   2                break;
 689   2      
 690   2      
 691   2              case 0x53:                                      // Check Write
 692   2      
 693   2                Status = MIS_CHK_FAILED;
 694   2      
 695   2                if (M500PiccRequest(PICC_REQALL, tt) != MI_OK)
 696   2                {
 697   3                      if (M500PiccRequest(PICC_REQALL, tt) != MI_OK)
 698   3                      {
 699   4                        break;
 700   4                      }
 701   3                }
 702   2                if (M500PiccSelect(&SerBuffer[SERNR], &size) != MI_OK)
 703   2                {
 704   3                      if (M500PiccRequest(PICC_REQALL, tt) != MI_OK)
 705   3                      {
 706   4                        break;
 707   4                      }
 708   3                      if (M500PiccSelect(&SerBuffer[SERNR], &size) != MI_OK)
 709   3                      {
 710   4                        break;
 711   4                      }
 712   3                }
 713   2                memcpy(card_snr,&SerBuffer[SERNR],4);
 714   2                if(SerBuffer[AUTHMODE]&0X04) SerBuffer[AUTHMODE]=PICC_AUTHENT1B; // keyB
 715   2                else SerBuffer[AUTHMODE]=PICC_AUTHENT1A; // keyA
 716   2      
 717   2                //if (Status = M500PiccAuth(SerBuffer[AUTHMODE], card_snr,
 718   2                //                        SerBuffer[ADRCHKWR]>>2, SerBuffer[ADRCHKWR]) != MI_OK)
 719   2                if (Status = M500PiccAuthE2(SerBuffer[AUTHMODE], card_snr,
 720   2                                          SerBuffer[ADRCHKWR]>>2, SerBuffer[ADRCHKWR]) != MI_OK)
 721   2                {
 722   3                      break;
 723   3                }
 724   2      
 725   2                if (M500PiccRead(SerBuffer[ADRCHKWR], tmp) != MI_OK)
 726   2                {
 727   3                      break;
 728   3                }
 729   2      
 730   2                if (memcmp(&SerBuffer[DATACHKWR], tmp, 16) != MI_OK)
 731   2                {
 732   3                      Status = MIS_CHK_COMPERR;
 733   3                }
 734   2                else
 735   2                {
 736   3                      Status = MIS_CHK_OK;
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 13  

 737   3                }
 738   2                break;
 739   2      
 740   2      
 741   2              case 0x54:                                      // Set Port
 742   2      
 743   2                P1 |= (SerBuffer[PORTBYTE]&0x0f);  // set the desired port pin
 744   2                P1 &=  (SerBuffer[PORTBYTE]|0xf0); // clear the desired port pin
 745   2                if (SerBuffer[PORTBYTE]&0x10)
 746   2                  LED = LED;
 747   2                else
 748   2                      
 749   2                Status = MI_OK;
 750   2                break;
 751   2      
 752   2      
 753   2              case 0x55:                                      // Get Port
 754   2      
 755   2                SerBuffer[PORTBYTE] = P1&0xf;
 756   2                SerBuffer[LENGTH] = 1;
 757   2                Status = MI_OK;
 758   2                break;
 759   2      
 760   2          case 0x56:                                  // Authentication2
 761   2      
 762   2                if(SerBuffer[MODE]&0X04) SerBuffer[MODE]=PICC_AUTHENT1B; // keyB
 763   2                else SerBuffer[MODE]=PICC_AUTHENT1A; // keyA
 764   2      
 765   2                //Status = M500PiccAuth(SerBuffer[MODE], card_snr,
 766   2                //                    SerBuffer[SECNR], SerBuffer[AUTHADD]);
 767   2                Status = M500PiccAuthE2(SerBuffer[MODE], card_snr,
 768   2                                      SerBuffer[SECNR], SerBuffer[AUTHADD]);
 769   2                break;
 770   2      
 771   2      
 772   2              case 0x57:                              // Decrement+Transfer
 773   2      
 774   2                Status = M500PiccValue(PICC_DECREMENT, SerBuffer[ADR], &SerBuffer[VALUE], SerBuffer[ADR]);
 775   2                break;
 776   2      
 777   2              default:
 778   2      
 779   2                Status = MI_NY_IMPLEMENTED;
 780   2                break;
 781   2      
 782   2      
 783   2        } // end switch (Command)
 784   1      
 785   1        SerBuffer[STATUS] = ~Status+1;
 786   1      
 787   1        if (cmd < 0x48 || cmd > 0x4A)
 788   1        {
 789   2              EnableTransferCmd = FALSE;
 790   2        }
 791   1        else
 792   1        {
 793   2              EnableTransferCmd = TRUE;
 794   2        }
 795   1      }
 796          
 797          
 798          /****************************************************************************
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 14  

 799          *                                                                           *
 800          * Function:     auto_baud                                                   *
 801          *                                                                           *
 802          * Input:        -                                                           *
 803          * Output:       -                                                           *
 804          *                                                                           *
 805          * Description:                                                              *
 806          *                                                                           *
 807          * Mi醫 die Zeitspanne zwischen Start- und Stopbit des ersten empfangenen    *
 808          * Zeichens (STX) und ermittelt daraus die Baudrate.                         *
 809          *                                                                           *
 810          ****************************************************************************/
 811          
 812          void    auto_baud (void)
 813          {
 814   1        //int temp;
 815   1      
 816   1        if (AutoBaud && !RXD) // If autobaud is enable and RXD pin is low
 817   1        {
 818   2              TR0 = TRUE;     // Start timer0
 819   2      
 820   2              do
 821   2              {
 822   3                if (RXD)      // When RXD pin is high
 823   3                {
 824   4                      Capt_L = TL0;
 825   4                      Capt_H = TH0;
 826   4      
 827   4                      do
 828   4                      {
 829   5                        if (!RXD)
 830   5                        {
 831   6                              break;
 832   6                        }
 833   5                      } while (!TF0);
 834   4                }
 835   3              } while (!TF0);
 836   2      
 837   2              TR0 = FALSE;
 838   2              TF0 = FALSE;
 839   2      
 840   2              Capt = ((uint)Capt_H << 5) | ((uint)Capt_L & 0x001F);
 841   2      
 842   2              for (BaudRate = BAUD_CNT; BaudRate >= 0; BaudRate--)
 843   2              {
 844   3                if (Capt >= CmpTable[BaudRate])
 845   3                {
 846   4                      break;
 847   4                }
 848   3              }
 849   2      
 850   2              if (BaudRate < 0 || BaudRate == BAUD_CNT) // Error baud count
 851   2              {
 852   3                TH0    = 0;
 853   3                TL0    = 0;
 854   3                Capt_L = 0;
 855   3                Capt_H = 0;
 856   3                return;
 857   3              }
 858   2      
 859   2              TMOD = 0x21;                    // Timer 0, mode 1, 16-bit counter
 860   2              TH1  = BaudRateTable[BaudRate];
C51 COMPILER V7.06   MAIN                                                                  02/25/2005 08:31:59 PAGE 15  

 861   2              TL1  = TH1;
 862   2              TR1  = TRUE;

⌨️ 快捷键说明

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