📄 f200asm.asm
字号:
NOP
NOP
NOP
NOP
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$
RRC A
SENDCPU_BYTE41:
MOV CPU_IO,C ;BIT4
JNB PROMISE_CPU,SENDCPU_BYTE5
NOP
NOP
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RLC A
CPL C
LJMP SENDCPU_BYTE51
SENDCPU_BYTE5:
NOP
NOP
NOP
NOP
NOP
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$
RRC A
SENDCPU_BYTE51:
MOV CPU_IO,C ;BIT5
JNB PROMISE_CPU,SENDCPU_BYTE6
NOP
NOP
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RLC A
CPL C
LJMP SENDCPU_BYTE61
SENDCPU_BYTE6:
NOP
NOP
NOP
NOP
NOP
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$
RRC A
SENDCPU_BYTE61:
MOV CPU_IO,C ;BIT6
JNB PROMISE_CPU,SENDCPU_BYTE7
NOP
NOP
MOV R0,BAND_DELAY_CPU
DJNZ R0,$
RLC A
CPL C
LJMP SENDCPU_BYTE71
SENDCPU_BYTE7:
NOP
NOP
NOP
NOP
NOP
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$
RRC A
SENDCPU_BYTE71:
MOV CPU_IO,C ;BIT7 ;2
NOP
NOP
NOP
NOP
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
POP ACC ;2
JB P,SENDCPU_BYTE8 ;2
CLR CPU_IO;PARITY ;2
SJMP SENDCPU_BYTE9 ;2
SENDCPU_BYTE8:
SETB CPU_IO;PARITY ;2
NOP
NOP
SENDCPU_BYTE9:
NOP
NOP
NOP
NOP
NOP
NOP
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;2
SETB CPU_IO;STOP ;2
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;3
JB CPU_IO,SENDCPU_BYTEOK ;4 11个ETU出判断接收方接收是否正确
DJNZ VER_TIME,SENDCPU_BYTEAGAIN ;重新发送数据最多3次
SENDCPU_BYTEAGAIN:
MOV R0,BAND_DELAY_CPU ;2 检测出错误后延迟3个ETU后重新发送数据
DJNZ R0,$ ;3
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;3
MOV R0,BAND_DELAY_CPU ;2
DJNZ R0,$ ;3
LJMP SENDCPU_BYTESTAR
SENDCPU_BYTEOK:
RET
;****************************************************************************
POWER_ON_CPU:
SETB CPU_IO
SETB OFF_CPU
MOV A,ICCARD_BAK
ORL A,#(CARD_CV+CPU_CMDVCC+CPU_CS)
MOV B,A
MOV A,#CPU_RESET
CPL A
ANL A,B
MOV ICCARD_BAK,A
MOV DPTR,#ADDR_ICCARD_BAK
MOVX @DPTR,A
MOV B,A
MOV A,#CPU_CMDVCC
CPL A
ANL A,B
MOV ICCARD_BAK,A
MOVX @DPTR,A
MOV R0,#50
DJNZ R0,$
JB OFF_CPU,POWER_ON_CPU1
MOV A,#00H
RET
POWER_ON_CPU1:
RET
;****************************************************************************
POWER_OFF_CPU:
SETB CPU_IO
SETB OFF_CPU
MOV A,ICCARD_BAK
ORL A,#CPU_CMDVCC
MOV B,A
MOV A,#(CPU_RESET+CPU_CS)
CPL A
ANL A,B
MOV ICCARD_BAK,A
MOV DPTR,#ADDR_ICCARD_BAK
MOVX @DPTR,A
RET
;****************************************************************************
CPU_REST_IO:
PUSH DPH
PUSH DPL
PUSH ACC
MOV A,ICCARD_BAK ;8004
MOV B,A
MOV A,#CPU_RESET
CPL A
ANL A,B
MOV ICCARD_BAK,A
MOV DPTR,#ADDR_ICCARD_BAK
MOVX @DPTR,A
MOV R0,#80H
DJNZ R0,$
MOV A,ICCARD_BAK
ORL A,#CPU_RESET
MOV ICCARD_BAK,A
MOV DPTR,#ADDR_ICCARD_BAK
MOVX @DPTR,A
; MOV A,ICCARD_BAK ;8002
; ORL A,#CPU_RESET
; MOV ICCARD_BAK,A
; MOV DPTR,#ADDR_ICCARD_BAK
; MOVX @DPTR,A
;
; MOV R0,#80H
; DJNZ R0,$
; MOV A,ICCARD_BAK
; MOV B,A
; MOV A,#CPU_RESET
; CPL A
; ANL A,B
; MOV ICCARD_BAK,A
; MOV DPTR,#ADDR_ICCARD_BAK
; MOVX @DPTR,A
POP ACC
POP DPL
POP DPH
RET
;;****************************************************************************
;****************************************************************************
_RESET_CPU: ;c=whether receive a byte returns by over time or in the right way
CLR EA
CLR RST_CPU
CLR ERR_RESET_CPU
MOV BAND_DELAY_CPU,#74
LCALL POWER_ON_CPU
JNZ RESET_CPU0 ;whether card is in
LCALL POWER_OFF_CPU
SETB EA
MOV R7,#0
RET
RESET_CPU_BAND:
MOV A,BAND_DELAY_CPU
CJNE A,#74,RESET_CPU_BAND1
MOV BAND_DELAY_CPU,#34
CLR PCB_CPU
MOV DPH,R5
MOV DPL,R6
MOV R4,#03H
LJMP RESET_CPU1
RESET_CPU_BAND1:
CJNE A,#34,RESET_CPU_BAND2
MOV BAND_DELAY_CPU,#14
CLR PCB_CPU
MOV DPH,R5
MOV DPL,R6
MOV R4,#03H
LJMP RESET_CPU1
RESET_CPU_BAND2:
SETB EA
MOV R7,#0
RET
RESET_CPU0:
MOV R0,#240
DJNZ R0,$
CLR PCB_CPU
MOV DPH,R2
MOV DPL,R1
MOV R5,DPH
MOV R6,DPL
MOV R4,#03H
RESET_CPU1:
MOV R3,#08H ;receiving over time
MOV R7,#0
CLR PROMISE_CPU
LCALL CPU_REST_IO
LCALL RECEIVECPU_BYTE
JNC RESET_CPU10 ;if over time ,jump
CJNE A,#3BH,RESET_CPU2
MOVX @DPTR,A
INC DPTR
INC R7
LJMP RESET_CPU3
RESET_CPU10:
LJMP RESET_CPU9
RESET_CPU2:
CJNE A,#3DH,RESET_CPU2ADD
SETB ERR_RESET_CPU
LJMP RESET_CPU_BAND2
RESET_CPU2ADD:
CJNE A,#03H,RESET_CPU_BAND
SETB PROMISE_CPU
MOV A,#3FH
MOVX @DPTR,A
INC DPTR
INC R7
RESET_CPU3:
LCALL RECEIVECPU_BYTE
JNC RESET_CPU10
MOVX @DPTR,A
MOV B,A
INC DPTR
INC R7
ANL A,#0FH ;retnum=history bytes
MOV RETNUM,A
MOV A,B;;;;;;;;;;;;;;;;;;;;;;;;;;;;
JNB ACC.4,RESET_CPU4
LCALL RECEIVECPU_BYTE
JNC RESET_CPU10
MOVX @DPTR,A
INC DPTR
INC R7
RESET_CPU4:
MOV A,B
JNB ACC.5,RESET_CPU5
LCALL RECEIVECPU_BYTE
JC RESET_CPU4ADD
LJMP RESET_CPU9
RESET_CPU4ADD:
MOVX @DPTR,A
INC DPTR
INC R7
RESET_CPU5:
MOV A,B
JNB ACC.6,RESET_CPU6
LCALL RECEIVECPU_BYTE
JC RESET_CPU5ADD
LJMP RESET_CPU9
RESET_CPU5ADD:
MOVX @DPTR,A
CJNE A,#0FFH,JUDGE_TC1 ;if TC1==0xff TC1=0 change by ycl
CLR A
JUDGE_TC1:
MOV PROTECT_TIME_CPU,A
INC DPTR
INC R7
RESET_CPU6:
MOV A,B
JNB ACC.7,RESET_CPU7
LCALL RECEIVECPU_BYTE
JC RESET_CPU6ADD
LJMP RESET_CPU9
RESET_CPU6ADD:
MOVX @DPTR,A
MOV B,A
INC DPTR
INC R7
ANL A,#0FH
JZ RESET_CPU6ADD1
SETB PROTOCOL_CPU
LJMP RESET_CPU6ADD2
RESET_CPU6ADD1:
CLR PROTOCOL_CPU
RESET_CPU6ADD2:
MOV A,B;;;;;;;;;;;;;;;;;;;;;
JNB ACC.4,RESET_CPU61
LCALL RECEIVECPU_BYTE
JNC RESET_CPU9
MOVX @DPTR,A
INC DPTR
INC R7
RESET_CPU61:
JNB ACC.5,RESET_CPU62
LCALL RECEIVECPU_BYTE
JNC RESET_CPU9
MOVX @DPTR,A
INC DPTR
INC R7
RESET_CPU62:
JNB ACC.6,RESET_CPU63
LCALL RECEIVECPU_BYTE
JNC RESET_CPU9
MOVX @DPTR,A
INC DPTR
INC R7
RESET_CPU63:
JNB ACC.7,RESET_CPU8;;;;;;;;;;;;;;;;;;
LCALL RECEIVECPU_BYTE
JNC RESET_CPU9
MOVX @DPTR,A
INC DPTR
INC R7
ANL A,#0FH
JZ RESET_CPU7
SETB PROTOCOL_CPU
LJMP RESET_CPU8
RESET_CPU7:
CLR PROTOCOL_CPU
RESET_CPU8:
MOV A,RETNUM
CJNE A,#00H,RESET_CPU8ADD ;判断是否有历史字节
LJMP RESET_CPU8ADD1 ;无历史字节
RESET_CPU8ADD:
LCALL RECEIVECPU_BYTE ;有历史字节并接收
JNC RESET_CPU9
MOVX @DPTR,A
INC DPTR
INC R7
DJNZ RETNUM, RESET_CPU8
RESET_CPU8ADD1:
JNB PROTOCOL_CPU, RESET_CPU80
LCALL RECEIVECPU_BYTE ;LRC jiao yan he
JC RESET_CPU8ADD2
CLR OK_RESET_CPU ;T=1的时候未传送TCK则表示复位失败
MOV R0,#0FFH
LJMP RESET_CPU_DELAY
RESET_CPU8ADD2: ;成功接收了TCK
MOVX @DPTR,A
INC DPTR
INC R7
LJMP RESET_CPUOK
RESET_CPU80:
LCALL RECEIVECPU_BYTE ;判断是否在T=0的时候传送TCK
JNC RESET_CPUOK
CLR OK_RESET_CPU ;T=0的时候传送了TCK则表示复位失败
MOV R0,#0FFH
LJMP RESET_CPU_DELAY
RESET_CPUOK:
SETB RST_CPU
SETB OK_RESET_CPU ;T=0的时候不传送TCK则表示复位成功
MOV R0,#0FFH
RESET_CPU_DELAY:
MOV R1,#00H
DJNZ R1,$
DJNZ R0,RESET_CPU_DELAY
SETB EA
RET ;the right way return
RESET_CPU9:
DJNZ R4,RESET_CPU90
SETB EA
RET ;over time return
RESET_CPU90:
MOV BAND_DELAY_CPU,#74
CLR PCB_SAM
MOV DPH,R5
MOV DPL,R6
LJMP RESET_CPU1 ;there are three times to reset
;****************************************************************************
;uchar commandt0_cpu(uint buffer,uchar len,uchar *retbuff)
; R6,R7 R5 R3,R2,R1
;****************************************************************************
_COMMAND_T0_CPU:
MOV DPH,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -