;********************************************************************* ; Module Name: Sle4442.asm ; Author: 涛行九天 ; Version: 1.0 ; CreateDate: 1998-04-12 ; Description: ; Remark: ; Revision History: ;********************************************************************* ;---------- 管脚定义 -------------- RST EQU P3.3 CLK EQU P3.4 IO EQU P1.4 SW1 EQU P3.5 ;为0不到位 ;************************************************************ ; 以下是调用示例 ;************************************************************ LCALL RSTAS ;-------------------------- MOV R0,#DATA1+4 MOV @R0,#0FFH INC R0 MOV @R0,#0FFH INC R0 MOV @R0,#0FFH MOV R1,#DATA1+4 LCALL CMPVD ;校验PSC MOV R0,#DATA2+8 ;----------------- MOV R1,#DATA1+10 MOV R2,#3 LCALL FENJN ;将余额分解为6位 MOV R1,#DATA1+10 MOV R2,#6 MOV R3,#50 LCALL WR4442 ;收到上位机传来余额信息,写入IC相应位置 ;************************************************************ ; 以下是SLE 4442卡的读写子程序 ;************************************************************ ;---------------------------------------------------- ; RSTAS: IC复位子程序 ; 入口参数: ; 局部参数:R6,R7 ; 出口参数:R0,地址0--3的数据 ;---------------------------------------------------- RSTAS: CLR RST CLR CLK SETB RST ;POLL UP RST NOP NOP NOP NOP ;4uS SETB CLK ;POLL UP CLK NOP NOP NOP NOP NOP NOP NOP NOP NOP ;9uS CLR CLK ;POLL DOWN CLK NOP NOP NOP NOP ;4uS CLR RST ;POLL DOWN RST MOV R0,#DATA1 MOV R6,#4 RST1: MOV R7,#8 ;>2.5uS RST2: MOV C,IO RRC A NOP NOP NOP NOP NOP SETB CLK NOP NOP NOP NOP NOP NOP NOP NOP NOP ;9uS CLR CLK DJNZ R7,RST2 MOV @R0,A INC R0 DJNZ R6,RST1 ;以上为RESET AND ANSWER TO RESET RET ;---------------------------------------------------- ; SDCOMD: 发送命令子程序 ; 入口参数:R0,要发送的三字节命令 ; 局部参数:R6,R7 ;---------------------------------------------------- SDCOMD: NOP NOP NOP NOP NOP SETB CLK NOP NOP NOP NOP CLR IO ;开始发送命令 MOV R6,#3 COMD1: MOV R7,#8 MOV A,@R0 COMD2: NOP NOP NOP NOP NOP NOP NOP CLR CLK ;>9uS RRC A MOV IO,C NOP NOP NOP NOP NOP NOP NOP SETB CLK ;>9uS DJNZ R7,COMD2 INC R0 DJNZ R6,COMD1 NOP NOP NOP NOP CLR CLK NOP NOP NOP NOP NOP NOP NOP NOP NOP SETB CLK ;additional clock:0->1 NOP NOP NOP NOP SETB IO ;结束发送命令,>4uS RET ;---------------------------------------------------- ; RCDATA: 接收数据子程序 ; 入口参数:R0,数据起址;R2,数据个数 ; 局部参数:R6,R7 ; 出口参数:R0,数据 ;---------------------------------------------------- RCDATA: CLR CLK MOV A,R2 MOV R6,A READM1: MOV R7,#8 READM2: NOP MOV C,IO ;>2.5uS RRC A NOP NOP NOP NOP SETB CLK NOP NOP NOP NOP NOP NOP NOP NOP NOP ;9uS CLR CLK DJNZ R7,READM2 MOV @R0,A INC R0 DJNZ R6,READM1 ;以上为多字节读 RET ;---------------------------------------------------- ; PROCESS: 开始写过程,提供足够的脉冲 ; 入口参数: ; 局部参数:R7 ; 出口参数: ;---------------------------------------------------- PROCESS:NOP NOP NOP NOP NOP CLR CLK NOP NOP NOP CLR IO MOV R7,#255 PROCES1:NOP NOP NOP NOP NOP NOP NOP SETB CLK NOP NOP NOP NOP NOP NOP NOP NOP NOP CLR CLK DJNZ R7,PROCES1 NOP SETB IO RET ;---------------------------------------------------- ; CMPVD: 校验PSC ; 入口参数:R1,输入PSC. ; 局部参数:R6,R7 ; 出口参数:R3,1:校验失败,0:成功; R0, EC & PSC ;---------------------------------------------------- CMPVD: MOV R0,#DATA1 ;-------------------- MOV @R0,#31H LCALL SDCOMD MOV R0,#DATA1 MOV R2,#4 LCALL RCDATA ;READ EC NOTE:READ 4 MOV R0,#DATA1 MOV A,@R0 ANL A,#07H JNZ PERMIT ;EC=0,RET MOV R3,#1 RET PERMIT: JNB ACC.0,WR0A CLR ACC.0 SJMP WR0C WR0A: JNB ACC.1,WR0B CLR ACC.1 SJMP WR0C WR0B: CLR ACC.2 WR0C: MOV R0,#DATA1 ;--------------------- MOV @R0,#39H INC R0 MOV @R0,#0 INC R0 MOV @R0,A MOV R0,#DATA1 LCALL SDCOMD LCALL PROCESS ;UPDATA EC MOV R0,#DATA1 ;-------------------------- MOV @R0,#33H INC R0 MOV @R0,#1 INC R0 MOV A,@R1 MOV @R0,A MOV R0,#DATA1 LCALL SDCOMD LCALL PROCESS ;COMPARE FIRST MOV R0,#DATA1 ;------------- MOV @R0,#33H INC R0 MOV @R0,#2 INC R0 INC R1 MOV A,@R1 MOV @R0,A MOV R0,#DATA1 LCALL SDCOMD LCALL PROCESS ;COMPARE SECOND MOV R0,#DATA1 ;-------------- MOV @R0,#33H INC R0 MOV @R0,#3 INC R0 INC R1 MOV A,@R1 MOV @R0,A MOV R0,#DATA1 LCALL SDCOMD ;COMPARE THIRD LCALL PROCESS ;--------------------------- MOV R0,#DATA1 MOV @R0,#39H INC R0 MOV @R0,#0 INC R0 MOV @R0,#07H MOV R0,#DATA1 LCALL SDCOMD LCALL PROCESS ;UPDATA EC ;MOV R0,#DATA1 ;------------------ ;MOV @R0,#39H ;INC R0 ;MOV @R0,#1 ;INC R0 ;MOV @R0,#0FFH ;MOV R0,#DATA1 ;LCALL SDCOMD ;LCALL PROCESS ;UPDATA THE FIRST BYTE OF PSC MOV R0,#DATA1 ;------------------ MOV @R0,#31H LCALL SDCOMD MOV R0,#DATA1 MOV R2,#4 LCALL RCDATA ;READ EC MOV R0,#DATA1 MOV A,@R0 ANL A,#7 CJNE A,#7,CMPFAIL MOV R3,#0 RET CMPFAIL:MOV R3,#1 RET ;---------------------------------------------------- ; WR4442: 多字节写 ; 入口参数:R1,写入数据起址; R2,写入个数; R3,数据写入地址 ; 局部参数:R0,R6,R7 ; 出口参数:R3,1:校验失败,0:成功; R0, EC & PSC ;---------------------------------------------------- WR4442: MOV R0,#DATA1 MOV @R0,#38H INC R0 MOV A,R3 MOV @R0,A INC R0 MOV A,@R1 MOV @R0,A MOV R0,#DATA1 LCALL SDCOMD LCALL PROCESS ;UPDATA MAIN MEM INC R1 INC R3 DJNZ R2,WR4442 RET ;*********************************************************************