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

📄 51写的sle4442程序.txt

📁 51写的SLE4442程序实验用的SLE4442卡初始密码PSC1、PSC2、PSC3均为0FFH
💻 TXT
字号:
;实验用的SLE4442卡初始密码PSC1、PSC2、PSC3均为0FFH。读加密存储器的内容暂存于22H单元——错误计数器;、;23H单元——密码字节1、24H单元——密码字节2、25H单元——密码字节3。
;本程序对应晶振12 MHz的情况,DELAY_12 μs、DELAY_4 μs和DELAY_10 ms分别为延时12 μs、延时4 ;μs和延时10 ms子程序,请读者自行编写。 
        IO 	BIT 	P1.0
	CLK	BIT	P1.1
	RST 	BIT 	P1.2
        ICSW 	BIT 	P1.6
        PWR 	BIT 	P1.7
	PSC1 	EQU 	0FFH
	PSC2 	EQU 	0FFH
	PSC3 	EQU 	0FFH
        ORG 	0000H
        LJMP 	MAIN
;*************主程序**************
	ORG  	0030H
MAIN:
        CLR   EA		;关中断
        MOV   SP,#60H	;设置堆栈
        LCALL PWRON	;上电控制
        LCALL RESET	;复位
	MOV   R0,#30H	;设置读数据缓冲区1首地址
        LCALL READ	;读主存储器
	NOP		;断点①
        LCALL COMP	;PSC校验
	XRL   A,R4	;断点②,检查PSC校验是否正确
	JNZ   EXIT	;PSC校验失败退出
        MOV   R0,#50H	;设置写数据缓冲区首地址
        LCALL WRITE	;修改主存储器
	MOV   R0,#40H	;设置读数据缓冲区2首地址
        LCALL READ	;读主存储器
EXIT:  NOP		;断点③
	LCALL PWROFF  	;下电控制
	SJMP $
;**********读主存储器子程序************** 
READ:
     	MOV R7,#30H	;设置读主存储器命令控制字
     	MOV R6,20H	;取读主存储器命令地址字
     	MOV R5,#00H	;设置读主存储器命令数据字(任意)
     	MOV R4,21H	;取要读的字节数
     	MOV R3,21H	;要读的字节数暂存R3
     	MOV R2,#00H
     	LCALL COMMAND	;送命令给卡
READ0: LCALL SHIN	;读数据(输出数据模式)
        MO    @R0,A	;送数据入数据缓冲区
        INC   R0
        DJNZ  R4,READ0	;未读完继续
        CLR   C		;计算剩余的主存储器字节数
        MOV   A,#0FFH
        SUBB  A,R6
        SUBB  A,R3
        INC   A
        MOV   R2,A	
READ1: LCALL SHIN	;读入剩余的主存储器字节
        DJNZ  R2,READ1	
        SETB  CLK	;发送一个附加脉冲
     	LCALL DELAY_4 μs 
        CLR   CLK
        LCALL DELAY_4μs 
        SETB  IO	;置位数据线
        LCALL DELAY_4 μs 
        RET
WRITE:
        MOV R4,21H	;取要写的字节数
WRITE0:MOV R7,#38H	;设置修改主存储器命令控制字
     	MOV R6,20H	;取修改主存储器命令地址字
        MOV A,@R0
        MOV R5,A	;取修改主存储器命令数据字
        LCALL COMMAND	;送修改主存储器命令给卡
        LCALL OPERA254	;处理模式
        INC 32H		;地址字指向主存储器下一个单元
        INC R0		;指向下一个数据
        DJNZ R4,WRITE0	;未写完继续
     	RET
;************PSC校验子程序***************	
COMP:
     	MOV  R7,#31H	;设置读加密存储器命令控制字
     	MOV  R6,#00H	;设置读加密存储器命令地址字(00H为错误计数器)
     	MOV  R5,#00H	;设置读加密存储器命令数据字(任意)
     	LCALL   COMMAND	;送读加密存储器命令 
     	LCALL   SHIN	;读错误计数器
     	MOV     22H, A	;错误计数器值暂存22H单元
	LCALL   SHIN	;继续读入加密存储器后3个字节
	MOV     23H, A
	LCALL   SHIN
	MOV     24H, A
	LCALL   SHIN
	MOV     25H, A
	MOV     A,   22H
	SETB    IO	;附加一个脉冲,置数据线为高
	LCALL   DELAY_4μs 
        SETB    CLK
        LCALL   DELAY_4 μs 
        CLR     CLK
        JB  ACC.0,NEXT0	;判断错误计数器中是否还有“1”
     	JB  ACC.1,NEXT1	;如有“1”则减去一个“1”
     	JB  ACC.0,COMP2
	LJMP EXIT	;错误计数器为全“0”退出
NEXT0: MOV  R5,#06H
	MOV  R4,#07H
	AJMP COMP0
NEXT1: MOV  R5,#04H
        MOV  R4,#06H
        AJMP COMP0
NEXT2:	MOV  R5,#00H
	MOV  R4,#04H
COMP0:	MOV  R7,#39H	;设置修改加密存储器命令控制字
        MOV  R6,#00H	;设置修改加密存储器命令地址字(错误计数器)
	LCALL COMMAND	;送修改加密存储器命令(错误计数器减一个1)
	LCALL OPERA123	;处理模式
	MOV R7,#33H	;设置PSC校验命令控制字
	MOV R6,#01H	;设置PSC校验命令地址字
	MOV R5,#PSC1	;取PSC第1个字节
	LCALL COMMAND	;送PSC校验命令给卡
	LCALL OPERA123	;处理模式
	MOV R7,#33H	;设置PSC校验命令控制字
	MOV R6,#02H	;设置PSC校验命令地址字
	MOV R5,#PSC2	;取PSC第2个字节
	LCALL COMMAND	;送PSC校验命令给卡
	LCALL OPERA123	;处理模式
	MOV R7,#33H	;设置PSC校验命令控制字
	MOV R6,#03H	;设置PSC校验命令地址字
	MOV R5,#PSC3	;取PSC第3个字节
	LCALL COMMAND	;送PSC校验命令给卡
	LCALL OPERA123	;处理模式
	MOV R7,#39H	;设置修改加密存储器命令控制字
	MOV R6,#00H	;设置修改加密存储器命令地址字(错误计数器)
	MOV R5,R4	;取修改加密存储器命令数据字(擦除错误计数器)
	LCALL COMMAND	;送修改加密存储器(擦除错误计数器)命令给卡
	LCALL OPERA123	;处理模式
	MOV R7,#31H	;设置读加密存储器命令控制字
	MOV R6,#00H	;设置读加密存储器命令地址字(错误计数器)
	MOV R5,#00H	;设置读加密存储器命令数据字(任意)
	LCALL COMMAND	;送读加密存储器命令给卡
	LCALL SHIN	;读加密存储器的错误计数器
	MOV 22H,A      
	LCALL SHIN	;读加密存储器的后3个字节
	MOV 23H,A
	LCALL SHIN
	MOV 24H,A
	LCALL SHIN
	MOV 25H,A
	MOV A,22H
	SETB  IO	;附加一个脉冲,置数据线为高
	LCALL DELAY_4μs 
	SETB  CLK
	LCALL DELAY_4μs 
	CLR   CLK
	EXIT:	RET
;************命令子程序***************
;该子程序送出3字节的SLE4442命令
;入口参数:R7为控制字,R6为地址字,R5为数据字
;调用时CLK为低,IO为高;返回时CLK为高,IO为高
COMMAND:
        SETB  CLK
        LCALL DELAY_12μs 
       	CLR   IO
        LCALL DELAY_4μs 
        CLR   CLK
       	LCALL DELAY_4μs 
        MOV   A,R7
        LCALL SHOUT
        MOV   A,R6
        LCALL SHOUT
        MOV   A,R5
        LCALL SHOUT
        LCALL DELAY_4μs
	CLR   IO
     	LCALL DELAY_4μs 
     	SETB  CLK
     	LCALL DELAY_4μs 
     	SETB  IO
     	RET
;*************串行输出一个字节子程序***********
SHOUT:
         PUSH  B
         MOV   B,#08H
X42:    RRC   A
         MOV   IO,C
         NOP
         SETB  CLK
         LCALL DELAY_4μs 
         CLR   CLK
         LCALL DELAY_4μs 
         DJNZ  B,X42
         POP   B
         RET
;*********处理模式1子程序************
OPERA123:
         MOV  R7,#123D
         CLR    CLK
         CLR    IO
         LCALL  DELAY_4μs 
OPERA0: SETB   CLK
         LCALL  DELAY_4μs 
         CLR    dCLK
         LCALL  DELAY_4μs 
OPERA0: SETB   CLK
         LCALL  DELAY_4μs 
         CLR    CLK         
         LCALL  DELAY_4μs 
         DJNZ   R7,OPERA0
         SETB   IO
         LCALL  DELAY_4 μs 
         SETB   CLK
         LCALL  DELAY_4 μs 
         CLR    CLK
         RET
;**************处理模式2子程序***********
OPERA254:
         MOV    R7,#254D
         CLR    CLK
         CLR    IO
         LCALL  DELAY_4 μs 
OPERA1: SETB   CLK
         LCALL  DELAY_4 μs 
         CLR    CLK
         LCALL  DELAY_4 μs 
         DJNZ   R7,OPERA1
         SETB   IO
         LCALL  DELAY_4 μs 
         SETB   CLK
         LCALL  DELAY_4 μs 
         CLR    CLK
         RET
;*************复位子程序***************
RESET:
         CLR    RST
         CLR    CLK
         CLR    IO
         LCALL  DELAY_12 μs 
         LCALL  DELAY_12 μs 
         SETB   RST
         LCALL  DELAY_12 μs 
         SETB   CLK
         LCALL  DELAY_12 μs 
         CLR    CLK
         LCALL  DELAY_12 μs 
         CLR    RST
         LCALL  DELAY_12 μs 
         MOV    B,     #20H
RESET0: SETB   CLK
         LCALL  DELAY_12 μs 
         CLR    CLK
         LCALL  DELAY_12 μs 
         DJNZ   B,   RESET0
         SETB   IO
         RET
;**************上电控制子程序***********
PWRON:
        CLR    RST
        CLR    IO
        CLR    CLK
        LCALL  RECOG
        CLR    RST
        CLR    CLK
        LCALL  DELAY_10 ms
        CLR    PWR
        CLR    IO
        RET
RECOG: JB     ICSW,RECOG
        LCALL  DELAY_10 ms
        JB     ICSW,RECOG
        RET
;***********下电控制子程序**************
PWROFF:
        CLR   RST
        CLR   CLK
        CLR   IO
        LCALL DELAY_10 ms
        SETB PWR
        RET
        END

⌨️ 快捷键说明

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