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

📄 iccard at88sc1604.asm

📁 IC卡操作软件:AT88SCl604芯片的操作模式有五种。它们是通过配PGM、RST、CLK等引脚信号及内部地址计数器(IAC)的状态组合来实现。 (1) 芯片复位操作: AT88SCl604有两种复
💻 ASM
字号:

FWZCX: 
	CLR	ICPGM		;复位子程序	
	NOP
	SETB	ICREST
	NOP
	SETB	ICSDA
	NOP
	CLR	ICCLK		;时钟端清0	
	NOP
	CLR	ICREST		;复位端清0	
	NOP
	RET

(2)读出操作: 读IC数据子程序(R2:需读IC卡字节数,R0:数据区存放低位首地址)
RICDAZ:
	MOV	A,#KXXDZ		;卡信息地址送A
	LCALL	SADR			;寻卡地址
	RICDA:	
		MOV	R3,#08
		RICDA1:	
			SETB	ICSDA
			NOP
			MOV	C,ICSDA		;位读到A
			RLC	A
			SETB	ICCLK
			NOP
			CLR	ICCLK
			NOP
			DJNZ	R3,RICDA1
		MOV	@R0,A			;8位数据送数据区
		DEC	R0
		DJNZ	R2,RICDA
	RET

; 寻IC卡位地址子程序(调用前16进制地址送ACC)
SADR: 
	LCALL	FWZCX	;复位子程序
	MOV	B,#08
	MUL	AB 		;计算位地址: 16进制地址*8
	MOV	R4,A		;低位位地址送R4
	MOV	R5,B		;高位位地址送R5
	JNZ	SADR1		;低位地址不为0转
	MOV	A,R5
	JZ	SADR3
	DEC	R5
SADR1:
	SETB	ICREST		;复位端置1
	SETB	ICSDA
	CLR	ICPGM
	CLR	ICCLK
	CLR	ICREST
	SADR2:
		SETB	ICCLK
		SETB	ICCLK
		CLR	ICCLK
		CLR	ICCLK
		DJNZ	R4,SADR2
	MOV	A,R5
	JZ	SADR3
	DEC	R5
	SJMP	SADR2
SADR3:	
	RET



比较用户密码子程序(地址0AH,0BH)
CPSC:	
	MOV	R0,#CMM+2
	MOV	R1,#06
	MOV	R2,#02
	LCALL	MVITI
	MOV	A,#0AH
	LCALL	SADR			;寻址
	MOV	R0,#06
	LCALL	BJMM			;比较密码程序
	RET

;比较密码程序
BJMM:	
	CLR	ICREST
	CLR	ICPGM
	MOV	R2,#02
	BJMM1:	
		MOV	A,@R0
		MOV	R3,#08
		BJMM2:	
			RLC	A
			MOV	ICSDA,C
			NOP
			SETB	ICCLK
			NOP
			CLR	ICCLK
			NOP
			DJNZ	R3,BJMM2
		INC	R0
		DJNZ	R2,BJMM1
	MOV	R2,#08			;查8位
	BJMM4:	
		SETB	ICSDA
		NOP
		MOV	C,ICSDA
		JC	BJMM5			;是1转
		SETB	ICCLK			;指向下一位
		NOP
		CLR	ICCLK
		NOP
		DJNZ	R2,BJMM4
	LJMP	BJMM8			;计数器为00,卡锁死转
BJMM5:	
	SETB	ICPGM
	NOP
	CLR	ICSDA			;写0
	NOP
	SETB	ICCLK
	NOP
	CLR	ICPGM
	NOP
	LCALL	DELY5			;5毫秒延时	
	CLR	ICCLK
	NOP
	SETB	ICSDA
	NOP
	MOV	C,ICSDA
	JNC	BJMM6
	LJMP	BJMM7			;未写入0,转出错
BJMM6:	
	SETB	ICPGM
	NOP
	SETB	ICSDA			;写1(擦除)
	NOP
	SETB	ICCLK
	NOP
	CLR	ICPGM
	NOP
	LCALL	DELY5			;5毫秒延时	
	CLR	ICCLK
	NOP
	SETB	ICSDA
	NOP
	MOV	C,ICSDA
	NOP
	SETB	ICCLK
	JNC	BJMM7			;擦除不成功(密码错)转
	SETB	FGICG1			;置已校对密码标志
	RET
BJMM7:	
	CLR	FGICG1			;建密码错标记
	RET
BJMM8:	
	SETB	FGICG2 			;置卡锁死标志
	RET

(4)写入操作:

WICD: 
	MOV	A,#KDWDZ		;送擦除卡低位首地址
	LCALL	SADR			;寻位地址
	MOV	R2,#30			;擦除30字节
	LCALL	CPESC3			;擦除
	MOV	R0,#RAMDZ		;CPU的RAM中待写入数据地址
	MOV	R2,#30			;写入30字节
	WICDA:	
		MOV	A,@R0
		LCALL	WICDAA		;向IC卡写入子程序
		INC	R0
		DJNZ	R2,WICDA
	RET

;向IC卡写入子程序
WICDAA:	
	MOV	R3,#08
	WICDAB:	
		RLC	A
		JC	WICDAC		;该位为1,转
		SETB	ICPGM		;打开编程位
		SETB	ICPGM
		MOV	ICSDA,C
		MOV	ICSDA,C
		SETB	ICCLK
		SETB	ICCLK
		CLR	ICPGM		;关闭编程位
		CLR	ICPGM		;关闭编程位
		LCALL	DELY5		;延时5MS
		CLR	ICCLK
		CLR	ICCLK
		WICDAC:	
		SETB	ICCLK
		SETB	ICCLK
		CLR	ICCLK
		DJNZ	R3,WICDAB
	RET

; 擦除应用区1
CPESC3: 
	SETB	ICPGM			;打开编程位,擦除灰名	单入口
	SETB	ICPGM
	SETB	ICSDA
	SETB	ICSDA
	SETB	ICCLK
	SETB	ICCLK
	CLR	ICPGM			;关闭编程位
	LCALL	DELY5			;延时5MS
	CLR	ICCLK
	CLR	ICCLK
	SETB	ICCLK
	SETB	ICCLK
	CLR	ICCLK
	MOV	R3,#07
	CPESC4:	
		SETB	ICCLK
		SETB	ICCLK
		CLR	ICCLK
		CLR	ICCLK
		DJNZ	R3,CPESC4
	DJNZ	R2,CPESC3
	RET

; 延时(R7)
DELY5: 
MOV	R7,#0AH		;5毫秒延时
DELY:	
	PUSH	07
	DLY1:	
		PUSH	07
		DLY2:	
			PUSH	07
			DLY3:	
			DJNZ	R7,DLY3
			POP	07
			DJNZ	R7,DLY2
		POP	07
		DJNZ	R7,DLY1
	POP	07
	DJNZ	R7,DELY
RET



	

⌨️ 快捷键说明

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