⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqsle4442.txt

📁 IC卡智能卡
💻 TXT
📖 第 1 页 / 共 2 页
字号:
用【 小 | 中 | 大 】字体浏览 
C51编程:哪一位高手用过SLE4442 [单片机之友] [37次] 01-12-28 下午 05:25:00
最好能给出读写一个字节的源代码!
                      谢谢!


很久以前做好。好象是没问题。 [方塘] [37次] 01-12-28 下午 06:27:22 
;------------以下 IC 卡子程序--------------------
;------------------------------------------------
;读SLE/4442 IC卡操作软件清单
;入口: R3:   date address (32 --255)
;       R6:   date length  (223)
;出口:  MBUF: date buffer 
;------------------------------------------------
RDA_42:   LCALL  RESET_42     ;reset smart card
          MOV    R0,   #CBUF
          MOV    @R0,  #30H   ;First Byte  读命令 
          INC    R0
          MOV    A,    R3     ;
          INC    R3
          MOV    @R0,  A      ;second byte  地址
          INC    R0
          MOV    @R0,  #0FFH  ;third  byte  无影响
          LCALL  COM_42       ;send  command
          ;--------------------------------------
          MOV    R0,   #MBUF  ;出口
RDA_421:  LCALL  BR_42
          MOV    @R0,  A
          INC    R0
          DJNZ   R6,   RDA_421;counter is zero ?
          CLR    IC_CLK
          LCALL  Delay5uS
          SETB   IC_IO
          NOP
          SETB   IC_CLK
          LCALL  Delay5uS
          LCALL  INTERR_42    ;reset smart card
          RET
;------------------------------------------------
;读SLE/4442 IC卡保护位操作软件清单
;MBUF:   data buffer ( 4 byte)
;------------------------------------------------
RPB_42:   LCALL  RESET_42     ;reset smart card
          MOV    R0,   #CBUF
          MOV    @R0,  #34H   ;First  Byte 读保护区命令
          INC    R0
          MOV    @R0,  #0FFH  ;second byte 无影响
          INC    R0
          MOV    @R0,  #0FFH  ;third  byte 无影响
          LCALL  COM_42       ;send  command
          ;--------------------------------------
          MOV    R0,   #MBUF
          MOV    R6,   #04H   ;receive data length
RPB_421:  LCALL  BR_42
          MOV    @R0,  A
          INC    R0
          DJNZ   R6,   RPB_421;counter is zero ?
          CLR    IC_CLK
          LCALL  Delay5uS
          SETB   IC_IO
          NOP
          SETB   IC_CLK
          LCALL  Delay5uS
          LCALL  INTERR_42    ;reset smart card
          RET
;------------------------------------------------
;写SLE/4442 IC卡操作软件清单
;R3: date address (32 -- 255)
;R6: date length  (223byte)
;MBUF: date buffer
;------------------------------------------------
WDA_42:   LCALL  RESET_42     ;reset smart card
          MOV    R1,   #MBUF  ;data  pointer
WDA_421:  MOV    R0,   #CBUF
          MOV    @R0,  #38H   ;First Byte  写命令
          INC    R0
          MOV    A,    R3
          INC    R3
          MOV    @R0,  A      ;second byte 地址
          INC    R0
          MOV    A,    @R1    
          INC    R1
          MOV    @R0,  A      ;third  byte 输入数据
          INC    R0
          LCALL  COM_42       ;Send  command
          ;--------------------------------------
          LCALL  BW_42        ;write process
          DJNZ   R6,   WDA_421;counter is zero ?
          LCALL  INTERR_42
          RET
;------------------------(1)-------------


(2) [方塘] [39次] 01-12-28 下午 06:29:18 
;------------------------------------------------
;写SLE/4442 IC卡保护字节操作软件清单
;R3:   date address  (0 -- 31)
;R6:   date length   (32)
;MBUF: date buffer
;------------------------------------------------
WPB_42:   LCALL  RESET_42     ;reset smart card
          MOV    R1,   #MBUF  ;data  pointer
WPB_421:  MOV    R0,   #CBUF
          MOV    @R0,  #3CH   ;First Byte  写保护区命令
          INC    R0
          MOV    A,    R3
          INC    R3
          MOV    @R0,  A      ;second byte 地址
          INC    R0
          MOV    A,    @R1    
          INC    R1
          MOV    @R0,  A      ;third  byte 输入数据
          INC    R0
          LCALL  COM_42       ;Send  command
          ;--------------------------------------
          LCALL  BW_42        ;write process
          DJNZ   R6,   WPB_421;counter is zero ?
          LCALL  INTERR_42    ;reset smart card
          RET
;------------------------------------------------
;核对SLE/4442 IC卡密码操作软件清单
;入口:R1:   security(high   byte)
;      R2:   security(medium byte)
;      R3:   security(low    byte)
;出口:SFG=0FFH  DFG=0FFH Card damage
;      SFG=0FFH  DFG=00H  Check error
;      SFG=00H   DFG=00H  Check ok
;------------------------------------------------
CHKSC_42: CLR    2FH.0
          CLR    2FH.1
          LCALL  RESET_42     ;reset smart card
          LCALL  RSC_42       ;read SLE4442 SCEC 出口 #MBUF
          MOV    R0,   #MBUF  ;EC  pointer
          MOV    A,    @R0    ;get security error counter EC
          JNZ    CHKSC_421    ;card damage ?
          LJMP   CHKSC_426
CHKSC_421:JBC    ACC.2,CHKSC_422 ;Acc.2
          JBC    ACC.1,CHKSC_422 ;Acc.1
          CLR    A               ;Acc.0
CHKSC_422:LCALL  WESCC_42     ;write SC counter
          LCALL  CMPSC_42H    ;comp SC (high   byte)
          LCALL  CMPSC_42M    ;comp SC (midium byte)
          LCALL  CMPSC_42L    ;comp SC (low    byte)
          MOV    A,    #07H
          LCALL  WESCC_42     ;Erase      SC counter
          LCALL  RSC_42       ;read  4442 SC counter
          MOV    R0,   #MBUF  ;get security error counter EC
          MOV    A,    @R0
          INC    R0
          ANL    A,    #07H   ;00000111
          JNZ    CHKSC_427    ;Card damage ?
CHKSC_426:SETB   2FH.0        ;Card damage
          SETB   2FH.1
          LJMP   CHKSC_429
CHKSC_427:ORL    A,    #0F8H  ;Check ok ? 11111000
          INC    A
          JZ     CHKSC_428
          SETB   2FH.0        ;Check error
          CLR    2FH.1
          LJMP   CHKSC_429
CHKSC_428:CLR   2FH.0
          CLR   2FH.1
CHKSC_429:LCALL  INTERR_42
          RET
;------------------------------------------------
;读SLE/4442 IC卡密码操作软件清单
;MBUF:  data buffer
;读SLE/4442 IC卡误码计数器  Acc:误码计数器值
;出口:读出密码计数器在   MBUF ( 4Byte )
;------------------------------------------------
RSC_42:   LCALL  RESET_42     ;reset smart card
          MOV    R0,   #CBUF
          MOV    @R0,  #31H   ;first byte Read security memory command
          INC    R0
          MOV    @R0,  #0FFH  ;second byte invalid
          INC    R0
          MOV    @R0,  #0FFH  ;third  byte invalid 
          LCALL  COM_42
          ;--------------------------------------
          MOV    R0,   #MBUF
          MOV    R7,   #4
RSC_421:  LCALL  BR_42
          MOV    @R0,  A
          INC    R0
          DJNZ   R7,   RSC_421
          CLR    IC_CLK
          LCALL  Delay5uS
          SETB   IC_IO
          NOP
          SETB   IC_CLK
          LCALL  Delay5uS
          LCALL  INTERR_42
          RET
;-------------------------(2) 

(3) [方塘] [24次] 01-12-28 下午 06:32:18 
;------------------------------------------------
;写SLE/4442 IC卡密码操作软件清单
;R1:   security(high   byte)
;R2:   security(medium byte)
;R3:   security(low    byte)
;------------------------------------------------
WSC_42:   LCALL  RESET_42     ;reset smart card
          MOV    R0,   #CBUF
          MOV    @R0,  #39H   ;First Byte 写密码命令 
          INC    R0
          MOV    @R0,  #01H   ;second byte 地址
          INC    R0
          MOV    A,    R1
          MOV    @R0,  A      ;third byte  security(high   byte)
          INC    R0
          LCALL  COM_42
          ;--------------------------------------
          LCALL  BW_42        ;write process
          MOV    R0,   #CBUF
          MOV    @R0,  #39H   ;First Byte 写密码命令 
          INC    R0
          MOV    @R0,  #02H   ;second byte 地址
          INC    R0
          MOV    A,    R2
          MOV    @R0,  A      ;third byte  security(medium byte)
          INC    R0
          LCALL  COM_42
          ;--------------------------------------
          LCALL  BW_42        ;write process
          MOV    R0,   #CBUF
          MOV    @R0,  #39H   ;First Byte 写密码命令 
          INC    R0
          MOV    @R0,  #03H   ;second byte 地址
          INC    R0
          MOV    A,    R3
          MOV    @R0,  A      ;third byte  security(low    byte)
          INC    R0
          LCALL  COM_42
          LCALL  BW_42        ;write process
          LCALL  INTERR_42
          RET
;------------------------------------------------
;写/擦SLE/4442 IC卡误码计数器  Acc:待写/擦误码计数器值
;------------------------------------------------
WESCC_42: MOV    R0,   #CBUF
          MOV    @R0,  #39H   ;First Byte  写密码命令 
          INC    R0
          MOV    @R0,  #00H   ;second byte  地址(SC counter)
          INC    R0
          MOV    @R0,  A      ;third  byte  数据
          LCALL  COM_42
          LCALL  BW_42
          RET
;------------------------------------------------
;核对比较SLE/4442 IC卡高/中/低字节密码
;R1:   security(high   byte)
;R2:   security(medium byte)
;R3:   security(low    byte)
;------------------------------------------------
CMPSC_42H:MOV    R0,   #CBUF
          MOV    @R0,  #33H  ;first byte   比较校验密码命令
          INC    R0
          MOV    @R0,  #01H  ;second byte  地址
          INC    R0
          MOV    A,    R1    ;external parameter
          MOV    @R0,  A     ;third byte  security(high   byte)
          LJMP   CMPSC_42S
CMPSC_42M:MOV    R0,   #CBUF
          MOV    @R0,  #33H  ;first byte   比较校验密码命令
          INC    R0
          MOV    @R0,  #02H  ;second byte  地址
          INC    R0
          MOV    A,    R2    ;external parameter
          MOV    @R0,  A     ;third byte  security(medium byte)
          LJMP   CMPSC_42S
CMPSC_42L:MOV    R0,   #CBUF
          MOV    @R0,  #33H  ;first byte   比较校验密码命令
          INC    R0
          MOV    @R0,  #03H  ;second byte  地址
          INC    R0
          MOV    A,    R3    ;external parameter
          MOV    @R0,  A     ;third byte  security(low    byte)
CMPSC_42S:LCALL  COM_42
          LCALL  BW_42
          RET
;------------------------------------------------
;发送SLE/4442 IC卡命令字节
;R0: Data buffer pointer
;R7: Command byte counter
;R4: bit counter
;------------------------------------------------
COM_42:   LCALL  BEGIN_42      ;start  flag
          MOV    R0,   #CBUF   ;write command 24 pulses
          MOV    R7,   #3
          CLR    C
COM_421:  MOV    R4,   #8
          MOV    A,    @R0
COM_422:  CLR    IC_CLK
          RRC    A
          MOV    IC_IO,C
          LCALL  Delay5uS
          SETB   IC_CLK
          LCALL  Delay5uS
          LCALL  Delay5uS
          DJNZ   R4,   COM_422
          INC    R0
          DJNZ   R7,   COM_421
          LCALL  END_42        ;end flag
          RET
;------------------------------(3)-------------- 

(4) [方塘] [22次] 01-12-28 下午 06:34:00 
;------------------------------------------------
;SLE/4442 IC卡操作中止
;------------------------------------------------
INTERR_42:;SETB   IC_FUS      ;clear unused pins
          CLR    IC_PGM
          CLR    IC_CLK      ;reset pulse Tw=50uS
          CLR    IC_RST
          CLR    IC_IO
          LCALL  Delay5uS
          SETB   IC_RST
          LCALL  Delay5uS
          SETB   IC_IO 
          LCALL  Delay5uS
          CLR    IC_RST
          LCALL  Delay5uS
          RET
;------------------------------------------------
;SLE/4442 IC卡操作开始
;------------------------------------------------
BEGIN_42: CLR    IC_CLK      ;start flag one pulse Tw=50uS
          SETB   IC_IO
          LCALL  Delay5uS
          SETB   IC_CLK
          LCALL  Delay5uS
          CLR    IC_IO
          LCALL  Delay5uS
          RET
;------------------------------------------------
;SLE/4442 IC卡操作结束
;------------------------------------------------
END_42:   CLR    IC_CLK      ;end flag one pulse Tw=50uS
          CLR    IC_IO
          LCALL  Delay5uS
          SETB   IC_CLK
          LCALL  Delay5uS
          SETB   IC_IO
          LCALL  Delay5uS
          RET
;------------------------------------------------
;复位SLE/4442 IC卡
;------------------------------------------------
RESET_42: LCALL  Delay5uS
          ;SETB   IC_FUS
          CLR    IC_PGM        ;复位和复位应答时序
          CLR    IC_RST        
          CLR    IC_CLK        ;      ___
          SETB   IC_IO         ;RST _|   |_______________________
          LCALL  Delay5uS      ;       _   _        __   __
          SETB   IC_RST        ;CLK __|0|_|1|_ ..._|31|_|32|_____
          LCALL  Delay5uS      ;   _   __  __           ___  _____
          SETB   IC_CLK        ;     \/  \/D0\ ...    \/D31\/
          LCALL  Delay5uS      ;I/O _/\__/\__/        /\___/
          LCALL  Delay5uS
          LCALL  Delay5uS
          LCALL  Delay5uS
          LCALL  Delay5uS
          LCALL  Delay5uS
          LCALL  Delay5uS
          LCALL  Delay5uS
          LCALL  Delay5uS
          CLR    IC_CLK
          LCALL  Delay5uS
          CLR    IC_RST
          LCALL  Delay5uS
          MOV    R0,   #CBUF
          MOV    R7,   #4
          ;------------------
RESET_421:LCALL  BR_42
          MOV    @R0,  A
          INC    R0
          DJNZ   R7,   RESET_421
          CLR    IC_CLK
          LCALL  Delay5uS
          SETB   IC_IO
          NOP
          SETB   IC_CLK
          LCALL  Delay5uS
          RET
;------------------------------------------------
;读SLE/4442 IC卡  读 1Byte 到 Acc
;------------------------------------------------
BR_42:    MOV    R4,   #8
BR_421:   CLR    IC_CLK
          LCALL  Delay5uS
          MOV    C,    IC_IO
          SETB   IC_CLK
          LCALL  Delay5uS
          RRC    A
          DJNZ   R4, BR_421
          Ret
;------------------------------------------------
;写SLE/4442 IC卡  Acc: 待写数据
;------------------------------------------------
BW_42:    MOV    R4,   #255
BW_421:   CLR    IC_CLK
          LCALL  Delay5uS
          CLR    IC_IO
          LCALL  Delay5uS
          SETB   IC_CLK
          LCALL  Delay5uS
          DJNZ   R4, BW_421
          LCALL  Delay5uS
          CLR    IC_CLK
          LCALL  Delay5uS
          SETB   IC_IO
          LCALL  Delay5uS
          Ret
;------------------------------------------------
;为SLE/4442 IC卡操作延时5uS
;------------------------------------------------
Delay5uS: NOP
          NOP
          NOP
          Ret
;----------------------------(4)end---------------- 

方塘呀,汇编看起来很累呀!谁有C的? [潞潞] [4次] 01-12-29 上午 08:55:09 

用C做uS延时比较麻烦。有注释,汇编也不会难看呀。 [方塘] [5次] 01-12-29 上午 09:11:34 

C 是哪位老兄编的我不知道了 [SanDragon] [19次] 01-12-29 上午 09:21:43 
//4442卡的底层操作程序

#include <stdio.h>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -