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

📄 commtran.lst

📁 此程序为13.56MHz的RFID底层读写卡程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
 253   3                       }
 254   2      
 255   2      	    	 for(i=1;i<3;i++)                            //get mad message*/
 256   2                       {
 257   3                        Status=MF1_read_key(PICC_AUTHENT1A,i,MADMessage+((i-1)<<4),wdtkey);
C51 COMPILER V4.01,  COMMTRAN                                                              19/08/04  14:33:24  PAGE 5   

 258   3                        if(Status!=MI_OK) break;
 259   3                       }
 260   2      
 261   2                       if(Status==MI_OK)
 262   2                       {
 263   3                        Status=MF1_read_key(PICC_AUTHENT1A,3,buf,wdtkey);
 264   3                        if(Status==MI_OK)
 265   3                          {
 266   4                          	GPB=buf[9];
 267   4                          	//"取认证码区地址
 268   4                          	ComBuffer[3]=ComBuffer[5];
 269   4                          	ComBuffer[4]=ComBuffer[6];
 270   4                          	Status=CheckMad3(&sector_n);
 271   4                          	if(Status!=MI_OK) return;
 272   4                              Read_Ram(0x0010,wdtkey,6);
 273   4                              Status=MF1_authkey(PICC_AUTHENT1A,wdtkey,60);    //2003.1.15
 274   4                          	if(Status==MI_OK)
 275   4                          	{
 276   5                          	   block_n=(sector_n<<2);
 277   5                          	   for(i=0;i<3;i++)
 278   5                          	   {
 279   6                          	    Status=MF1_read_key(PICC_AUTHENT1A,block_n+i,Auth_code+(i<<4),wdtkey);
 280   6                          	    if(Status!=MI_OK) break;
 281   6                          	   }
 282   5                          	}
 283   4                          }
 284   3                       }
 285   2                       if(Status==MI_OK) SendResponse(0x01,6,snr);
 286   2                       else SendResponse(0x80,6,snr);
 287   2      
 288   2                       break;
 289   2      
 290   2                 case 0x38:                                 /* close card */
 291   2      	         Status=Mf500PiccHalt();
 292   2      	         if(Status==MI_OK)
 293   2      	         {
 294   3      	            SendResponse(0x01,1,buf);
 295   3      	         }
 296   2      	         else
 297   2      	         {
 298   3      	            SendResponse(0x80,1,buf);
 299   3      	         }
 300   2      
 301   2      	         break;
 302   2      
 303   2                 case 0xc1:                                /* change baudrate */
 304   2      	         SendResponse(0x01,1,buf);
 305   2      	         SetBaud(ComBuffer[3]);
 306   2                       break;
 307   2      
 308   2                 case 0x32:                                /* read block */
 309   2      
 310   2      	         sector_n=ComBuffer[4]>>2;           /* sector no. */
 311   2      	         block_n=ComBuffer[4];               /* block no. */
 312   2      	         if(ComBuffer[3]==0x01)
 313   2      	         {
 314   3      	           key_type=PICC_AUTHENT1B;
 315   3      	          }
 316   2                       else key_type=PICC_AUTHENT1A;
 317   2      	         Status=MF1_auth(key_type,sector_n,block_n);
 318   2      	         if(Status==MI_OPEN_ERROR)
 319   2      	         {
 320   3      	            SendResponse(0x00,1,buf);
 321   3      	            return;
 322   3      	         }
 323   2      	         if(Status==MI_AUTH_ERROR)
C51 COMPILER V4.01,  COMMTRAN                                                              19/08/04  14:33:24  PAGE 6   

 324   2      	         {
 325   3      	            SendResponse(0x81,1,buf);
 326   3      	            return;
 327   3      	         }
 328   2      
 329   2      	         Status=MF1_read(key_type,block_n,buf);
 330   2      
 331   2                       if(Status==MI_OK)
 332   2      	         {
 333   3      	             SendResponse(0x01,17,buf);
 334   3      	         }
 335   2      	         else
 336   2      	         {
 337   3      	             SendResponse(0x80,1,buf);
 338   3                       }
 339   2      
 340   2      	         break;
 341   2      
 342   2                 case 0x33:                                // write block
 343   2                       sector_n=ComBuffer[4]>>2;           // sector no.
 344   2      	         block_n=ComBuffer[4];               // block no.
 345   2      
 346   2      	         if(ComBuffer[3]==0x01)
 347   2      	         {
 348   3      	           key_type=PICC_AUTHENT1B;
 349   3      	          }
 350   2                       else key_type=PICC_AUTHENT1A;
 351   2      
 352   2      	         Status=MF1_auth(key_type,sector_n,block_n);
 353   2      
 354   2      	         if(Status==MI_OPEN_ERROR)
 355   2      	         {
 356   3      	            SendResponse(0x00,1,buf);
 357   3      	            return;
 358   3      	         }
 359   2      	         if(Status==MI_AUTH_ERROR)
 360   2      	         {
 361   3      	            SendResponse(0x81,1,buf);
 362   3      	            return;
 363   3      	         }
 364   2      
 365   2      	         Status=MF1_write(key_type,block_n,ComBuffer+5);
 366   2      
 367   2      	         if(Status==MI_OK)
 368   2      	         {
 369   3      	             SendResponse(0x01,1,buf);
 370   3      	         }
 371   2      	         else
 372   2      	         {
 373   3      	             SendResponse(0x80,1,buf);
 374   3                       }
 375   2                       break;
 376   2      
 377   2              case 0x41:                          /*open more cards*/
 378   2      	         for(i=0;i<10;i++)
 379   2      	         {
 380   3      	           Status=Mf500PiccRequest(PICC_REQIDL,buf);
 381   3      	           if(Status==MI_OK) break;
 382   3      	         }
 383   2      	         if(Status!=MI_OK)
 384   2      	         {
 385   3      	            SendResponse(0x00,1,buf);
 386   3      	            return;
 387   3      	         }
 388   2      	         Status=Mf500PiccAnticoll (0,snr);
 389   2                       if(Status==MI_OK)
C51 COMPILER V4.01,  COMMTRAN                                                              19/08/04  14:33:24  PAGE 7   

 390   2                       {
 391   3                          Status=Mf500PiccSelect(snr,buf);
 392   3                          if(Status==MI_OK)
 393   3                          {
 394   4                            SendResponse(0x01,5,snr);
 395   4                            return;
 396   4                          }
 397   3                       }
 398   2                       SendResponse(0x80,1,buf);
 399   2                       break;
 400   2      
 401   2                case 0x42:                                /*read m_block*/
 402   2      
 403   2                       sector_n=ComBuffer[4]>>2;          /* sector no. */
 404   2      	         block_n=ComBuffer[4];              /* block no. */
 405   2      	         if(ComBuffer[3]==0x01)
 406   2      	         {
 407   3      	            key_type=PICC_AUTHENT1B;
 408   3      	         }
 409   2                       key_type=PICC_AUTHENT1A;
 410   2      	         Status=Mf500PiccAuth(key_type,sector_n,block_n);
 411   2      	         if(Status==MI_OK)
 412   2      	         {
 413   3      	            Status=Mf500PiccRead(block_n,buf);
 414   3      	            if(Status==MI_OK)
 415   3      	            {
 416   4      	               SendResponse(0x01,17,buf);
 417   4      	            }
 418   3      	            else
 419   3      	            {
 420   4      	               SendResponse(0x80,1,buf);
 421   4      	            }
 422   3      	         }
 423   2      	         else
 424   2      	         {
 425   3      	            SendResponse(0x81,1,buf);
 426   3                       }
 427   2      
 428   2      	         break;
 429   2      
 430   2      	  case 0x43:                                /*write m_block*/
 431   2      
 432   2      	         sector_n=ComBuffer[4]>>2;          /* sector no. */
 433   2      	         block_n=ComBuffer[4];              /* block no. */
 434   2      
 435   2      	         if(ComBuffer[3]==0x01)
 436   2      	         {
 437   3      	            key_type=PICC_AUTHENT1B;
 438   3      	         }
 439   2                       key_type=PICC_AUTHENT1A;
 440   2      	         Status=Mf500PiccAuth(key_type,sector_n,block_n);
 441   2      	         if(Status==MI_OK)
 442   2      	         {
 443   3      	            Status=Mf500PiccWrite(block_n,ComBuffer+5);
 444   3      	            if(Status==MI_OK)
 445   3      	            {
 446   4      	               SendResponse(0x01,1,buf);
 447   4      	            }
 448   3      	            else
 449   3      	            {
 450   4      	               SendResponse(0x80,1,buf);
 451   4      	            }
 452   3      	         }
 453   2      	         else
 454   2      	         {
 455   3      	             SendResponse(0x81,1,buf);
C51 COMPILER V4.01,  COMMTRAN                                                              19/08/04  14:33:24  PAGE 8   

 456   3                       }
 457   2      
 458   2      	         break;
 459   2                     case 0x39:	                    /* write file */
 460   2      	          //"格式 60 xx 39 (文件标识2字节)(密钥类型1字节)(起始块号)(偏移地址)(数据长度)(数据)
 461   2      	          //      0   1  2    3 4              5                 6           7           8        9--
 462   2      	          temp[0]=ComBuffer[7];
 463   2                        temp[1]=ComBuffer[8];
 464   2                        block_n=(sector_n<<2);
 465   2                        len_x=(ComBuffer[6]<<4);
 466   2      
 467   2                        if((len_x+temp[0]+temp[1])>48)
 468   2                        {
 469   3                           SendResponse(0x82,1,buf);//"超界错误
 470   3                           return;
 471   3                        }
 472   2      
 473   2                        for(i=0;i<3;i++)         //
 474   2                        {
 475   3                            if(flag1)
 476   3                             {
 477   4                              Status=MF1_read_key(key_type,block_n+i,TempBuffer+(i<<4),key);
 478   4                             }
 479   3                           else Status=MF1_read(key_type,block_n+i,TempBuffer+(i<<4));
 480   3                           if(Status!=MI_OK) break;
 481   3                        }
 482   2                        if(Status==MI_OK)
 483   2                        {
 484   3                          memcpy(TempBuffer+len_x+temp[0],ComBuffer+9,temp[1]);
 485   3                          for(i=0;i<3;i++)     //
 486   3                          {
 487   4                             if(flag1)
 488   4                              {
 489   5                               Status=MF1_write_key(key_type,block_n+i,TempBuffer+(i<<4),key);
 490   5                              }
 491   4                              else Status=MF1_write(key_type,block_n+i,TempBuffer+(i<<4));
 492   4                          	if(Status!=MI_OK) break;
 493   4                          }
 494   3                       }
 495   2                       if(Status==MI_OK) SendResponse(0x01,1,buf);
 496   2                       else SendResponse(0x80,1,buf);
 497   2                       flag1=0;
 498   2                       break;
 499   2      
 500   2      
 501   2      	  case 0x3b:                                 /* read file */
 502   2      	         //"格式 60 xx 3b (文件标识2字节)(密钥类型1字节)(起始块号)(块数量)
 503   2      	         //      0   1  2    3 4                  5             6         7
 504   2      
 505   2                       block_n=(sector_n<<2)+ComBuffer[6];
 506   2      	         temp[0]=ComBuffer[7];
 507   2      
 508   2      	         if((ComBuffer[6]+temp[0])>3)
 509   2      	         {
 510   3      	            SendResponse(0x82,1,buf);
 511   3      	            return;

⌨️ 快捷键说明

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