📄 ic4442t.asm
字号:
ICSDA BIT p1.1
ICSCL BIT p1.4
ICRST BIT p1.5
ICPWR BIT p1.6
ICINT BIT P1.7
ICPGM BIT P1.2
SCK BIT P1.6
SDA BIT P1.7
FLAG BIT 60H
;------------------------------
;ic card
SFG EQU 37H ;security code flag
DFG EQU 38H ;card damage flag
CBUF EQU 08H ;(TEMP)commond buffer 08h-0Ch bytes
MBUF EQU 0dH ;(TEMP) 0Dh-11H 存放卡效验结果和密码4字节
;CBUF EQU 39H ;commond buffer 39h-3fh bytes
;MBUF EQU 50H ;data buffer 40h-50H USED IN TEST SC
;---------------------------
FLAG1 EQU 7FH ;flag1.0--insert ic card (1)
;flag1.1--is delivering gas
;flag1.2--state in delivering data to printer and lcd
;flag1.3--ic sc is wrong (1)
;flag1.4--no volume in card (1)
;flag1.5--not write volume to card (1)
;---------------------------------------------------------------------
ORG 0000H
JMP START
ORG 0030H
START:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV SP,#60H
LCALL CLOSE_IC
MOV FLAG1,#00H
LCALL DELAY_10 ;500uS
VOL_SYS:
LCALL OPEN_IC
LCALL CARDCHECK ;CHECK IC SC
SJMP $
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DELAY: MOV R7,#80 ;80*250*2=40ms
MOV R6,#0F0H
DELAY2: DJNZ R6,DELAY2
MOV R6,#0F0H
DJNZ R7,DELAY2
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
DELAY_10:MOV R7,#0F0H ;500us
DELAY1: DJNZ R7,DELAY1
ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;ic-card
CLOSE_IC:
setb ICPWR ;close power of ic card
NOP
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OPEN_IC:
clr ICPWR
NOP
NOP
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CARDCHECK:
MOV R5, #0b6H ;0b6h
MOV R6, #023H ;23h
MOV R7, #07H ;07h
LCALL SCHK_42_SC
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READ_sc:
lcall reset_42
MOV R0,#CBUF
MOV @R0,#31H
INC R0
MOV @R0,#0ffh ;A
INC R0
MOV @R0,#0FFH
LCALL COM_42
push 05h
mov r5,#04h
mov r0,#mbuf
rd_sc1:
LCALL BRD_42
mov @r0,a
inc r0
djnz r5,rd_sc1
pop 05h
RET
;***************************
;WRITE A BYTE IN 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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;check sect of 4442
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SCHK_42_SC:
LCALL RESET_42
LCALL CHK_42CN
MOV R0,#MBUF
MOV A,@R0
INC R0
JNZ SCHK_42_SC1
LJMP SCHK_42_SC6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SCHK_42_SC1:
JBC ACC.0,SCHK_42_SC2
JBC ACC.1,SCHK_42_SC2
CLR A
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
ANL A,#07H
JNZ SCHK_42_SC7
SCHK_42_SC6:
MOV SFG,#0FFH
MOV DFG,#0FFH
ORL FLAG1,#08H
LCALL CLOSE_IC
LJMP SCHK_42_SC9
SCHK_42_SC7:
ORL A,#0F8H
INC A
JZ SCHK_42_SC8
MOV SFG,#0FFH
MOV DFG,#00H
ORL FLAG1,#08H
LCALL CLOSE_IC
LJMP SCHK_42_SC9
SCHK_42_SC8:
MOV SFG,#00H
MOV DFG,#00H
ANL FLAG1,#0F7H
SCHK_42_SC9:
LCALL INTERR42
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
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
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BEGIN42: CLR ICSCL
LCALL DELAY_20
SETB ICSDA
NOP
NOP
NOP
SETB ICSCL
NOP
NOP
NOP
CLR ICSDA
NOP
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END_42: CLR ICSCL
NOP
NOP
CLR ICSDA
NOP
NOP
NOP
SETB ICSCL
NOP
NOP
NOP
SETB ICSDA
NOP
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BRD_42:
MOV R4,#08H
BRD_421:
CLR ICSCL
LCALL DELAY_20
SETB ICSDA
LCALL DELAY_20
SETB ICSCL
MOV C,ICSDA
RRC A
LCALL DELAY_20
DJNZ R4,BRD_421
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BWR_42:
MOV R4,#00H
BWR_421:
setb ICSCL
LCALL DELAY_20
clr ICSCL
LCALL DELAY_20
DJNZ R4,BWR_421
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTERR42:
CLR ICSCL
NOP
NOP
CLR ICRST
NOP
NOP
CLR ICSDA
LCALL DELAY_20
SETB ICRST
LCALL DELAY_20
SETB ICSDA
LCALL DELAY_20
CLR ICRST
LCALL DELAY_20
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY_20:
MOV R3,#09h
DELAY_201:
DJNZ R3,DELAY_201
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -