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

📄 sle4442.asm

📁 里面包括很多的驱动程序的
💻 ASM
字号:
;*********************************************************************
;	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
	
;*********************************************************************

⌨️ 快捷键说明

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