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

📄 icic2.asm

📁 自己编写的适用于51单片机的102IC卡的读写操作
💻 ASM
字号:

        NAME     DEMO51
DEMO_CODE0  SEGMENT  CODE  PAGE
DEMO_CODE1  SEGMENT  CODE  INBLOCK
DEMO_DATA   SEGMENT  DATA
DEMO_IDATA  SEGMENT  IDATA
DEMO_XDATA  SEGMENT  XDATA INPAGE
DEMO_BIT    SEGMENT  BIT

ACCUM          EQU      A
N27            EQU      27

COUNT          SET      0
COUNT          SET      1

RSEG           DEMO_BIT
ICRST          BIT      P1.3
ICSCL          BIT      P1.1
ICFUS          BIT      P1.4
ICSDA          BIT      P1.2
ICPGM          BIT      P1.5
ICPWR          BIT      P1.6
FLAGA:         DBIT     05H

RSEG           DEMO_DATA
CONIN          DATA     20H
               DS       1
RSEG           DEMO_XDATA
TIME           XDATA    0BE00H
               DS       1

RSEG           DEMO_IDATA
BUFFER         IDATA    0A0H
BUFFERA:       DS       05H

RESTART        CODE     0000H

RSEG           DEMO_CODE0
;---------------------------------------
TYPE            EQU      52H        ;card type

SFG             EQU      53H        ;security code flag
DFG             EQU      54H        ;card  damage  flag
CBUF            EQU      39H        ;commond  buffer  39h-3fh bytes
MBUF            EQU      40h        ;data buffer  40h-7fh 64 bytes
EK1             EQU      66H
DAM2            EQU      67H
EZF2            EQU      68H
EK2             EQU      69H
;------------------------------------
;-------------------------------
;LCD
CADD            Equ      0A001H
DADD            Equ      0A000H
CC_DB           Equ      20H         ;240/8
C_MODE          Equ      00H      ;(C_MODE)byte---DISPLAY MODE:
			       ;	    (C_MODE)=0---"POSITIVE" DISPLAY
			       ;	    (C_MODE)=1---"NEGATIVE" DISPLAY
DPHH            Equ      50H      ; Display First Address
DPLL            Equ      51H
;---------------------------
;USE 42H 43H 44H CHINGE 16 TO BCD
JQL_RAM         EQU      30H     ;30H  TO  34H
JQJE_RAM        EQU      35H     ;35H   TO  39H
BUS_RAM         EQU      3AH     ;NUMBER OF BUS
                              ;3AH   TO    40H
SYJE_RAM        EQU      45H     ;45H   TO  49H
;--------------------------------------------
Year            Equ      52H      ; DATA OF YEAR
Month           Equ      53H      ; DATA OF MONTH
Date            Equ      54H      ; DATA OF DATE
Hours           Equ      55H      ; DATA OF HOURS
Minutes         Equ      56H      ; DATA OF MINUTES
seconds         Equ      57h      ; DATA OF SECONDS

DATE_RAM        EQU      52H
TIME_RAM        EQU      55H
;----------------------------
;IN  DS12887
MACH_RAM         EQU     66H     ;NUMBER OF MACHINE
                                ;66H TO 69H
STAI_RAM         EQU     6AH     ;NUMBER OF STATION
                                ;6AH TO 6CH
MONENY_RAM       EQU     6DH     ;BASIS  OF MONENY
                                ;6DH TO 6FH
MACHD_RAM        EQU     16H     ;NUMBER OF MACHINE  IN DS12887
STAID_RAM        EQU     1AH     ;NUMBER OF STATION  IN DS12887
MONENYD_RAM      EQU     1DH     ;BASIS  OF MONENY    IN DS12887
;-----------------------------
FLASHRAMH       EQU      7CH
FLASHRAML       EQU      7DH
;----------------------------------------------------
DOT_AD          EQU      7EH      ;DOT OF MOENY AND VOLUME

FLAG1           EQU      7FH      ;flag1.0--insert  ic  card   (1)
                               ;flag1.1--is  delivering  gas
                               ;flag1.2--state in  delivering  data to printer and lcd
;---------------------------------------------------------------------
               ORG  0000H
               JMP  START
               ORG 0030H

START:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

             MOV       SP,#07H
             setb       ICFUS
             LCALL     CS_8255
             LCALL     INI8255
;            SETB      ICPWR
                      ;close ic power

;             LCALL     CHECK_IC
;             LCALL     PWRON
;            sjmp      icpo


             LCALL     SCHK_SC0
;;             LCALL     SWR_88S
             LCALL     SRD_88S
ICEND:       SJMP      ICEND
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
   ;R4R5   ;DATA  ADDRESS
   ;R6R7    DATA   LENTH
  ;MUBF    ;DATA    BUFFER

SWR_88S:  MOV        R5,#20H
          MOV        R7,#10H
          LCALL      RESET2
          LCALL      INCAD
SWR_88S1: MOV        A,#22H
          LCALL      BWR_88S
          DJNZ       R7,SWR_88S1
          RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SRD_88S:
           mov        r7,#20h
           mov        r5,#20h
           LCALL      RESET2
           LCALL      INCAD
           MOV        R0,#30h             ;MBUF
SRD_88S1:  LCALL      BRD_88S
           MOV        @R0,A
           INC        R0
           CLR        C
           DJNZ       R7,SRD_88S1
           RET

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;R4R5  ;data  address
;R6R7  ;data  length
;MBUF  ;databuf
;-----------------------------------
SCHK_SC0:
          mov        r4,#00h
          MOV        R5,#0AH
          mov        r6,#00h
          MOV        R7,#02H
          MOV        R0,#MBUF
          MOV        A,#0F0H
          MOV        @R0,A
          INC        R0
          MOV        A,#0F0H
          MOV        @R0,A
          LCALL    CHKSCER
          CLR      A
SCHK_SC04: SETB     ICSCL
           SETB     ICSDA
           CLR      ICSCL
           INC      A
           JNB      ICSDA,SCHK_SC05
           LJMP     SCHK_SC06
SCHK_SC05: CJNE     A,#04H,SCHK_SC04
           LJMP     SCHK_SC08
SCHK_SC06: MOV      DFG,#00H       ;CARD OK
           LCALL    PROG0         ;WRITE 0
           JB       ICSDA,SCHK_SC07
           LCALL    PROG1         ;WRITE  1
           JNB      ICSDA,SCHK_SC07
           MOV      SFG,#00H
           LJMP     SCHK_SC09
SCHK_SC07: MOV      SFG,#0FFH
           LJMP     SCHK_SC09
SCHK_SC08: MOV      DFG,#0FFH
SCHK_SC09: RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
CHKSCER:
          LCALL      RESET2
          CLR        C
          DEC        R5
          LCALL      INCAD
          MOV        R0,#07H
CHKSC1:   SETB       ICSCL
          NOP
          CLR        ICSCL
          NOP
          DJNZ       R0,CHKSC1
          MOV        R0,#MBUF
CHKSCER2: MOV        A,@R0
          INC        R0
          MOV        R1,#08H
CHKSCER3: SETB       ICSCL
          RLC        A
          MOV        ICSDA,C
          CLR        ICSCL
          NOP
          DJNZ       R1,CHKSCER3
          DJNZ       R7,CHKSCER2
          RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
PROG0:    NOP
          SETB      ICPGM
          NOP
          CLR       ICSDA
          NOP
          NOP
          SETB      ICSCL
          NOP
          CLR       ICPGM
          LCALL     DELAY_5ms
          SETB      ICSDA
          CLR       ICSCL
          NOP
          RET
;---------------------------------
PROG1:    NOP
          SETB      ICPGM
          NOP
          SETB      ICSDA
          NOP
          NOP
          SETB      ICSCL
          NOP
          CLR       ICPGM
          LCALL     DELAY_5ms
          SETB      ICSDA
          CLR       ICSCL
          NOP
          RET
;---------------------------------
SCHK_ER1:  LCALL   CHKSCER
           SETB    ICSCL
           NOP
           CLR     ICSCL
           NOP
           LCALL   PROG1
           LCALL   RESET2
           MOV     R4,#00H
           MOV     R5,#16H
           LCALL   INCAD
           MOV     R6,#02H
SCHK_ER14: MOV     R7,#00H
SCHK_ER15: SETB    ICSDA
           JNB     ICSDA,SCHK_ER16
           SETB    ICSCL
           NOP
           CLR     ICSCL
           NOP
           DJNZ    R7,SCHK_ER15
           DJNZ    R6,SCHK_ER14
           MOV     EK1,#00H
           LJMP    SCHK_ER17
SCHK_ER16: MOV     EK1,#0FFH
SCHK_ER17: RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$
SCHK_ER2:  LCALL   CHKSCER
           CLR     A
SCHK_ER24: SETB    ICSCL
           SETB    ICSDA
           CLR     ICSCL
           INC     A
           JNB     ICSDA,SCHK_ER25
           LJMP    SCHK_ER26
SCHK_ER25: CJNE    A,#80H,SCHK_ER24
           LJMP    SCHK_ER2B
SCHK_ER26: MOV     DAM2,#00H
           LCALL   PROG0
           JB      ICSDA, SCHK_ER27
           LCALL   PROG1
           JB      ICSDA,SCHK_ER27
           LJMP    SCHK_ER28
SCHK_ER27: MOV     EZF2,#0FFH
           LJMP    SCHK_ER2C
SCHK_ER28: LCALL   RESET2
           MOV     R4,#00H
           MOV     R5,#5CH
           LCALL   INCAD
           MOV     R6,#02H
SCHK_ER29: MOV     R7,#00H
SCHK_ER2A: SETB    ICSDA
           JNB     ICSDA,SCHK_ER27
           SETB    ICSCL
           NOP
           CLR     ICSCL
           NOP
           DJNZ    R7,SCHK_ER2A
           DJNZ    R6,SCHK_ER29
           MOV     EZF2,#00H
           LJMP    SCHK_ER2C
SCHK_ER2B: MOV     DAM2,#0FFH
SCHK_ER2C: RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;------------------------------------------
;RESET
 RESET2:  CLR        ICPGM
          SETB       ICSDA
          SETB       ICRST
          CLR        ICSCL
          CLR        ICRST
          NOP
          RET
;--------------------------------------------
;-------------------------------------
;READ   ONE BYTE  TO ACC

BRD_88S:  PUSH     05H
          MOV      R5,#08H
BRD_88S1: SETB     ICSDA
          MOV      C,ICSDA
          RLC      A
          SETB     ICSCL
          NOP
          CLR      ICSCL
          NOP
          DJNZ     R5,BRD_88S1
          POP      05H
          RET
;---------------------------------
;WRITE  ACC  TO IC
BWR_88S:  PUSH     05H
          MOV      R5,#08H
BWR_88S1: RLC      A
          MOV      ICSDA,C
          NOP
          NOP
          JB       ICSDA,BWR_88S2
          LCALL    PROG0
BWR_88S2: SETB     ICSCL
          NOP
          CLR      ICSCL
          NOP
          DJNZ     R5,BWR_88S1
          POP      05H
          RET
;----------------------------------------
;;;;;;;;;;;--------------------------
INCAD:
           CJNE      R5,#00H,INCAD1
           LJMP      INCADE
INCAD1:    MOV       R0,#08H
INCAD2:    SETB      ICSCL
           NOP
           CLR       ICSCL
           NOP
           DJNZ      R0,INCAD2
           CLR       C
           MOV       A,R5
           SUBB      A,#01H
           MOV       R5,A
           CJNE      R5,#00H,INCAD1
INCADE:    RET

;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;R4R5    DATA ADDRESS
;R6R7     DATA    LENGTH
;MBUF      SC   DATA   BUFFER
;-----------------------
CHECK_IC:
              LCALL     CS_8255              ;test over deliver gas
              MOV       DPTR,#01H
              MOVX      A,@DPTR
              ANL       A,#01000000B      ;PB6
              JZ        end_ICCHk
              lcall     delay_10
              MOV       DPTR,#01H
              MOVX      A,@DPTR
              ANL       A,#01000000B      ;PB6
              jz        end_ICCHK
              lcall     delay_10
              MOV       DPTR,#01H
              MOVX      A,@DPTR
              ANL       A,#01000000B      ;PB6
              jz        end_ICCHK
              ORL       FLAG1,#00000001B
END_ICCHK:    setb      p1.4
           RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
PWRON:     CLR      ICRST
           CLR      ICSCL
           CLR      ICPGM
           LCALL     DELAY_10
           CLR       ICSDA
           CLR         ICPWR
           RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
PWROFF:       CLR         ICRST
              CLR         ICSCL
              CLR         ICPGM
              CLR        ICSCL
              LCALL     DELAY_10
              SETB       ICPWR
              RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
CS_8255:
             CLR     P3.2
             SETB    P3.3
             CLR     P1.3
             RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

INI8255:
             MOV     A,#10000010B
             MOV     DPTR,#03H
             MOVX    @DPTR,A
             RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DELAY_10:    MOV     R4,#0F0H       ;500us
DELAY1:      DJNZ    R4,DELAY1
             ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_5MS:
            MOV    R6,#0AH
            MOV    R4,#0F0H
DELAY_MS:   DJNZ   R4,DELAY_MS
            MOV    R4,#0F0H
            DJNZ   R6,DELAY_MS
            RET

RSEG        DEMO_CODE1
            RET

		 end

⌨️ 快捷键说明

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