sle4442子程序-2
;***********************
;
;NAME: rdpm
;DESCRIPTION: READ IC PROTECTION MEMORY
;CALL:
;INPUT: NONE
;OUTPUT:RO=FIRST ADDRESS TO STORE PROTECTION MEMTORY
;REGISTER USAGE:R3,R6
;
;***********************
rdpm:
MOV A,R0
MOV R3,A
MOV R0,#20H
MOV @R0,#RPM
INC R0
MOV @R0,#00H
INC R0
MOV @R0,#00H
MOV R0,#20H
LCALL command
MOV A,R3
MOV R0,A
MOV R1,#04H
LCALL readdata
MOV R6,#04H
DEC R0
loop: MOV A,@R0
PUSH 20H
MOV 20H,A
MOV C,00H
RLC A
MOV C,01H
RLC A
MOV C,02H
RLC A
MOV C,03H
RLC A
MOV C,04H
RLC A
MOV C,05H
RLC A
MOV C,06H
RLC A
MOV C,07H
RLC A
POP 20H
MOV @R0,A
DEC R0
DJNZ R6,loop
RET
;***********************
;
;NAME: rdsm
;DESCRIPTION: READ SECURITY MEMORY
;CALL:command,readdata
;INPUT: R0=ADDRESS OF STORE ERROR COUNTER
; @(R0+1)=REFERENCE DATA BYTE1
; @(R0+2)=REFERENCE DATA BYTE2
; @(R0+3)=REFERENCE DATA BYTE3
;OUTPUT:
;REGISTER USAGE:R0,R1
;
;***********************
rdsm:
MOV ACC,R0
PUSH ACC
MOV R0,#20H
MOV @R0,#RSM
INC R0
MOV @R0,#00H
INC R0
MOV @R0,#00H
MOV R0,#20H
LCALL command
POP ACC
MOV R0,ACC
MOV R1,#04H
LCALL readdata
RET
;***********************
;
;NAME: cpvd
;DESCRIPTION: COMPARE VERIFICATION DATA
;CALL:command,delay
;INPUT: @R0=REFERENCE DATA BYTE1
; @(R0+1)=REFERENCE DATA BYTE2
; @(R0+2)=REFERENCE DATA BYTE3
;OUTPUT:
;REGISTER USAGE:R3,R4,R5,R6
;
;***********************
cpvd:
MOV R4,#03H
MOV R5,#01H
MOV A,R0
MOV R3,A
cploop:
MOV R0,#20H
MOV @R0,#CVD
INC R0
MOV A,R5
MOV @R0,A
INC R0
MOV A,R3
MOV R1,A
MOV A,@R1
MOV @R0,A
MOV R0,#20H
LCALL command
CLR CLK
LCALL delay
SETB CLK
LCALL delay
CLR CLK
LCALL delay
SETB CLK
LCALL delay
CLR CLK
LCALL delay
SETB CLK
LCALL delay
CLR CLK
LCALL delay
INC R5
INC R3
DJNZ R4,cploop
RET
;***********************
;
;NAME: wtec
;DESCRIPTION: WRITE ERROR COUNTER
;CALL:command,delay
;INPUT: R0=NEW ERROR COUNTER
;OUTPUT:
;REGISTER USAGE:R1
;
;***********************
wtec:
MOV ACC,R0
PUSH ACC
MOV R0,#20H
MOV @R0,#WSM
INC R0
MOV @R0,#00H
INC R0
POP ACC
MOV @R0,ACC
MOV R0,#20H
LCALL command
CLR CLK
LCALL delay
MOV R1,#0FEH
wtloop:
SETB CLK
LCALL delay
CLR CLK
LCALL delay
DJNZ R1,wtloop
RET
;******************************
;
;NAME: cgrd
;DESCRIPTION: CHANGE REFERENCE DATA
;CALL:command,delay
;INPUT: R0=ADDRESS OF 1st REFERENCE BYTE
; @(R0+1)=2nd REFERENCE BYTE
; @(R0+2)=3rd REFERENCE BYTE
;OUTPUT:NONE
;REGISTER USAGE:A,R1,R3,R4,R5
;
;******************************
cgrd:
MOV A,R0
MOV R1,A
MOV R3,#03H
MOV R4,#01H
cgbyte:
MOV R0,#20H
MOV @R0,#WSM
INC R0
MOV A,R4
MOV @R0,A
INC R0
MOV A,@R1
MOV @R0,A
MOV R0,#20H
MOV ACC,R1
PUSH ACC
LCALL command
POP ACC
MOV R1,ACC
CLR CLK
LCALL delay
MOV R5,#0FEH
cgloop:
SETB CLK
LCALL delay
CLR CLK
LCALL delay
DJNZ R5,cgloop
INC R4
INC R1
DJNZ R3,cgbyte
RET
;******************************
;
;NAME: wtmm
;DESCRIPTION: WRITE MAIN MEMORY
;CALL:command,delay
;INPUT: R0=DATA TO BE WRITTEN
; R1=ADDRESS TO WRITE IN IC CARD
;OUTPUT:NONE
;REGISTER USAGE:R5
;
;******************************
wtmm:
MOV ACC,R0
PUSH ACC
MOV R0,#20H
MOV @R0,#WMM
INC R0
MOV A,R1
MOV @R0,A
INC R0
POP ACC
MOV @R0,A
MOV R0,#20H
LCALL command
CLR CLK
LCALL delay
CLR IO
LCALL delay
MOV R5,#0FFH
wmmloop:
SETB CLK
LCALL delay
CLR CLK
LCALL delay
DJNZ R5,wmmloop
RET
;******************************
;
;NAME: wtpm
;DESCRIPTION: WRITE MAIN MEMORY
;CALL:command,delay,wtmm
;INPUT: R0=DATA TO BE WRITTEN
; R1=ADDRESS TO WRITE IN IC CARD
;OUTPUT:NONE
;REGISTER USAGE:R5
;
;******************************
wtpm:
MOV ACC,R0
PUSH ACC
MOV ACC,R1
PUSH ACC
LCALL wtmm
POP ACC
MOV R1,ACC
POP ACC
MOV R0,ACC
MOV ACC,R0
PUSH ACC
MOV R0,#20H
MOV @R0,#WPM
INC R0
MOV A,R1
MOV @R0,A
INC R0
POP ACC
MOV @R0,A
MOV R0,#20H
LCALL command
CLR CLK
LCALL delay
CLR IO
LCALL delay
MOV R5,#0FFH
wpmloop:
SETB CLK
LCALL delay
CLR CLK
LCALL delay
DJNZ R5,wpmloop
RET
;******************************
;
;NAME: command
;DESCRIPTION: SEND A COMMAND TO IC
;CALL:delay
;INPUT: R0=ADDRESS OF CONTROL BYTE
; @(R0+1)=ADDRESS BYTE
; @(R0+2)=DATA BYTE
;OUTPUT:NONE
;REGISTER USAGE:A,R1,R2
;
;******************************
command:
SETB IO
SETB CLK
LCALL delay
CLR IO
LCALL delay
CLR CLK
MOV R1,#03H
outbyte:
MOV A,@R0
MOV R2,#08H
outbit:
RRC A
MOV IO,C
LCALL delay
SETB CLK
LCALL delay
CLR CLK
DJNZ R2,outbit
INC R0
DJNZ R1,outbyte
LCALL delay
CLR IO
LCALL delay
SETB CLK
LCALL delay
SETB IO
LCALL delay
RET
;******************************
;
;NAME: readdata
;DESCRIPTION: READ DATA FROM IC
;CALL:delay
;INPUT: R0=ADDRESS OF STORE DATA
; R1=LENTH OF OUTPUT DATA
;OUTPUT:NONE
;REGISTER USAGE:A,R2
;
;******************************
readdata:
inputbyte:
MOV R2,#08H
inputbit:
CLR CLK
LCALL delay
SETB CLK
MOV C,IO
RRC A
LCALL delay
DJNZ R2,inputbit
MOV @R0,A
INC R0
DJNZ R1,inputbyte
CLR CLK
LCALL delay
SETB CLK
LCALL delay
CLR CLK
LCALL delay
RET
;******************************
;NAME: delay
;DESCRIPTION: DELAY 10uS
;CALL:NONE
;INPUT: NONE
;OUTPUT:NONE
;REGISTER USAGE:R7
;*****************************
delay:
MOV R7,#04H
DJNZ R7,$
RET
;*****************************
END
发表时间:2002年12月23日20:42:00