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

📄 main.lst

📁 读ISO14443 CPU卡源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 528   1           TI = 0;
 529   1           ES = 1;
 530   1      }
 531          
 532          /////////////////////////////////////////////////////////////////////
 533          //正确执行完上位机指令,应答(有返回数据)
 534          //input:answerdata = 应答数据
 535          //       answernum  = 数据长度
 536          /////////////////////////////////////////////////////////////////////
 537          void AnswerOk(unsigned char *answerdata, unsigned int answernum)
 538          {    
 539   1           unsigned char chkdata;
 540   1           unsigned int i;
 541   1           
 542   1           TI   = 0;                         //发送命令头          
 543   1           SBUF = 0xAA;
 544   1           while (!TI);           
 545   1           TI   = 0;
 546   1           SBUF = 0xBB;
 547   1           while (!TI);
 548   1           
 549   1           TI   = 0;                         //长度字,包括状态字和效验字
 550   1           chkdata = (((unsigned char)((answernum + 6) & 0xFF)));
 551   1           SBUF = chkdata;
C51 COMPILER V8.05a   MAIN                                                                 07/05/2010 23:34:44 PAGE 10  

 552   1           while (!TI);           
 553   1           TI   = 0;
 554   1           chkdata = (((unsigned char)(((answernum + 6)>>8) & 0xFF)));
 555   1           SBUF = chkdata;
 556   1           while (!TI);           
 557   1           
 558   1           TI   = 0;                         //发送设备标识
 559   1           SBUF = g_cIcdevH;
 560   1           while(!TI);
 561   1           if (g_cIcdevH == 0xAA)
 562   1           {
 563   2              TI   = 0;
 564   2              SBUF = 0;
 565   2              while (!TI);
 566   2           }
 567   1           TI   = 0;
 568   1           SBUF = g_cIcdevL;
 569   1           while(!TI);
 570   1           if (g_cIcdevL == 0xAA)
 571   1           {
 572   2              TI   = 0;
 573   2              SBUF = 0;
 574   2              while (!TI);
 575   2           }
 576   1           
 577   1           TI   = 0;                         //发送命令码 
 578   1           i = (unsigned char)(g_cCommand & 0xFF);
 579   1               SBUF = i;
 580   1               chkdata ^= i;
 581   1           while (!TI);
 582   1      
 583   1               TI   = 0;                         //发送命令码 
 584   1           i = (unsigned char)((g_cCommand >>8) & 0xFF);
 585   1               SBUF = i;
 586   1               chkdata ^= i;
 587   1           while (!TI);
 588   1           
 589   1           TI   = 0;                         //状态字
 590   1           SBUF = 0;
 591   1           while (!TI);           
 592   1           
 593   1           chkdata ^= g_cIcdevH ^ g_cIcdevL;
 594   1           for (i=0; i<answernum; i++)
 595   1           {    
 596   2                TI   = 0;
 597   2                chkdata ^= *(answerdata+i);
 598   2                SBUF = *(answerdata+i);                
 599   2                while (!TI);
 600   2                if (*(answerdata + i) == 0xAA)
 601   2                {
 602   3                    TI   = 0;
 603   3                    SBUF = 0;
 604   3                    while (!TI);
 605   3                }
 606   2           }
 607   1           
 608   1           TI   = 0;                         //效验字
 609   1           SBUF = chkdata;
 610   1           while(!TI);           
 611   1           
 612   1           if (chkdata == 0xAA)
 613   1           {
C51 COMPILER V8.05a   MAIN                                                                 07/05/2010 23:34:44 PAGE 11  

 614   2               TI=0;
 615   2               SBUF=0;
 616   2               while (!TI);
 617   2           }
 618   1           
 619   1           TI = 0;
 620   1           ES = 1;
 621   1      }
 622          
 623          /////////////////////////////////////////////////////////////////////
 624          //未能正确执行上位机指令,应答
 625          //input:faultcode = 错误代码
 626          /////////////////////////////////////////////////////////////////////
 627          void AnswerErr(char faultcode)
 628          {    
 629   1           unsigned char i,chkdata;
 630   1           chkdata = 0;
 631   1      
 632   1           TI   = 0;                         //发送命令头          
 633   1           SBUF = 0xAA;
 634   1           while (!TI);           
 635   1           TI   = 0;
 636   1           SBUF = 0xBB;
 637   1           while (!TI);
 638   1           
 639   1           TI   = 0;                         //发送长度字
 640   1           SBUF = 0x06;
 641   1           while (!TI);           
 642   1           TI   = 0;
 643   1           SBUF = 0x00; 
 644   1           while (!TI);           
 645   1                
 646   1           TI   = 0;                         //发送设备标识
 647   1           SBUF = g_cIcdevH;
 648   1           while (!TI);
 649   1           if (g_cIcdevH == 0xAA)
 650   1           {
 651   2              TI   = 0;
 652   2              SBUF = 0;
 653   2              while (!TI);
 654   2           }
 655   1           TI   = 0; 
 656   1           SBUF = g_cIcdevL; 
 657   1           while (!TI);
 658   1           if (g_cIcdevL == 0xAA)
 659   1           {
 660   2              TI   = 0;
 661   2              SBUF = 0;
 662   2              while (!TI);
 663   2           }
 664   1           
 665   1           TI   = 0;                         //发送命令码                     
 666   1           i = (unsigned char)(g_cCommand & 0xFF);
 667   1               SBUF = i;
 668   1               chkdata ^= i;
 669   1           while (!TI);
 670   1      
 671   1               TI   = 0;                         //发送命令码 
 672   1           i = (unsigned char)((g_cCommand >>8) & 0xFF);
 673   1               SBUF = i;
 674   1               chkdata ^= i;
 675   1           while (!TI);
C51 COMPILER V8.05a   MAIN                                                                 07/05/2010 23:34:44 PAGE 12  

 676   1      
 677   1           TI   = 0;                         //发送错误代码
 678   1           SBUF = faultcode;
 679   1           while (!TI);              
 680   1           
 681   1           chkdata = g_cIcdevH ^ g_cIcdevL ^ faultcode;
 682   1           TI   = 0;                         //效验字
 683   1           SBUF = chkdata;
 684   1           while (!TI);
 685   1           
 686   1           TI   = 0;
 687   1           ES   = 1;
 688   1      }
 689          
 690          /////////////////////////////////////////////////////////////////////
 691          //串行中断,接收上位机数据
 692          /////////////////////////////////////////////////////////////////////
 693          seri_int () interrupt 4 using 1
 694          {
 695   1         unsigned int i,j;
 696   1         unsigned char rece_data = SBUF;
 697   1         unsigned char verify = 0;
 698   1         if (RI)
 699   1         {    
 700   2             RI = 0;
 701   2                 if (g_bReceAA)
 702   2                 {  
 703   3                     g_bReceAA = 0;
 704   3                     switch (rece_data)
 705   3                     {    
 706   4                         case 0x00:
 707   4                            break;
 708   4                         case 0xBB:
 709   4                            g_cReceNum = 0;
 710   4                            break;
 711   4                         default:
 712   4                            i = g_cReceNum;
 713   4                            g_cReceBuf[i] = rece_data;
 714   4                            break;
 715   4                     }
 716   3                 }
 717   2                 else
 718   2                 {    
 719   3                     switch (rece_data)
 720   3                     {    
 721   4                         case 0xAA:
 722   4                            g_bReceAA = 1;
 723   4                         default:
 724   4                            i = g_cReceNum++;
 725   4                            g_cReceBuf[i] = rece_data;
 726   4                            break;
 727   4                     }
 728   3                 }
 729   2                 i = (((unsigned int)(g_cReceBuf[1]<<8)) + (unsigned int)(g_cReceBuf[0]));
 730   2                 if ((g_cReceNum == i + 2) && ( i != 0 )) 
 731   2             {   
 732   3                  for (j=1; j<g_cReceNum; j++)
 733   3                  {   verify ^= g_cReceBuf[j];    }
 734   3                  if (!verify)
 735   3                      {   
 736   4                          g_bReceOk  = 1;
 737   4                          g_cCommand = (((unsigned int)(g_cReceBuf[5]<<8)) + (unsigned int)(g_cReceBuf[4]));
C51 COMPILER V8.05a   MAIN                                                                 07/05/2010 23:34:44 PAGE 13  

 738   4                          g_bReceAA  = 0;
 739   4                          ES = 0;
 740   4                      }
 741   3              }
 742   2      
 743   2              if (g_cReceNum >= sizeof(g_cReceBuf))
 744   2              {   g_cReceNum=0;   }
 745   2          }
 746   1          if (TI)
 747   1          {   TI = 0;   }
 748   1      }
 749          
 750          
 751          /////////////////////////////////////////////////////////////////////
 752          //用T2做延时子程序
 753          /////////////////////////////////////////////////////////////////////
 754          void DelayMs(unsigned int _MS)
 755          {
 756   1          RCAP2LH = RCAP2_1ms;
 757   1          T2LH    = RCAP2_1ms;
 758   1      
 759   1          ET2     = 0;                                           // Disable timer2 interrupt
 760   1          T2CON   = 0x04;                                        // 16-bit auto-reload, clear TF2, start timer
 761   1          TR2     = 1;
 762   1          while (_MS--)
 763   1          {   while (!TF2);TF2 = 0;  }
 764   1          TR2 = 0;
 765   1      }
 766          void Delay_50us(unsigned char _50us)
 767          {
 768   1          RCAP2LH = RCAP2_50us;
 769   1          T2LH    = RCAP2_50us;
 770   1      
 771   1          ET2     = 0;                                           // Disable timer2 interrupt
 772   1          T2CON   = 0x04;                                        // 16-bit auto-reload, clear TF2, start timer
 773   1          while (_50us--)
 774   1          {   while (!TF2);TF2 = 0;  }
 775   1          TR2 = 0;
 776   1      }
 777          
 778          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1982    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12      20
   IDATA SIZE       =     64    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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