📄 main.lst
字号:
284 4
285 4 }
286 3
287 3 }
288 2 if(ErrNum)
289 2 {
290 3 SerBuffer[3] = ErrNum ;
291 3 TransHexAsi(&SerBuffer[3],SendBuffer,1);
292 3 SendDataToPc(SendBuffer,2);
293 3 }
294 2 }
295 1
296 1 }
297
298 /****************************************************************************
299 * *
300 * Function: init *
301 * *
302 * Input: - *
303 * Output: - *
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 6
304 * *
305 * Description: *
306 * *
307 * *
308 ****************************************************************************/
309
310 void init (void)
311 {
312 1
313 1 AuthOk = 0xff;
314 1
315 1 AccOk = FALSE;
316 1 //EnOnChipSram(); // Enable w77e58 on chip 1k sram
317 1
318 1
319 1 #ifdef w77e58
DME0 = TRUE;
PMR = 0x41;
#endif
323 1
324 1 #ifdef sst89e554
325 1 AUXR = 0;
326 1 WDTD = 0x0a0; // 3s
327 1 WDTC = 0x1a;//00011010b;
328 1 #endif
329 1
330 1 LED = ON;
331 1 BEEP = BeepOn;
332 1 BEEP = BeepOff;
333 1 RC500RST = FALSE;
334 1 RC500_CS = TRUE; // Enable the CS for RC500
335 1
336 1 CmdReceived = FALSE;
337 1 CmdValid = FALSE;
338 1 Quit = FALSE;
339 1 LLfReady = TRUE;
340 1 SendReady = TRUE;
341 1 Idle = TRUE;
342 1
343 1 RepCnt = 0;
344 1
345 1 P1_6 = 0;
346 1
347 1 RecvState = RECV_STX;
348 1
349 1 EnableTransferCmd = FALSE;
350 1
351 1 CheckByteCnt = BCC_CHECKBYTECNT;
352 1
353 1 #ifdef AUTODELAY
354 1 DelayRate = 0;
355 1 DelayRateLocked = TRUE;
356 1 #endif
357 1
358 1 FrameEnd = 0;
359 1 FrameHead = 0;
360 1 FrameOk = 0;
361 1 DataNum = 0;
362 1 ChkSum = 0;
363 1
364 1 PCON = 0x00; // SMOD = 1;
365 1 SCON = 0x50; // Mode 1, 8-bit UART, enable receiption
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 7
366 1
367 1 // EIE = 0x0 ;
368 1 // AutoBaud = TRUE;
369 1 TMOD = 0x20; // Timer 1, mode 2, 8-bit auto reload,
370 1 // Timer 0, mode 0, 13-bit counter
371 1 Capt_L = 0;
372 1 Capt_H = 0;
373 1
374 1 //PCON = 0X80;
375 1 TH1 = 0xfd ;
376 1 TL1 = 0xfd ;
377 1
378 1 //TH1 = 0xf4 ;
379 1 //TL1 = 0xf4 ;
380 1 PS = 1;
381 1 ES = 1 ;
382 1
383 1 TR1 = 1;
384 1
385 1
386 1 // LED = OFF;
387 1
388 1 //PX1 = 1;
389 1
390 1 IT1 = 1; // Config ext1 as edge trigger for RC500
391 1 EX1 = 1; // Enable ext1 interrupt for RC500
392 1 RC500RST = TRUE;
393 1 EIE = 0x0;
394 1 EA = TRUE; // Enable all interrupts
395 1 OpenIO();
396 1 }
397
398
399 /****************************************************************************
400 * *
401 * Function: cmd_execution *
402 * *
403 * Input: SerBuffer[] *
404 * Output: SerBuffer[] *
405 * *
406 * Description: *
407 * *
408 * *
409 ****************************************************************************/
410
411 void cmd_execution (void)
412 {
413 1 uchar xdata Status;
414 1 uchar xdata len;
415 1 uchar xdata cmd;
416 1 uchar xdata adr;
417 1 uchar xdata tmp[16];
418 1 //uchar xdata snr[4];
419 1 uchar xdata size;
420 1 uchar xdata tt[2];
421 1 static uchar xdata mode,value[4],addr;
422 1 Temp = SerBuffer;
423 1
424 1 cmd = SerBuffer[COMMAND]; //COMMAND == 1
425 1
426 1 switch (cmd)
427 1 {
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 8
428 2 case 0x40: //PICC_REQALL
429 2
430 2 Status = M500PiccRequest(PICC_REQALL, tt); //Get Picc tt[]: Tagtype 2 Byte
431 2 ErrNum = Status;
432 2 if (Status != MI_OK)
433 2 {
434 3 AccOk = 0;
435 3
436 3 }
437 2 else
438 2 {
439 3 // RingOn();
440 3 AccOk = 1;
441 3 }
442 2 ErrNum = Status;
443 2 break;
444 2
445 2
446 2
447 2 case 0x41: // Request
448 2
449 2 if(SerBuffer[MODE]&0X01) SerBuffer[MODE]=PICC_REQALL; // ALL
450 2 else SerBuffer[MODE]=PICC_REQSTD; // IDLE
451 2
452 2 Status = M500PiccRequest(SerBuffer[MODE], &SerBuffer[TAGTYPE]);
453 2
454 2 if (Status == MI_OK)
455 2 {
456 3 SerBuffer[LENGTH] = 2;
457 3 }
458 2 ErrNum = Status;
459 2 break;
460 2
461 2
462 2 case 0x42: // Anticoll
463 2
464 2 Status = M500PiccAnticoll(SerBuffer[BCNT], &SerBuffer[SERNR]);
465 2
466 2 if (Status == MI_OK)
467 2 {
468 3 SerBuffer[LENGTH] = 4;
469 3 // RingOn();
470 3 AccOk = 1;
471 3 }
472 2 ErrNum = Status;
473 2 break;
474 2
475 2
476 2 case 0x43: // Select
477 2
478 2 memcpy(card_snr,&SerBuffer[SERNR],4); // store serial number in globle var
479 2
480 2 //输入: 卡片序列号 输出:卡片容量 SIZE = 0X88H
481 2 Status = M500PiccSelect(&SerBuffer[SERNR], &SerBuffer[SIZE]);
482 2 if (Status == MI_OK)
483 2 {
484 3 SerBuffer[LENGTH] = 1;
485 3 }
486 2
487 2 // RingOn();
488 2
489 2 AccOk = 1;
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 9
490 2 ErrNum = Status;
491 2
492 2 break;
493 2
494 2
495 2 case 0x44: // Authentication
496 2
497 2 if(SerBuffer[MODE]&0X04) SerBuffer[MODE]=PICC_AUTHENT1B; // keyB
498 2 else SerBuffer[MODE]=PICC_AUTHENT1A; // keyA =0x60 MODE =3 key_sector = SerBuffer[4] block = 9 SerBuf
-fer[SECNR]+1)*4-1 SECNR= 4
499 2
500 2 Status = M500PiccAuth(SerBuffer[MODE], card_snr, SerBuffer[SECNR], (SerBuffer[SECNR]+1)*4-1);
501 2
502 2 //Status = M500PiccAuthE2(SerBuffer[MODE], card_snr, SerBuffer[SECNR], (SerBuffer[SECNR]+1)*4-1);
503 2
504 2 AuthOk = Status;
505 2 ErrNum = Status;
506 2
507 2 break;
508 2
509 2
510 2 case 0x45: // Halt
511 2
512 2 Status = M500PiccHalt();
513 2 break;
514 2
515 2
516 2 case 0x46: // Read
517 2
518 2 Status = M500PiccRead(SerBuffer[ADR], &SerBuffer[ADR]);//ADR = 3
519 2 if (Status == MI_OK)
520 2 {
521 3 SerBuffer[LENGTH] = 16;
522 3 }
523 2 ErrNum = Status;
524 2 break;
525 2
526 2
527 2 case 0x47: // Write
528 2
529 2 Status = M500PiccWrite(SerBuffer[ADR], &SerBuffer[DATABYTES]);
530 2 ErrNum = Status;
531 2 break;
532 2
533 2
534 2 case 0x48: // Increment
535 2
536 2 mode = PICC_INCREMENT;
537 2 addr = SerBuffer[ADR];
538 2 memcpy(value,&SerBuffer[VALUE],4);
539 2 Status = MI_OK;
540 2 break;
541 2
542 2
543 2 case 0x49: // Decrement
544 2
545 2 mode = PICC_DECREMENT;
546 2 addr = SerBuffer[ADR];
547 2 memcpy(value,&SerBuffer[VALUE],4);
548 2 Status = MI_OK;
549 2 break;
550 2
C51 COMPILER V7.06 MAIN 02/25/2005 08:31:59 PAGE 10
551 2
552 2 case 0x4A: // Restore
553 2
554 2 mode = PICC_RESTORE;
555 2 addr = SerBuffer[ADR];
556 2 memset(value,0,4);
557 2 Status = MI_OK;
558 2 break;
559 2
560 2
561 2 case 0x4B: // Transfer
562 2
563 2 if (EnableTransferCmd)
564 2 {
565 3 Status = M500PiccValue(mode, addr, value, SerBuffer[ADR]);
566 3 }
567 2 else
568 2 {
569 3 Status = MI_CODEERR;
570 3 }
571 2 break;
572 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -