sle4442子程序-1
;SLE4442
;CPU: 89c52
;JILIN CENTEK 2001-12-24
;SLE4442 COMMANDS
; 1.READ MAIN MEMORY
; 2.READ PROTECTION MEMORY
; 3.READ ERROR COUNTER
; 4.READ REFERENCE DATA
; 5.RST
; 6.COMPARE VERIFICATION DATA
; 7.WRITE MAIN MEMORY
; 8.WRITE PROTECTTION MEMORY
; 9.WRITE ERROR COUNTER
; 10.CHANGE REFERENCE DATA
;********CONSTANTS******
;
RST BIT P1.4
CLK BIT P1.6
IO BIT P1.5
RMM EQU 30H
RPM EQU 34H
RSM EQU 31H
CVD EQU 33H
WMM EQU 38H
WPM EQU 3CH
WSM EQU 39H
;
;***********************
ORG 0000H
LJMP main
ORG 0100H
main:
MOV SP,#0D0H
CLR P2.7
CLR RST
CLR CLK
MOV R0,#30H ;RESET DATA STORE
IN ADDRESS:30 31 32 33
MOV 30H,#0FFH
LCALL reset ;RESET
MOV R0,#50H ;FIRST ADDRESS TO
STORE PROTECTION MEMORY
LCALL rdpm
MOV R0,#40H ;FIRST ADDRESS TO
STORE MAIN MEMORY
MOV R1,#1AH ;FIRST ADDRESS TO
READ IN IC CARD
MOV R2,#07H ;LENTH TO READ
LCALL rdmm
MOV R0,#58H ;ADDRESS TO STORE ERROR
COUNTER
LCALL rdsm
MOV R0,#06H ;WRITE 00000110B TO ERROR
COUNTER
LCALL wtec
MOV R0,#60H ;FIRST ADDRESS TO STORE
REFERENCE DATA
MOV @R0,#0FFH ;1ST REFERENCE DATA : FFH
INC R0
MOV @R0,#0FFH ;2ND REFERENCE DATA : FFH
INC R0
MOV @R0,#0FFH ;3RD REFERENCE DATA : FFH
MOV R0,#60H
LCALL cpvd
MOV R0,#07H ;WRITE 00000111B TO
ERROR COUNTER
LCALL wtec
MOV R0,#58H ;ADDRESS(58H) TO
STORE ERROR COUNTER
LCALL rdsm ;ADDRESS(59H) TO
STORE 1ST REFERENCE DATA
;ADDRESS(5AH) TO STORE 2ND
REFERENCE DATA
;ADDRESS(5BH) TO STORE 3RD
REFERENCE DATA
MOV A,58H
CJNE A,#07H,stop ;COMPARE ERROR GOTO
STOP
MOV R0,#4AH ;DATA TO BE WRITEN
MOV R1,#1BH ;ADDRESS TO BE
WRITEN IN IC CARD
LCALL wtmm
MOV R0,#48H ;FIRST ADDRESS TO STORE MAIN
MEMORY
MOV R1,#1FH ;FIRST ADDRESS TO
READ IN IC CARD
MOV R2,#01H ;LENTH TO READ
LCALL rdmm
; MOV R0,#68H ;ADDRESS(68H) TO
STORE NEW 1ST REFERENCE DATA
; MOV @R0,#12H ;NEW 1ST REFERENCE DATA : 12H
; INC R0 ;ADDRESS(69H) TO
STORE NEW 2ND REFERENCE DATA
; MOV @R0,#34H ;NEW 2ND REFERENCE DATA : 34H
; INC R0 ;ADDRESS(6AH) TO
STORE NEW 3RD REFERENCE DATA
; MOV @R0,#56H ;NEW 3RD REFERENCE DATA : 56H
; MOV R0,#68H
; LCALL cgrd
;examine change
; MOV R0,#38H ;ADDRESS(58H) TO STORE ERROR
COUNTER
; LCALL rdsm ;ADDRESS(59H) TO
STORE 1ST REFERENCE DATA
;ADDRESS(5AH) TO STORE 2ND
REFERENCE DATA
;ADDRESS(5BH) TO STORE 3RD
REFERENCE DATA
MOV R0,#4BH ;DATA TO BE WRITEN
AND TO BE PROTECTED
MOV R1,#1FH ;ADDRESS TO BE
WRITEN IN IC CARD
LCALL wtpm
SETB P2.7
stop:
SJMP $
;***********************
;
;NAME: reset
;DESCRIPTION: RESET SLE4442
;CALL: delay
;INPUT: R0=START ADDRESS OF OUTGOING DATA
;OUTPUT:
;REGISTER USAGE:A,R1,R2
;
;***********************
reset:
CLR RST
CLR CLK
LCALL delay
SETB RST
SETB CLK
LCALL delay
CLR CLK
CLR RST
MOV R2,#04H
inbyte:
MOV R1,#08H
inbit:
LCALL delay
SETB CLK
MOV C,IO
RRC A
LCALL delay
CLR CLK
DJNZ R1,inbit
MOV @R0,A
INC R0
DJNZ R2,inbyte
RET
;***********************
;
;NAME: rdmm
;DESCRIPTION: READ IC MAIN MEMORY
;CALL:
;INPUT: R0=START ADDRESS OF STORE OUTGOING DATA
; R1=START ADDRESS (IC)TO READ
; R2=LENTH OF OUTGOING DATA
;OUTPUT:
;REGISTER USAGE:R1,R2,R3,R4,R5
;
;***********************
rdmm:
MOV A,R0
MOV R3,A
MOV A,R1
MOV R4,A
MOV A,R2
MOV R5,A
MOV R0,#20H
MOV @R0,#RMM
INC R0
MOV A,R4
MOV @R0,A
INC R0
MOV @R0,#00H
MOV R0,#20H
LCALL command
MOV A,R3
MOV R0,A
MOV A,R5
MOV R1,A
LCALL readdata
MOV R0,#30H
LCALL reset
RET
发表时间:2002年12月23日20:42:00