📄 dt_card.asm
字号:
;*********************************************************************
;读卡---4406(入口条件;位数R7,卡地址CARD_ADDR, 出口条件;读出数据DATA_ADDR,R0)
;*********************************************************************
READ_PRO4436:
PUSH ACC
MOV A, R0
PUSH ACC
MOV A, R6
PUSH ACC
MOV A, R7
PUSH ACC
;*---------------RESET1--------------*
CLR RST_CARD
CLR CLK_CARD
NOP
SETB RST_CARD
NOP
SETB CLK_CARD
NOP
CLR CLK_CARD
NOP
CLR RST_CARD
;*---------------RESET2--------------*
CLR RST_CARD
CLR CLK_CARD
NOP
SETB RST_CARD
NOP
SETB CLK_CARD
NOP
CLR CLK_CARD
NOP
CLR RST_CARD
SETB SDA_CARD
NOP
MOV R0, #PHONE_RAM_ADDR
MOV R6,#32
READ13_DT:
MOV R7,#08H
MOV A,#00H
ONE_BYTE06_DT:
SETB CLK_CARD ;上升沿有效,取数据位
NOP
MOV C,SDA_CARD
RLC A ; 右移一位(高底位调换)
CLR CLK_CARD
NOP
DJNZ R7,ONE_BYTE06_DT ;到8位否?
MOV @R0,A
INC R0
DJNZ R6,READ13_DT ;读完13个字节?
MOV R0, #PHONE_RAM_ADDR
CJNE @R0, #91H, EXIT_READ4436
MOV R0, #JRM89_RAM_ADDR
MOV A, @R0
SWAP A
MOV @R0, A
MOV R1, #JRM89_RAM_ADDR + 1
MOV A, @R1
SWAP A
XCHD A, @R0
MOV @R1, A
INC R0
INC R1
MOV A, @R1
SWAP A
XCHD A, @R0
MOV @R1, A
INC R0
INC R1
MOV A, @R1
XCHD A, @R0
INC R0
INC R1
MOV A, @R1
MOV @R0, A
MOV @R1, #0FFH
MOV R0, #ZH89_RAM_ADDR + 5
MOV R1, #ZH89_RAM_ADDR_1
MOV R7, #ZH89_BYTES_1
MOVE_ZH_CONTI:
MOV A, @R1
MOV @R1, #0FFH
MOV @R0, A
INC R0
INC R1
DJNZ R7, MOVE_ZH_CONTI
MOV R0, #0FFH
MOV R1, #MM89_RAM_ADDR_1
MOV R0, #MM89_RAM_ADDR
MOV A, @R1
MOV @R0, A
INC R0
INC R1
MOV A, @R1
MOV @R0, A
INC R0
INC R1
MOV A, @R1
MOV @R0, A
EXIT_READ4436:
MOV R0, #JR_DIAL_ADDR ;手拨电话号码存储地址
MOV R7, #08H
CLEAN_JR_RAM:
MOV @R0, #0FFH
INC R0
DJNZ R7, CLEAN_JR_RAM
POP ACC
MOV R7, A
POP ACC
MOV R6, A
POP ACC
MOV R0, A
POP ACC
RET
;******************************************************************
;大唐卡定位
;R1:卡位置
;******************************************************************
DT_LOCATE: ;大唐卡定位
CLR CLK_CARD
CLR RST_CARD
NOP
SETB RST_CARD
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB CLK_CARD
NOP
CLR CLK_CARD
NOP
CLR RST_CARD
NOP ;复位结束后,SDA应为H
CJNE R1, #01H, ASDFGHJ
JMP EEEEXXXXIII
ASDFGHJ:
MOV A, R1
MOV B, #8
MUL AB
MOV R1, A
ADD_CLK_LOOP:
NOP
NOP
NOP
SETB CLK_CARD
NOP
NOP
NOP
CLR CLK_CARD
DJNZ R1, ADD_CLK_LOOP
EEEEXXXXIII:
RET
;******************************************************************
;大唐写卡
;R0:内存位置
;R1:卡位置
;R3:写字节数
;******************************************************************
WRITE_DT_CARD:
PUSH ACC
MOV A, R0
PUSH ACC
MOV A, R1
PUSH ACC
MOV A, R3
PUSH ACC
LCALL DT_LOCATE ;大唐卡定位
WRITE_DT_ONE_LOOP:
LCALL WRITE_DT_BYTE
INC R0
DJNZ R3, WRITE_DT_ONE_LOOP
POP ACC
MOV R3, A
POP ACC
MOV R1, A
POP ACC
MOV R0, A
POP ACC
RET
;******************************************************************
;大唐EREASE
;R0:内存位置
;R1:卡位置
;R3:写字节数
;******************************************************************
EREASE_DT_CARD:
PUSH ACC
MOV A, R0
PUSH ACC
MOV A, R1
PUSH ACC
MOV A, R3
PUSH ACC
LCALL DT_LOCATE ;大唐卡定位
EREASE_DT_ONE_LOOP:
LCALL EREASE_DT_BYTE
DJNZ R3, EREASE_DT_ONE_LOOP
POP ACC
MOV R3, A
POP ACC
MOV R1, A
POP ACC
MOV R0, A
POP ACC
RET
;******************************************************************
;R0:内存地址
;******************************************************************
WRITE_DT_BYTE:
MOV B, #8
MOV A, @R0
WRITE_DT_BYTE_LOOP:
RLC A
JC B_0_YN
LCALL DELAY10uS
SETB RST_CARD
LCALL DELAY10uS
CLR RST_CARD
LCALL DELAY10uS ;WRITE 0
SETB CLK_CARD
LCALL DELAY10MS
CLR CLK_CARD
LCALL DELAY10uS
B_0_YN:
LCALL CLK_CYCLE
DJNZ B,WRITE_DT_BYTE_LOOP
RET
;******************************************************************
;R0:内存地址
;******************************************************************
EREASE_DT_BYTE:
LCALL CLK_CYCLE
LCALL DELAY10uS ;RST
SETB RST_CARD
LCALL DELAY10uS
CLR RST_CARD
LCALL DELAY10uS ;WRITE 0
SETB CLK_CARD
LCALL DELAY10MS
CLR CLK_CARD
LCALL DELAY10uS ;RST
SETB RST_CARD
LCALL DELAY10uS
CLR RST_CARD
LCALL DELAY10uS ;EREASE 0
SETB CLK_CARD
LCALL DELAY10MS
CLR CLK_CARD
LCALL DELAY10uS
MOV B, #07H
ADD_7_CLK:
LCALL CLK_CYCLE
DJNZ B, ADD_7_CLK
RET
CLK_CYCLE:
SETB CLK_CARD ;上升沿有效,取数据位
LCALL DELAY10uS
CLR CLK_CARD
LCALL DELAY10uS
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -