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

📄 ic4442t.asm

📁 51单片机适用的4442IC卡的密码识别
💻 ASM
字号:
ICSDA          BIT      p1.1
ICSCL          BIT      p1.4
ICRST          BIT      p1.5
ICPWR          BIT      p1.6
ICINT          BIT      P1.7
ICPGM          BIT      P1.2

SCK            BIT      P1.6
SDA            BIT      P1.7
FLAG           BIT      60H



;------------------------------
;ic  card
SFG             EQU      37H        ;security  code  flag
DFG             EQU      38H        ;card  damage  flag
CBUF            EQU      08H                 ;(TEMP)commond  buffer  08h-0Ch bytes
MBUF            EQU      0dH                 ;(TEMP)   0Dh-11H  存放卡效验结果和密码4字节
;CBUF           EQU      39H        ;commond  buffer  39h-3fh bytes
;MBUF           EQU      50H        ;data buffer  40h-50H   USED IN TEST SC

;---------------------------

FLAG1           EQU     7FH    ;flag1.0--insert  ic  card   (1)
                               ;flag1.1--is  delivering  gas
                               ;flag1.2--state in  delivering  data to printer and lcd
                               ;flag1.3--ic sc is wrong    (1)
                               ;flag1.4--no volume in card  (1)
                               ;flag1.5--not write volume to card  (1)
;---------------------------------------------------------------------
             ORG    0000H
             JMP    START
             ORG    0030H
 START:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
             MOV       SP,#60H

             LCALL     CLOSE_IC
             MOV       FLAG1,#00H

             LCALL     DELAY_10              ;500uS
VOL_SYS:
             LCALL      OPEN_IC
             LCALL      CARDCHECK              ;CHECK IC SC
             SJMP  $

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DELAY:   MOV     R7,#80        ;80*250*2=40ms
         MOV     R6,#0F0H
DELAY2:  DJNZ    R6,DELAY2
         MOV     R6,#0F0H
         DJNZ    R7,DELAY2
         RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DELAY_10:MOV     R7,#0F0H       ;500us
DELAY1:  DJNZ    R7,DELAY1

         ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

;ic-card

CLOSE_IC:
             setb      ICPWR         ;close power of ic card
             NOP
             NOP
             RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OPEN_IC:
             clr     ICPWR
             NOP
             NOP
             NOP
             RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CARDCHECK:
           MOV        R5, #0b6H        ;0b6h
           MOV        R6, #023H        ;23h
           MOV        R7, #07H        ;07h
           LCALL      SCHK_42_SC
           RET




;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; READ     SOME  BYTES  IN CARD
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ_CARD:
          lcall    reset_42
          MOV      R0,#CBUF
          MOV      @R0,#30H
          INC      R0
          MOV      A,R5
          inc      r5
          MOV      @R0,A
          INC      R0
          MOV      @R0,#0FFH
          LCALL    COM_42
          MOV      A,R6
          MOV      R0,A
SRD_44:
          LCALL    BRD_42
          MOV      @R0,A
          INC      R0
          DJNZ     R7,SRD_44
          LCALL    INTERR42
          RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ_sc:
          lcall    reset_42
          MOV      R0,#CBUF
          MOV      @R0,#31H
          INC      R0
          MOV      @R0,#0ffh  ;A
          INC      R0
          MOV      @R0,#0FFH
          LCALL    COM_42
          push     05h
          mov      r5,#04h
          mov      r0,#mbuf
rd_sc1:
          LCALL    BRD_42
          mov      @r0,a
          inc      r0
          djnz     r5,rd_sc1
          pop      05h
          RET


;***************************
;WRITE  A BYTE  IN CARD
;;;;;;;;;;;;;;;;;;;;;;;;;;;
WRITE_CARD:
         LCALL     RESET_42
         MOV       R0,#CBUF
         MOV       @R0,#38H
         INC       R0
         mov       a,r5
         inc       r5
         MOV       @R0,A
         INC       R0
         MOV       A,R6
         INC       R6
         MOV       R1,A
         MOV       A,@R1
         MOV       @R0,A
         INC       R0
         LCALL     COM_42
         LCALL     BWR_42
         DJNZ      R7,WRITE_CARD
         lcall     interr42
         RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;check   sect      of 4442
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SCHK_42_SC:
         LCALL    RESET_42
         LCALL    CHK_42CN
         MOV      R0,#MBUF
         MOV      A,@R0
         INC      R0
         JNZ      SCHK_42_SC1
         LJMP     SCHK_42_SC6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SCHK_42_SC1:
        JBC       ACC.0,SCHK_42_SC2
        JBC       ACC.1,SCHK_42_SC2
        CLR       A
SCHK_42_SC2:
        LCALL     CHK_42WC
        LCALL     CHK_42CH
        LCALL     CHK_42CM
        LCALL     CHK_42CL
        MOV       A,#0FFH
        LCALL     CHK_42WC
        LCALL     CHK_42CN
        MOV       R0,#MBUF
        MOV       A,@R0
        INC       R0
        ANL       A,#07H
        JNZ       SCHK_42_SC7
SCHK_42_SC6:
        MOV       SFG,#0FFH
        MOV       DFG,#0FFH
        ORL       FLAG1,#08H
        LCALL     CLOSE_IC
        LJMP      SCHK_42_SC9
SCHK_42_SC7:
        ORL       A,#0F8H
        INC       A
        JZ       SCHK_42_SC8
        MOV      SFG,#0FFH
        MOV      DFG,#00H
        ORL      FLAG1,#08H
        LCALL    CLOSE_IC
        LJMP     SCHK_42_SC9
SCHK_42_SC8:
        MOV      SFG,#00H
        MOV      DFG,#00H
        ANL      FLAG1,#0F7H
SCHK_42_SC9:
        LCALL   INTERR42
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHK_42CN:
        MOV     R0,#CBUF
        MOV     @R0,#31H
        INC     R0
        MOV     @R0,#0FFH
        INC     R0
        MOV     @R0,#0FFH
        LCALL   COM_42
        PUSH    05H
        MOV     R5,#04H
        MOV     R0,#MBUF
CHK_42CN1:
        LCALL   BRD_42
        MOV     @R0,A
        INC     R0
        DJNZ    R5,CHK_42CN1
        POP     05H
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHK_42CH:
       MOV       R0,#CBUF
       MOV       @R0,#33H
       INC       R0
       MOV       @R0,#01H
       INC       R0
       MOV       A,R5
       MOV       @R0,A
       INC       R0
       LJMP      CHK_42CS
CHK_42CM:
       MOV       R0,#CBUF
       MOV       @R0,#33H
       INC       R0
       MOV       @R0,#02H
       INC       R0
       MOV       A,R6
       MOV       @R0,A
       INC       R0
       LJMP      CHK_42CS
CHK_42CL:
       MOV       R0,#CBUF
       MOV       @R0,#33H
       INC       R0
       MOV       @R0,#03H
       INC       R0
       MOV       A,R7
       MOV       @R0,A
       INC       R0
CHK_42CS:
       LCALL     COM_42
       LCALL     BWR_42
       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CHK_42WC:
        MOV      R0,#CBUF
        MOV      @R0,#39H
        INC      R0
        MOV      @R0,#00H
        INC      R0
        MOV      @R0,A
        INC      R0
        LCALL    COM_42
        LCALL    BWR_42
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
reset_42:
          clr     ICSCL
          nop
          nop
          CLR     ICRST
          LCALL   DELAY_20
          SETB    ICRST
          LCALL   DELAY_20
          SETB     ICSCL
          LCALL   DELAY_20
          CLR     ICSCL
          LCALL   DELAY_20
          CLR     ICRST
          PUSH    05H
          MOV     R5,#04H
          MOV     A,#CBUF
          CLR     C
          ADDC    A,#03H
          MOV     R0,A
RESET_421:
          LCALL   BRD_42
          MOV     @R0,A
          INC      R0
          DJNZ    R5,RESET_421
          POP     05H
          CLR     ICSCL
          LCALL   DELAY_20
          SETB    ICSCL
          JB      ICSDA,RESET_422
          LCALL   BWR_42
RESET_422:RET
;************************************************************;
COM_42:
        LCALL   BEGIN42
        MOV     R0,#CBUF
        MOV     R1,#03H
        CLR     C
COM_421:
        MOV     R2,#08H
        MOV     A,@R0
        INC     R0
COM_422:
        CLR     ICSCL
        RRC     A
        MOV     ICSDA,C
        LCALL   DELAY_20
        SETB    ICSCL
        LCALL   DELAY_20
        DJNZ    R2,COM_422
        DJNZ    R1,COM_421
        LCALL   END_42
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BEGIN42: CLR   ICSCL
        LCALL    DELAY_20
        SETB    ICSDA
        NOP
        NOP
        NOP
        SETB     ICSCL
        NOP
        NOP
        NOP
        CLR     ICSDA
        NOP
        NOP
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END_42: CLR    ICSCL
        NOP
        NOP
        CLR    ICSDA
        NOP
        NOP
        NOP
        SETB     ICSCL
        NOP
        NOP
        NOP
        SETB     ICSDA
        NOP
        NOP
        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BRD_42:
       MOV     R4,#08H
BRD_421:
        CLR     ICSCL
        LCALL   DELAY_20
        SETB    ICSDA
        LCALL   DELAY_20
        SETB    ICSCL
        MOV     C,ICSDA
        RRC     A
        LCALL   DELAY_20
        DJNZ    R4,BRD_421
        RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BWR_42:
       MOV      R4,#00H
BWR_421:
        setb     ICSCL
        LCALL    DELAY_20
        clr     ICSCL
        LCALL   DELAY_20
        DJNZ    R4,BWR_421
        RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTERR42:
       CLR     ICSCL
       NOP
       NOP
       CLR     ICRST
       NOP
       NOP
       CLR     ICSDA
       LCALL    DELAY_20
       SETB    ICRST
       LCALL   DELAY_20
       SETB    ICSDA
       LCALL   DELAY_20
       CLR     ICRST
       LCALL   DELAY_20
       RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_20:
       MOV      R3,#09h
DELAY_201:
       DJNZ    R3,DELAY_201
       RET

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

⌨️ 快捷键说明

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