;SLE4442卡 ;说明: ;入口条件:读数据时,READ_START存放所读数据的首地址,READ_NUM存放将要读取的数据个数。写数据时,WRITE_DATA存放将要写入的数据,; WRITE_ADDR存放将要写入单元的地址(一次只能写入一个字节数据)。 ;出口信息:读数据时,读出的数据存放在以30H为首地址的READ_NUM个单元中。 ; 在写数据时,39H自动返回IC卡密码校验特征值,为0AAH则表示密码校验失败,为0BBH则表示密码校验成功。 ;影响资源:R0,R2-R7,39H 堆栈需求: 6字节 IC_RST BIT P3.2 IC_CLK BIT P3.3 IC_IO BIT P3.4 READ_START EQU 10H READ_NUM EQU 11H WRITE_ADDR EQU 12H WRITE_DATA EQU 13H PASS1 EQU 0FFH PASS2 EQU 0FFH PASS3 EQU 0FFH READ_SE4442: CLR IC_RST CLR IC_CLK LCALL ICDEY SETB IC_RST LCALL ICDEY CLR IC_RST SETB IC_IO MOV R6,#00H MOV R5,READ_START ;READ IC START ADDRESS MOV R4,#30H LCALL COMT MOV R2,READ_NUM ;读数据总个数 MOV R0,#30H LCALL READ_IC_DATE LCALL ICDEY SETB IC_RST LCALL ICDEY CLR IC_RST RET ICDEY: NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP RET READ_IC_DATE: CLR IC_CLK ICLP2: MOV R3,#08H ICLP1: SETB IC_CLK LCALL ICDEY MOV C,IC_IO RRC A CLR IC_CLK LCALL ICDEY DJNZ R3,ICLP1 MOV @R0,A INC R0 DJNZ R2,ICLP2 SETB IC_CLK LCALL ICDEY CLR IC_CLK LCALL ICDEY SETB IC_IO RET COMT: MOV R0,#04 MOV R3,#03H SETB IC_CLK LCALL ICDEY CLR IC_IO COMT2: MOV R2,#08H COMT1: CLR IC_CLK LCALL ICDEY MOV A,@R0 CLR C RRC A MOV @R0,A MOV IC_IO,C SETB IC_CLK LCALL ICDEY DJNZ R2,COMT1 INC R0 DJNZ R3,COMT2 CLR IC_CLK LCALL ICDEY CLR IC_IO LCALL ICDEY SETB IC_CLK LCALL ICDEY SETB IC_IO LCALL ICDEY RET ERTP: LCALL ICDEY SETB IC_CLK LCALL ICDEY CLR IC_CLK DJNZ R2,ERTP LCALL ICDEY SETB IC_IO RET EWT: CLR IC_CLK CLR IC_IO MOV R2,#00H LJMP ERTP WRITE_SE4442: LCALL PASSWORD LCALL W_E4442IC RET PASSWORD: ;读加密存储器 MOV R4,#31H MOV R5,#00H MOV R6,#00H LCALL COMT MOV R2,#04H MOV R0,#30H LCALL READ_IC_DATE LCALL CHECK_PASS ;校验密码 RET CHECK_PASS: ;判密码计数器 MOV 39H, #0BBH MOV A,30H JB ACC.0,TICLP4 JB ACC.1,TICLP5 JB ACC.2,TICLP6 MOV 39H, #0AAH LJMP CHECK_PASS_END TICLP4: ;修改密码存储器 MOV R6,#0FEH TICL4: MOV R5,#00H MOV R4,#39H LCALL COMT LCALL EWT LJMP TICLP7 TICLP5: MOV R6,#0FCH LJMP TICL4 TICLP6: MOV R6,#0F8H LJMP TICL4 TICLP7: ;比较校验数据 MOV R6,#0FFH;#PASS1 ;第一位密码 MOV R5,#01H MOV R4,#33H LCALL COMT LCALL EWT MOV R6,#0FFH;#PASS2 ;第二位密码 MOV R5,#02H MOV R4,#33H LCALL COMT LCALL EWT MOV R6,#0FFH;#PASS3 ;第三位密码 MOV R5,#03H MOV R4,#33H LCALL COMT LCALL EWT MOV R6,#0FFH ;修改加密存储器 MOV R5,#00H MOV R4,#39H LCALL COMT LCALL EWT MOV R4,#31H ;读加密存储器 MOV R5,#00H MOV R6,#00H LCALL COMT MOV R3,#08H TICS5: CLR IC_CLK LCALL ICDEY LCALL ICDEY SETB IC_CLK MOV C,IC_IO RRC A LCALL ICDEY DJNZ R3,TICS5 CLR IC_CLK LCALL ICDEY SETB IC_IO SETB IC_RST LCALL ICDEY CLR IC_RST LCALL ICDEY ORL A,#0F8H CPL A CHECK_PASS_END: RET W_E4442IC: ;写数据存储区 MOV R6,WRITE_DATA MOV R5,WRITE_ADDR MOV R4,#38H LCALL COMT LCALL EWT RET ;;由http://www.gotocm.com编辑提供