电路设计,软件开发,专业项目团队承接电子产品开发!


ISPRO下载型编程器
火爆销售中

RS232/TTL转换器
全IC串口窃电

RS232/TTL转换线
全IC串口窃电

ByteBlasterMV Cable
CPLD/FPGA并口下载线

ByteBlaster II Cable ISPRO下载型编程器
支持S51/AVR/PIC
超级51开发板套件
前卫实用超值

PC/MCU/CPLD
三合一学习套件

全新万年历方案
AVR单片机开发板
 

Min51单片机仿真机
迷你型

ARM7开发板
仅售260元!
 

RS-232/RS-485双向接口电平转换器  

51单片机升级STM32
火爆销售中
MPLAB-ICD2
火爆销售中
LED51开发板
玩具又名图文显示棒

面板模块/开发板
经济危机明智决择

       

GSM MODEM GSM猫

SMS短信模块 工业级/全自动
火爆销售中

大功率数传电台

高速数传电台

您当前位置:电子技术资料 -> 外围驱动 -> IC卡 ->

祝您阅读愉快!

ISPRO下载型编程器

RS232 TO TTL转换器
↑↑本文相关产品介绍↑↑

SLE4442IC卡汇编子程序


类别:技术文章
来源:未知
作者:未知
关键字:SLE4442
加入日期:2010-8-3

;------------以下 IC 卡子程序--------------------
;中国电子网 www.EC66.com
;------------------------------------------------
;读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----------------

您可能还会关注的相关技术资料:

中国电子网
www.EC66.com
QQ:34740080 EMAIL:iloveaoe@163.com
最佳浏览:1024*768
Copyright (C) 2001-2010 EC66.COM All Rights Reserved
Aoe/帝国 制作维护
粤ICP备18061901号