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

📄 f200asm.asm

📁 IC卡底层操作接口,符合正向约定和反向约定.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
NAME            FBPROGRAM
$INCLUDE(F200ASM.INC)
PUBLIC          POWER_ON_CPU,POWER_OFF_CPU,_RESET_CPU,_YCL_RESET_CPU
PUBLIC          _COMMAND_T0_CPU,_COMMAND_T1_CPU,RST_CPU,OK_RESET_CPU,OK_RESET_SAM,ERR_RESET_CPU,ERR_RESET_SAM
PUBLIC          POWER_ON_SAM,POWER_OFF_SAM,_RESET_SAM
PUBLIC          _COMMAND_T0_SAM,_COMMAND_T1_SAM,RST_SAM
PUBLIC          PROTOCOL_CPU,PROTOCOL_SAM
PUBLIC          ICCARD_BAK,FLASH_BAK
FBDATA          SEGMENT       DATA
FBCODE          SEGMENT       CODE
FBBIT           SEGMENT       BIT


RSEG            FBDATA

PROTECT_TIME_CPU:       DS      1
PROTECT_TIME_SAM:       DS      1
INS:                    DS      1
INSBU:                  DS      1	;INS补码
LER:                    DS      1
LC:                     DS      1
RETNUM:                 DS      1
BAND_DELAY_CPU:         DS      1
BAND_DELAY_SAM:         DS      1
ICCARD_BAK:             DS      1
FLASH_BAK:              DS      1
VER_TIME:		DS      1	;校验错误后数据重新传送(接收)次数
R3BAK:			DS      1	;
OFFSET:			DS      1	;P3中DATA的偏移量
DPLBAK:			DS      1	;
DPHBAK:			DS      1	;
DPLBUBAK:		DS      1	;
DPHBUBAK:		DS      1	;

RSEG            FBBIT

RST_CPU:        DBIT    1
RST_SAM:        DBIT    1
PROTOCOL_CPU:   DBIT    1
PROTOCOL_SAM:   DBIT    1
PCB_CPU:        DBIT    1
PCB_SAM:        DBIT    1
PROMISE_CPU:    DBIT    1
PROMISE_SAM:    DBIT    1
ERR_RESET_CPU:	DBIT	1	;复位应答为0X3D错误标志0:无 1:是
OK_RESET_CPU:	DBIT	1	;复位应答错误标志0:错误 1:正确
INS_BUBIT:	DBIT    1		;过程字节为INS补码
OK_RESET_SAM:	DBIT	1	;复位应答错误标志0:错误 1:正确
ERR_RESET_SAM:	DBIT	1	;复位应答为0X3D错误标志0:无 1:是

RSEG            FBCODE
;***************************************************************************;
; 每个bit之间允许的单周期指令数 = f/(12*baut rate)
;18432M (9600bps-每个bit之间允许160条单周期指令-现有12条 148=160-12 74=148/2)
;18432M (19200bps-每个bit之间允许80条单周期指令-现有12条 68=80-12 34=68/2)
;18432M (38400bps-每个bit之间允许40条单周期指令-现有12条 28=40-12 14=28/2)
RECEIVECPU_BYTEA:
        DJNZ    R1,RECEIVECPU_BYTED
        JB      CPU_IO,RECEIVECPU_BYTEB
        LJMP    RECEIVECPU_BYTE1
RECEIVECPU_BYTEB:
        DJNZ    R2,RECEIVECPU_BYTED
        JB      CPU_IO,RECEIVECPU_BYTEC
        LJMP    RECEIVECPU_BYTE1
RECEIVECPU_BYTEC:
        DJNZ    R3,RECEIVECPU_BYTED
        SETB    CPU_IO
        CLR     C
        RET
RECEIVECPU_BYTED:
        JB      CPU_IO,RECEIVECPU_BYTE0
        LJMP    RECEIVECPU_BYTE1
;start
RECEIVECPU_BYTE:
        MOV     VER_TIME,#04H

RECEIVECPU_BYTESTAR:
        SETB    CPU_IO
        MOV     R2,#00H
        MOV     R1,#00H
	MOV	R3BAK,R3

RECEIVECPU_BYTE0:
        JB      CPU_IO,RECEIVECPU_BYTEA         ;START  ;2
        NOP                                             ;1
        NOP                                             ;1

RECEIVECPU_BYTE1:
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;2

        NOP                                             ;1
        NOP                                             ;1
        MOV     A,BAND_DELAY_CPU                        ;1
        CLR     C                                       ;1        
        RRC     A                                       ;1
        MOV     R0,A                                    ;1
        DJNZ    R0,$                                    ;2
RECEIVECPU_BYTE2:

        MOV     C,CPU_IO                        ;BIT0   ;1
        JNB     PROMISE_CPU,RECEIVECPU_BYTE20           ;2
        CPL     C                                       ;1
        RLC     A                                       ;1
        LJMP    RECEIVECPU_BYTE21                       ;2
RECEIVECPU_BYTE20:
        RRC     A                                       ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
RECEIVECPU_BYTE21:
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;3

RECEIVECPU_BYTE3:                                       
        MOV     C,CPU_IO                        ;BIT1   ;1
        JNB     PROMISE_CPU,RECEIVECPU_BYTE30           ;2
        CPL     C                                       ;1
        RLC     A                                       ;1
        LJMP    RECEIVECPU_BYTE31                       ;2
RECEIVECPU_BYTE30:
        RRC     A                                       ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
RECEIVECPU_BYTE31:
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;3

RECEIVECPU_BYTE4:
        MOV     C,CPU_IO                        ;BIT2   ;1
        JNB     PROMISE_CPU,RECEIVECPU_BYTE40           ;2
        CPL     C                                       ;1
        RLC     A                                       ;1
        LJMP    RECEIVECPU_BYTE41                       ;2
RECEIVECPU_BYTE40:
        RRC     A                                       ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
RECEIVECPU_BYTE41:
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;2

RECEIVECPU_BYTE5:
        MOV     C,CPU_IO                        ;BIT3   ;1
        JNB     PROMISE_CPU,RECEIVECPU_BYTE50           ;2
        CPL     C                                       ;1
        RLC     A                                       ;1
        LJMP    RECEIVECPU_BYTE51                       ;2
RECEIVECPU_BYTE50:
        RRC     A                                       ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
RECEIVECPU_BYTE51:
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU
        DJNZ    R0,$

RECEIVECPU_BYTE6:
        MOV     C,CPU_IO                        ;BIT4
        JNB     PROMISE_CPU,RECEIVECPU_BYTE60
        CPL     C
        RLC     A
        LJMP    RECEIVECPU_BYTE61
RECEIVECPU_BYTE60:
        RRC     A                                       ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
RECEIVECPU_BYTE61:
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU
        DJNZ    R0,$

RECEIVECPU_BYTE7:
        MOV     C,CPU_IO                        ;BIT5
        JNB     PROMISE_CPU,RECEIVECPU_BYTE70
        CPL     C
        RLC     A
        LJMP    RECEIVECPU_BYTE71
RECEIVECPU_BYTE70:
        RRC     A                                       ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
RECEIVECPU_BYTE71:
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU
        DJNZ    R0,$

RECEIVECPU_BYTE8:
        MOV     C,CPU_IO                        ;BIT6
        JNB     PROMISE_CPU,RECEIVECPU_BYTE80
        CPL     C
        RLC     A
        LJMP    RECEIVECPU_BYTE81
RECEIVECPU_BYTE80:
        RRC     A                                       ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
RECEIVECPU_BYTE81:
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU
        DJNZ    R0,$

RECEIVECPU_BYTE9:
        MOV     C,CPU_IO                        ;BIT7   ;2
        JNB     PROMISE_CPU,RECEIVECPU_BYTE90           ;4
        CPL     C                                       ;1
        RLC     A                                       ;1
        LJMP    RECEIVECPU_BYTE91                       ;2
RECEIVECPU_BYTE90:
        RRC     A                                       ;1
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
RECEIVECPU_BYTE91:
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;2
RECEIVECPU_BYTE10:	;奇偶校验位判断
	MOV	C,CPU_IO				;2
	JNB	P,RECEIVECPU_BYTE101			;4
	CPL	C					;1
RECEIVECPU_BYTE101:
	MOV	R3,R3BAK
	JNC	RECEIVECPU_BYTEOK			;4
	MOV	R0,BAND_DELAY_CPU;			;2奇偶校验位错误
        DJNZ    R0,$                                    ;3
        CLR	CPU_IO					;2 10.5个ETU处拉低CPU_IO电平2个ETU
	MOV	R0,BAND_DELAY_CPU;			;2
        DJNZ    R0,$                                    ;3
	MOV	R0,BAND_DELAY_CPU;			;2
        DJNZ    R0,$                                    ;3
	DJNZ	VER_TIME,RECEIVECPU_BYTEAGAIN		;3 重新接收数据3次
	MOV	R3,#0H
	LJMP	RECEIVECPU_BYTEC
RECEIVECPU_BYTEAGAIN:
	LJMP	RECEIVECPU_BYTESTAR
RECEIVECPU_BYTEOK:	;奇偶校验位正确

	PUSH	ACC					;2
        MOV     A,BAND_DELAY_CPU;                       ;1
        CLR     C                                       ;1
	RRC	A					;1
        MOV     R0,A                                    ;1
        DJNZ    R0,$                                    ;2

	POP	ACC					;2
        SETB    CPU_IO                                  ;1
        SETB    C                                       ;1        ;if over time,c=0
        RET                                             ;2
;****************************************************************************
DELAY_CPU:                                              ;t=0==>320;t=1==>160
        JB      PROTOCOL_CPU,DELAY_CPU0                 ;2
        NOP                                             ;1
        MOV     R0,#8                                   ;1
        DJNZ    R0,$                                    ;2
	MOV     R0,BAND_DELAY_CPU                       ;2
DELAY_CPUA:
        NOP
        NOP
        DJNZ    R0,DELAY_CPUA                           ;2
        LJMP    DELAY_CPU1                              ;2

DELAY_CPU0:                                             ;extra_protect_time
        NOP                                             ;1
        MOV     R0,#3                                   ;1
        DJNZ    R0,$                                    ;2
        MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;2

DELAY_CPU1:
        MOV     A,PROTECT_TIME_CPU                      ;1
        MOV     R4,A                                    ;1
        JNZ     DELAY_CPU2                              ;2
        RET
DELAY_CPU2:
        NOP                                             ;1
        MOV     R0,#4                                   ;1
        DJNZ    R0,$                                    ;2
	MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;2
        DJNZ    R4,DELAY_CPU2                           ;2
        RET
;****************************************************************************
SENDCPU_BYTE:
	MOV	VER_TIME,#04H
SENDCPU_BYTESTAR:
        PUSH    ACC

        CLR     CPU_IO;START                            ;1
        JNB     PROMISE_CPU,SENDCPU_BYTE0               ;2
        NOP                                             ;1
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;2
        RLC     A                                       ;1
        CPL     C                                       ;1
        LJMP    SENDCPU_BYTE01                          ;2
SENDCPU_BYTE0:
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;2
        RRC     A                                       ;1
SENDCPU_BYTE01:
        MOV     CPU_IO,C;BIT0                           ;2
        JNB     PROMISE_CPU,SENDCPU_BYTE1               ;2
        NOP                                             ;1
        NOP                                             ;1
        MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$                                    ;2
        RLC     A                                       ;1
        CPL     C                                       ;1
        LJMP    SENDCPU_BYTE11                          ;2
SENDCPU_BYTE1:                                          ;
        NOP                                             ;
        NOP                                             ;
        NOP                                             ;
        NOP                                             ;
        NOP                                             ;
	MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$
        RRC  A
SENDCPU_BYTE11:
        MOV     CPU_IO,C                ;BIT1
        JNB     PROMISE_CPU,SENDCPU_BYTE2
        NOP
        NOP
        MOV     R0,BAND_DELAY_CPU
        DJNZ    R0,$
        RLC     A
        CPL     C
        LJMP    SENDCPU_BYTE21
SENDCPU_BYTE2:
	NOP
	NOP
	NOP
	NOP
	NOP
	MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$
        RRC  A
SENDCPU_BYTE21:
        MOV     CPU_IO,C                ;BIT2

        JNB     PROMISE_CPU,SENDCPU_BYTE3
        NOP
        NOP
        MOV     R0,BAND_DELAY_CPU
        DJNZ    R0,$
        RLC     A
        CPL     C
        LJMP    SENDCPU_BYTE31
SENDCPU_BYTE3:
	NOP
	NOP
	NOP
	NOP
	NOP
	MOV     R0,BAND_DELAY_CPU                       ;2
        DJNZ    R0,$
        RRC  A
SENDCPU_BYTE31:
        MOV     CPU_IO,C                ;BIT3

        JNB     PROMISE_CPU,SENDCPU_BYTE4
        NOP
        NOP
        MOV     R0,BAND_DELAY_CPU
        DJNZ    R0,$
        RLC     A
        CPL     C
        LJMP    SENDCPU_BYTE41
SENDCPU_BYTE4:
	NOP

⌨️ 快捷键说明

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