导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→sle4442子程序-2

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

   zhucheng 
zhucheng发表的帖子 

 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

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  96637.[详细]最基礎的地方就有問題
摘要:看了下你的 rst 子程序就寫的有問題  我找了一個,看看     讀 I/0 口時,,該這樣   ......(221字)
- [qiaoqiang][865次] 2006年8月12日

[上一篇帖子]:初学者:哪位能提供电冰箱中压缩机运行时间的控制
[下一篇帖子]:C51编程:如何编写音乐程序?各位老师:本人想编写8051音乐程序,却不知如何将一首歌编写成数字请各