📄 f200asm.asm
字号:
MOV DPL,R1
;PUSH DPH
;PUSH DPL
MOV DPHBAK,DPH
MOV DPLBAK,DPL
MOV DPHBUBAK,DPH
MOV DPLBUBAK,DPL
COMMAND_T0_CPU:
MOV OFFSET,#00H ;P3中DATA偏移量
CLR INS_BUBIT
MOV DPH,R6
MOV DPL,R7
INC DPTR
MOVX A,@DPTR
MOV INS,A
CPL A
;INC A
MOV INSBU,A ;取出INS反码
MOV A,R5
CLR C
SUBB A,#06H
JC COMMAND_T0_CPU1 ;over means LC=0
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV LC,A
ADD A,#05H ;ler=(len=R5-05-LC)
MOV B,A
CLR C
SUBB A,R5
JC COMMAND_T0_CPU0 ;c=1,ler=the fifth
MOV LER,#00H
LJMP COMMAND_T0_CPU2
COMMAND_T0_CPU0:
MOV A,B
ADD A,R7
MOV DPL,A
MOV A,#00H
ADDC A,R6
MOV DPH,A
MOVX A,@DPTR
MOV LER,A ;calculate the position of len and take up
LJMP COMMAND_T0_CPU2
COMMAND_T0_CPU1:
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV LER,A
MOV LC,#00H
COMMAND_T0_CPU2:
MOV DPH,R6
MOV DPL,R7
MOV R3,#4
MOV RETNUM,#00H
COMMAND_T0_CPU3:
MOVX A,@DPTR
LCALL SENDCPU_BYTE
LCALL DELAY_CPU
INC DPTR
DJNZ R3,COMMAND_T0_CPU3
MOVX A,@DPTR
LCALL SENDCPU_BYTE
MOV A,INS
CJNE A,#46H,COMMAND_T0_CPU30
MOV R3,#0FFH
SJMP COMMAND_T0_CPU4
COMMAND_T0_CPU30:
MOV R3,#040H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
COMMAND_T0_CPU4:
LCALL RECEIVECPU_BYTE
JC COMMAND_T0_CPU4ADD
LJMP COMMAND_T0_CPU14 ;接收过程字节失败则跳转到COMMAND_T0_CPU14
COMMAND_T0_CPU4ADD:
CJNE A,#60H,COMMAND_T0_CPU5
LJMP COMMAND_T0_CPU4 ;过程字节=0X60 提供额外的工作等待时间且等待接收另外的过程字节
COMMAND_T0_CPU5:
CJNE A,INS,COMMAND_T0_CPU10
MOV A,LC
JZ COMMAND_T0_CPU8 ;lc=0 or not dicide whether receive or send
COMMAND_T0_CPU6:
MOV A,#05H
ADD A,R7
MOV DPL,A
MOV A,#00H
ADDC A,R6
MOV DPH,A
LCALL DELAY_CPU ;;;;;;;;;;;;;;;;;;;;;;;;;;;
DEC LC
MOV A,LC
JZ COMMAND_T0_CPU70
COMMAND_T0_CPU7:
MOVX A,@DPTR
LCALL SENDCPU_BYTE
LCALL DELAY_CPU
INC DPTR
DJNZ LC,COMMAND_T0_CPU7
COMMAND_T0_CPU70:
MOVX A,@DPTR
LCALL SENDCPU_BYTE
LJMP COMMAND_T0_CPU4
COMMAND_T0_CPU8:
;POP DPL
;POP DPH
MOV DPH,DPHBAK
MOV DPL,DPLBAK
INC LER
INC LER
COMMAND_T0_CPU9:
LCALL RECEIVECPU_BYTE
JNC COMMAND_T0_CPU14
MOV R4,LER
CJNE R4,#2H,COMMAND_T0_CPU9ADD1
CJNE A,#60H,COMMAND_T0_CPU9ADD0
LJMP COMMAND_T0_CPU9
COMMAND_T0_CPU9ADD0:
CJNE A,INS,COMMAND_T0_CPU9ADD1
LJMP COMMAND_T0_CPU9
COMMAND_T0_CPU9ADD1:
MOVX @DPTR,A
INC DPTR
INC RETNUM
DJNZ LER,COMMAND_T0_CPU9
MOV A,RETNUM
MOV R7,A
RET
COMMAND_T0_CPU10:
CJNE A,#61H,COMMAND_T0_CPU11
LCALL RECEIVECPU_BYTE
JNC COMMAND_T0_CPU14
MOV B,A
LCALL DELAY_CPU
MOV DPH,R6
MOV DPL,R7
MOV A,#00H
MOVX @DPTR,A
INC DPTR
MOV A,#0C0H
MOVX @DPTR,A
INC DPTR
MOV A,#00H
MOVX @DPTR,A
INC DPTR
MOV A,#00H
MOVX @DPTR,A
INC DPTR
MOV A,B
MOVX @DPTR,A
MOV R5,#05H
LJMP COMMAND_T0_CPU
COMMAND_T0_CPU14:
;POP DPL
;POP DPH
MOV R7,#00H
RET
COMMAND_T0_CPU11:
CJNE A,#6CH,COMMAND_T0_CPUINSBU
LCALL RECEIVECPU_BYTE
JNC COMMAND_T0_CPU14
MOV B,A
MOV A,#04H
ADD A,R7
MOV DPL,A
MOV A,#00H
ADDC A,R6
MOV DPH,A
MOV A,B
MOVX @DPTR,A
LCALL DELAY_CPU
LJMP COMMAND_T0_CPU
COMMAND_T0_CPUINSBU:
CJNE A,INSBU,COMMAND_T0_CPU12
MOV A,LC ;过程字节=INS的补码
JZ COMMAND_T0_CPU8BU ;lc=0 or not dicide whether receive or send
COMMAND_T0_CPU6BU: ;LC!=0
MOV A,#05H
ADD A,OFFSET
INC OFFSET
ADD A,R7
MOV DPL,A
MOV A,#00H
ADDC A,R6
MOV DPH,A ;计算出P3中DATA缓冲区的首地址
LCALL DELAY_CPU
MOVX A,@DPTR
LCALL SENDCPU_BYTE
LCALL DELAY_CPU
DEC LC
MOV A,LC
SETB INS_BUBIT ;接收到补码且APDU命令后中有数据
JZ COMMAND_T0_CPU9BU ;发送完P3中DATA后跳转到接收SW1SW2
LJMP COMMAND_T0_CPU4 ;没有发送完P3中DATA继续接收过程字节
COMMAND_T0_CPU8BU: ;LC=0 过程字节=/INS
;POP DPL
;POP DPH
CLR INS_BUBIT ;接收到补码且APDU命令后中有数据
MOV DPH,DPHBAK
MOV DPL,DPLBAK
LCALL RECEIVECPU_BYTE
JNC COMMAND_T0_CPU14 ;超时退出
MOVX @DPTR,A
INC DPTR
MOV DPHBAK,DPH
MOV DPLBAK,DPL
INC RETNUM
;PUSH DPH
;PUSH DPL
DJNZ LER,COMMAND_T0_CPU8BUTIAO;接收一个IC卡返回字节,然后再次接收过程字节
COMMAND_T0_CPU9BU: ;接收SW1SW2
JNB INS_BUBIT,COMMAND_T0_CPU9BUADD
MOV DPH,DPHBUBAK
MOV DPL,DPLBUBAK
COMMAND_T0_CPU9BUADD: ;接收SW1SW2
LCALL RECEIVECPU_BYTE
JNC COMMAND_T0_CPU14 ;超时退出
MOVX @DPTR,A
INC DPTR
INC RETNUM
LCALL RECEIVECPU_BYTE
JNC COMMAND_T0_CPU14 ;超时退出
MOVX @DPTR,A
INC DPTR
INC RETNUM
MOV A,RETNUM
MOV R7,A
RET
COMMAND_T0_CPU8BUTIAO:
LJMP COMMAND_T0_CPU4
COMMAND_T0_CPU12:
;POP DPL
;POP DPH
MOV DPH,DPHBAK
MOV DPL,DPLBAK
MOVX @DPTR,A
INC DPTR
INC RETNUM
LCALL RECEIVECPU_BYTE
JC COMMAND_T0_CPU12TIAO
LJMP COMMAND_T0_CPU14
COMMAND_T0_CPU12TIAO:
MOVX @DPTR,A
INC RETNUM
MOV A,RETNUM
MOV R7,A
RET
;****************************************************************************
;uchar commandt1_cpu(uint buffer,uchar len,uchar *retbuff)
; R6,R7 R5 R3,R2,R1
;****************************************************************************
_COMMAND_T1_CPU:
MOV DPH,R6
MOV DPL,R7
INC DPTR
MOVX A,@DPTR
MOV INS,A
CJNE A,#46H,COMMAND_T1_CPU1
MOV R3,#30
LJMP COMMAND_T1_CPU3
COMMAND_T1_CPU1:
CJNE A,#0EH,COMMAND_T1_CPU2
MOV R3,#30
LJMP COMMAND_T1_CPU3
COMMAND_T1_CPU2:
MOV R3,#1
COMMAND_T1_CPU3:
MOV B,#00H
JB PCB_CPU,COMMAND_T1_CPU4
SETB PCB_CPU
MOV A,#00H
PUSH ACC
XRL A,B
MOV B,A
POP ACC
LCALL SENDCPU_BYTE
LCALL DELAY_CPU
MOV A,#00H
PUSH ACC
XRL A,B
MOV B,A
POP ACC
LCALL SENDCPU_BYTE
LCALL DELAY_CPU
LJMP COMMAND_T1_CPU5
COMMAND_T1_CPU4:
CLR PCB_CPU
MOV A,#00H
PUSH ACC
XRL A,B
MOV B,A
POP ACC
LCALL SENDCPU_BYTE
LCALL DELAY_CPU
MOV A,#40H
PUSH ACC
XRL A,B
MOV B,A
POP ACC
LCALL SENDCPU_BYTE
LCALL DELAY_CPU
COMMAND_T1_CPU5:
MOV A,R5
PUSH ACC
XRL A,B
MOV B,A
POP ACC
LCALL SENDCPU_BYTE
LCALL DELAY_CPU
MOV DPH,R6
MOV DPL,R7
COMMAND_T1_CPU6:
MOVX A,@DPTR
PUSH ACC
XRL A,B
MOV B,A
POP ACC
LCALL SENDCPU_BYTE
LCALL DELAY_CPU
INC DPTR
DJNZ R5,COMMAND_T1_CPU6
MOV A,B
LCALL SENDCPU_BYTE
;RECEIVE_T1_CPU
MOV R7,#00H
MOV B,#00H
MOV DPH,R2
MOV DPL,R1
LCALL RECEIVECPU_BYTE
JNC COMMAND_T1_CPU8
MOV R3,#01H
INC R7
MOVX @DPTR,A
INC DPTR
LCALL RECEIVECPU_BYTE
JNC COMMAND_T1_CPU8
INC R7
MOVX @DPTR,A
INC DPTR
LCALL RECEIVECPU_BYTE
JNC COMMAND_T1_CPU8
INC R7
MOVX @DPTR,A
INC DPTR
JZ COMMAND_T1_CPU7
MOV R4,A
COMMAND_T1_CPU7:
LCALL RECEIVECPU_BYTE
JNC COMMAND_T1_CPU8
INC R7
MOVX @DPTR,A
INC DPTR
DJNZ R4,COMMAND_T1_CPU7
COMMAND_T1_CPU70:
LCALL RECEIVECPU_BYTE
JNC COMMAND_T1_CPU8
INC R7
MOVX @DPTR,A
COMMAND_T1_CPU8:
RET
;***************************************************************************;
;18432M-12 9600-160-74 19200-80-34 38400-40-14
RECEIVESAM_BYTEA:
DJNZ R1,RECEIVESAM_BYTED
JB SAM_IO,RECEIVESAM_BYTEB
LJMP RECEIVESAM_BYTE1
RECEIVESAM_BYTEB:
DJNZ R2,RECEIVESAM_BYTED
JB SAM_IO,RECEIVESAM_BYTEC
LJMP RECEIVESAM_BYTE1
RECEIVESAM_BYTEC:
DJNZ R3,RECEIVESAM_BYTED
SETB SAM_IO
CLR C
RET
RECEIVESAM_BYTED:
JB SAM_IO,RECEIVESAM_BYTE0
LJMP RECEIVESAM_BYTE1
;start
RECEIVESAM_BYTE:
MOV VER_TIME,#04H
RECEIVESAM_BYTESTAR:
SETB SAM_IO
MOV R2,#00H
MOV R1,#00H
MOV R3BAK,R3
RECEIVESAM_BYTE0:
JB SAM_IO,RECEIVESAM_BYTEA ;START ;2
NOP ;1
NOP ;1
RECEIVESAM_BYTE1:
NOP ;1
NOP ;1
NOP ;1
NOP ;1
NOP ;1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -