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

📄 tic4.asm

📁 适用51单片机的2401存储器的读写操作
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;========得到W1,W2,Wn=========
GETWI:       MOV        A,DATALONG
GETWI1:      ADD        A,S2
             XRL        A,#34H
             INC        A
             MOV        @R0,A
             INC        R0
             INC        R1
             MOV        A,R1
             CJNE       A,R,GETWI1
             RET
;=======得到随机数=============
GETRANDOM:
            MOV         S1,TH0
            MOV         S2,TL0
            MOV         A,S2
            ANL         A,#03H
            INC         A
            MOV         R,A
            RET
;=====传送数据效验和===========
SEDATAADD:
             CLR             C
             MOV             A,#00H
             MOV             R1,DATALONG
             MOV             R0,#DATAF
SE1:         ADD             A,@R0
             INC             R0
             DJNZ            R1,SE1
             MOV             DATACHE,A
             RET
;======定时中断处理程序(10ms)===
EINT:
                PUSH           PSW
                PUSH           ACC
                JB             RFLAG.0,EINT_OUT       ;是否正在接收上位发下来的数据
                MOV            TH0,#0DBH                ;10mS
                MOV            TL0,#0FFH
                LCALL          SEDOG
                INC            TEMP11                ;用于拔卡
                INC            DCOUNT                ;用于传送数据
                JNB            FLAG1.4,EINT_0        ;是否发出拔卡消息
                JNB            ICINT,NO_OUTIC
                MOV            A,TEMP11
                CJNE           A,#64H,EINT_0             ;判断是否拔卡到了一秒
                LCALL          OUTCARD
                SETB           RFLAG.1
                CLR            FLAG1.4
                AJMP           EINT_OUT
NO_outIC:       CLR            FLAG1.4
EINT_0:
                INC            TEMP10
                MOV            A,TEMP10
                CJNE           A,#64H,EINT_OUT               ;判断是否到了一秒
                MOV            TEMP10,#00H
                INC            STIME
                MOV            A,STIME
                CJNE           A,#60,EINT_OUT               ;判断是否到了一分钟
                MOV            STIME,#00H
                INC            STIME1
                MOV            A,STIME1
                CJNE           A,#03H,EINT_OUT     ;判断是否到最小计时单位
                MOV            STIME1,#00H
                JB             FLAG1.1,EINT_1
                LCALL          CLOSESTORE
                LCALL          DELAY_PC
                SJMP           EINT_OUT
EINT_1:         CLR            FLAG1.1
                LCALL          RESTORE
EINT_OUT:
                POP            ACC
                POP            PSW
                RETI
;========测试卡是否插入===============
ICTEST:    JB        ICINT,NO_IC
           JB         FLAG1.0,ICYE
           CLR        RFLAG.6
ICYE:      SETB       FLAG1.0
           LCALL      OPEN_IC
           SJMP       END_IC
NO_IC:     JNB        FLAG1.0,ENDIC1
           LCALL      OUTCARD
           SETB       RFLAG.1
           SETB       FLAG1.4
            MOV        TEMP11,#00H
endic1:
           CLR        FLAG1.0
           CLR        FLAG1.3
           CLR        TEMP1.1
           LCALL     CLOSE_IC
END_IC:    RET
;========关IC卡电源=======
CLOSE_IC:
             SETB       ICPWR
             NOP
             NOP
             RET
;========开IC卡电源=======
OPEN_IC:
             CLR     ICPWR
             NOP
             NOP
             NOP
             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
;=======WRITE  SOME BYTE  TO 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
;========写IC卡密码========================
WRITEICKEY:MOV        R5, #0B6h   ; (H)
           MOV        R6, #23h    ; (M)
           MOV        R7, #07h    ; (L)
           LCALL      WRITE_KEY
           RET
;========check   sect      of 4442===========
CARDCHECK:
           MOV        R5, #0B6h   ; (H)
           MOV        R6, #23h    ; (M)
           MOV        R7, #07h    ; (L)
           LCALL      SCHK_42_SC
           RET
;========check   sect      of 4442===========
CARDCHECK1:
           MOV        R5, #0FFh   ; (H)
           MOV        R6, #0FFh    ; (M)
           MOV        R7, #0FFh    ; (L)
           LCALL      SCHK_42_SC
           RET
;=========4442卡效验密码=======
SCHK_42_SC:
         LCALL    RESET_42
         LCALL    CHK_42CN
         MOV      R0,#MBUF
         MOV      A,@R0
         INC      R0
         CJNE     A,#0FCH,SCHK_42_SC1           ;校验次数=0FD?
         LJMP     SCHK_42_SC6

SCHK_42_SC1:
        JBC       ACC.0,SCHK_42_SC2
        JBC       ACC.1,SCHK_42_SC2
        LJMP      SCHK_42_SC6
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
        CJNE      A,#07H, SCHK_42_SC6
        ANL       FLAG1,#0F7H
        AJMP      SCHK_42_SC9
SCHK_42_SC6:
        ORL       FLAG1,#08H
        LCALL     CLOSE_IC
SCHK_42_SC9:
        LCALL    INTERR42
        RET
;==========读4442 的密码(READ SC IN IC CARD)==========
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
;------------------------------------------------
;写SLE/4442 IC卡密码操作软件清单
;R5:   security(high   byte)
;R6:   security(medium byte)
;R7:   security(low    byte)
;------------------------------------------------
WRITE_KEY:
          LCALL  RESET_42     ;reset smart card
          MOV    R0,   #CBUF
          MOV    @R0,  #39H   ;First Byte 写密码命令
          INC    R0
          MOV    @R0,  #01H   ;second byte 地址
          INC    R0
          MOV    A,    R5
          MOV    @R0,  A      ;third byte  security(high   byte)
          INC    R0
          LCALL  COM_42
          ;--------------------------------------
          LCALL  BWR_42        ;write process
          MOV    R0,   #CBUF
          MOV    @R0,  #39H   ;First Byte 写密码命令
          INC    R0
          MOV    @R0,  #02H   ;second byte 地址
          INC    R0
          MOV    A,    R6
          MOV    @R0,  A      ;third byte  security(medium byte)
          INC    R0
          LCALL  COM_42
          ;--------------------------------------
          LCALL  BWR_42        ;write process
          MOV    R0,   #CBUF
          MOV    @R0,  #39H   ;First Byte 写密码命令
          INC    R0
          MOV    @R0,  #03H   ;second byte 地址
          INC    R0
          MOV    A,    R7
          MOV    @R0,  A      ;third byte  security(low    byte)
          INC    R0
          LCALL  COM_42
          LCALL  BWR_42        ;write process
          LCALL  INTERR42
          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

⌨️ 快捷键说明

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