导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→硬件:有那位大虾用过IC卡SLE4442,请多多指点指点。[dirty]

 *第7172篇: 硬件:有那位大虾用过IC卡SLE4442,请多多指点指点。

  
楼 主:dirty 2002年12月23日12:09
 硬件:有那位大虾用过IC卡SLE4442,请多多指点指点。
您好!
    我现在正在搞一个项目,其中一个部分使用了IC卡SLE4442。由于对SLE4442的操作过不
太了解,导致本人已苦苦思索了几天却丝毫没有进展。有那位大虾能雪中送炭?下面是本人
思索尝试的程序:本人不知是写入错,还是读出错。有那位大虾能提供详细操作过程说明书
和用汇编例程。我的E-MAIL:zhweli@21cn.com
  
2楼:zhucheng 2002年12月23日20:42
 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

  
3楼:zhucheng 2002年12月23日20:42
 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

  
4楼:qiaoqiang 2006年8月12日10:51
 最基礎的地方就有問題
看了下你的 rst 子程序就寫的有問題

我找了一個,看看

   讀 I/0 口時,,該這樣

     SETB    CLK
       SETB    IO
       NOP
       NOP
       MOV     C,IO
       RRC      A
       DELAY5us
       CLR      CLK


>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:硬件:请教大虾问题

[下一篇主题]:闲聊:这个BBS论坛的源代码哪里有得下载?我也想做一个,谢谢!