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

📄 4442.asm

📁 ICcard.rar
💻 ASM
📖 第 1 页 / 共 2 页
字号:
       LCALL	PAUSE
WRITE_CARD_1:
       MOV   R0,#COM_BUFF    ;
       MOV   @R0,#38H        ;写主存储区
       INC   R0
       MOV   A,R1
       MOV   @R0,A
       INC   R0
       MOVX  A,@DPTR
       MOV   @R0,A
       LCALL CARD_COM_MODE
       LCALL CARD_PRO_MODE
       CJNE A,#0FFH,WRITE_CARD_CON
       RET
WRITE_CARD_CON:
       INC R1
       INC DPTR
       DJNZ COUNT0,WRITE_CARD_1
       RET

;/////////////////////////////////////////
;修改4442卡的PSC(3 BYTE);		//
;UPDATE PSC				//
;INPUT:IC_PWD				//
;OUTPUT:  A=00H:OK	A=0FFH:ERROR	//
;/////////////////////////////////////////
UPDATE_PSC:
	MOV	R1,#IC_PWD
	MOV	R2,#03H
	MOV	R3,#01H
UPDATE_PSC_LOOP:
	SETB	IC_IO
	SETB	IC_CLK
	LCALL	PAUSE
	LCALL	PAUSE
	LCALL	PAUSE
	CLR	IC_IO
	MOV	R0,#COM_BUFF
	MOV	A,#39H;.........CONTROL=39H
	MOV	@R0,A
	INC	R0
	MOV	A,R3
	INC	R3
	MOV	@R0,A;..........ADDRESS=01H
	INC	R0
	MOV	A,@R1
	INC	R1
	MOV	@R0,A;..........BYTE(FORM IC_PWD)
	LCALL	CARD_COM_MODE
	LCALL	CARD_PRO_MODE
	CJNE	A,#00H,UPDATE_PSC_ERR
	DJNZ	R2,UPDATE_PSC_LOOP
	SJMP	UPDATE_PSC_QUIT
UPDATE_PSC_ERR:
	MOV	A,#0FFH
UPDATE_PSC_QUIT:
	RET

;/////////////////////////////////////////////////////////////////
;核对4442卡之PSC 						//
;CHECK IC CARD PASSWORD						//
;INPUT: IC_PWD[3]						//
;OUTPUT: A   0:PASSWORD OK;  FF:LINE RESPONSE WRONG		//
;            FE:CARD LOCK; FD:CARD ILLEGAL; FC:PASSWORD WRONG	//
;/////////////////////////////////////////////////////////////////
CHK_IC_PWD:
	SETB IC_IO
	LCALL PAUSE
	LCALL PAUSE
	LCALL PAUSE
	MOV R1,#IC_PWD
        MOV R0,#COM_BUFF          ;READ SECURITY 4 BYTES
        MOV @R0,#31H              ;CONTROL
        INC R0
        MOV @R0,#0FFH             ;ADDRESS(NO EFFACT)
        INC R0
        MOV @R0,#0FFH             ;BYTE(NO EFFACT)
        MOV BYTE_COUNT,#4         ;
        LCALL CARD_COM_MODE
        LCALL CARD_OUT_MODE       ;INPUT:BYTE_COUNT
        CJNE  A,#0FFH,CHECK_EC
        LJMP  CHECK_QUIT          ;IF DEAD LINE,RETURN FF
CHECK_EC:
       MOV DPTR,#IC_VALUE           ;CHECK EC
       MOVX A,@DPTR
       ANL A,#00000111B
       CJNE A,#0,CHECK_EC1
CARD_LOCK:
       MOV A,#0FEH               ;IF EC=0,CARD LOCK,RETURN FE
       LJMP	CHECK_QUIT
CARD_ILL:
       MOV A,#0FDH
       LJMP	CHECK_QUIT
CHECK_EC1:
       CJNE A,#07H,CHECK_EC2       ;CHECK EC= 07,03,01
       MOV A,#03H
       LJMP UPDATE_EC
CHECK_EC2:
       CJNE A,#03H,CHECK_EC3
       MOV A,#01H
       LJMP UPDATE_EC
CHECK_EC3:
       CJNE A,#01H,CARD_ILL      ;CARD ILLEGAL,RETURN FD
       MOV A,#00H
UPDATE_EC:
       MOV R0,#COM_BUFF          ;change one bit of EC from '1' to '0'
       MOV @R0,#39H
       INC R0
       MOV @R0,#00H
       INC R0
       MOV @R0,A
       LCALL CARD_COM_MODE
       LCALL CARD_PRO_MODE
       CJNE A,#0FFH,COMP_PWD1
       LJMP	CHECK_QUIT           ;if dead line,return ff
COMP_PWD1:
       MOV R0,#COM_BUFF          ;compare first byte password
       MOV @R0,#33H
       INC R0
       MOV @R0,#01H
       INC R0
       MOV A,@R1
       MOV @R0,A
       INC R1
       LCALL CARD_COM_MODE
       LCALL CARD_PRO_MODE
       CJNE A,#0FFH,COMP_PWD2
       LJMP	CHECK_QUIT           ;if dead line,return ff
COMP_PWD2:
       MOV R0,#COM_BUFF          ;compare second byte password
       MOV @R0,#33H
       INC R0
       MOV @R0,#02H
       INC R0
       MOV A,@R1
       MOV @R0,A
       INC R1
       LCALL CARD_COM_MODE
       LCALL CARD_PRO_MODE
       CJNE A,#0FFH,COMP_PWD3
       LJMP	CHECK_QUIT           ;if dead line,return ff
COMP_PWD3:
       MOV R0,#COM_BUFF          ;compare third byte password
       MOV @R0,#33H
       INC R0
       MOV @R0,#03H
       INC R0
       MOV A,@R1
       MOV @R0,A
       LCALL CARD_COM_MODE
       LCALL CARD_PRO_MODE
       CJNE A,#0FFH,ERASE_EC
       LJMP	CHECK_QUIT           ;if dead line,return ff
ERASE_EC:
       MOV R0,#COM_BUFF          ;erase  ec
       MOV @R0,#39H
       INC R0
       MOV @R0,#00H
       INC R0
       MOV @R0,#0FFH
       LCALL CARD_COM_MODE
       LCALL CARD_PRO_MODE
       CJNE  A,#0FFH,ERASE_EC_END
       LJMP	CHECK_QUIT           ;if dead line,return ff
ERASE_EC_END:
       MOV R0,#COM_BUFF          ;read security 4 bytes
       MOV @R0,#31H
       INC R0
       MOV @R0,#0FFH
       INC R0
       MOV @R0,#0FFH
       MOV BYTE_COUNT,#4
       LCALL CARD_COM_MODE
       LCALL CARD_OUT_MODE
       CJNE A,#0FFH,CHK_RESULT
       LJMP	CHECK_QUIT           ;if dead line,return ff
CHK_RESULT:
       MOV DPTR,#IC_VALUE
       MOVX A,@DPTR
       ANL A,#00000111B
       CJNE A,#07H,CHK_PWD_FAIL  ;check if ec change to 07
CHK_PWD_OK:
       MOV A,#0                  ;if yes,check password ok
       LJMP	CHECK_QUIT
CHK_PWD_FAIL:
       MOV A,#0FCH               ;if no,check password fail
CHECK_QUIT:
	RET
;**********************************************
;FUNCTION BEEP_N 	BEEP N TIMES
;INPUT: A
;OUTPUT: NONE
;**********************************************
BEEP_N:
	MOV B,R7
	PUSH B
	MOV R7,A
	MOV A,#0FFH
BEEP_N_LOOP:
	CLR PIN_BEEPER
	MOV A,#0FFH
	LCALL DL_MS
	SETB PIN_BEEPER
	MOV A,#0FFH
	LCALL DL_MS
	DJNZ R7,BEEP_N_LOOP
	POP ACC
	MOV R7,A
	RET
;***********************************************
;FUNCTION DL_MS
;INPUT A
;OUTPUT NONE
;***********************************************
DL_MS:
	MOV B,R7
	PUSH B
	MOV B,R6
	PUSH B
	MOV R7,A	;DELAY A MS
DL_MS_LP_DL1:
	MOV R6,#250

DL_MS_LP_DL2:	NOP
	NOP
	DJNZ R6,DL_MS_LP_DL2
	DJNZ R7,DL_MS_LP_DL1

	POP ACC
	MOV R6,A
	POP ACC
	MOV R7,A
	RET
;----------------------------------
;DELAY	5US
;----------------------------------
PAUSE:	NOP
	NOP
	NOP
	NOP
	NOP
	RET
;-----------------------------------------------------------
DISPLAY:  MOV   R1,#06H          ;数码管显示的位数4
        MOV   R2,#00H          ;字型码首地址偏移量
display3:   MOV   DPTR,#TAB_1        ;表头地址
        MOV   A,R2
        MOVC  A,@A+DPTR        ;取段码
        ACALL display1           ;调显示子程序
        INC   R2              ;指向下一字型
        DJNZ  R1,display3
        ret
display1:  MOV   R3,#8           ;移位次数
        CLR  C
display2:  RRC   A               ;左移
        CLR   P1.1            ;发送一个移位脉冲
        NOP
        MOV   P1.0,C          ;送出一位段码
        NOP
        SETB  P1.1
        DJNZ  R3,display2
        RET


;-----------------------------------------------------------
;初始化显示程序
disp11:  MOV  SCON,#00H
start11:
        MOV  R0,#00H
        MOV  R1,#06h;#06H
LOOP11: MOV  A,#0
        MOV  SBUF,A
WAIT1:   JNB Ti,WAIT1
        CLR Ti
        INC R0
        DJNZ R1,loop11
        ret

;-----------------------------------------------------------
;显示子程序
disp1:  MOV  SCON,#00H
start1:
        MOV  R0,#00H
        MOV  R1,#06h;#06H
LOOP:   ;setb p3.1
        MOV  DPTR,#TAB
        MOV  A,R0
        MOVC  A,@A+DPTR
        MOV  SBUF,A
WAIT:   JNB Ti,WAIT
        CLR Ti
        ;ACALL DELAY
        ;clr ti
        INC R0
        DJNZ R1,loop
        ret
;tab:    DB 02h,0cEH,6eH,60H,1cH,02h
TBL_PSC:DB 12H,34H,56H
TBL_WT: DB 00H,11H,22H,33H,44H,55H,66H,77H
TAB_1:  DB 02h,0ceH,6eH,60H,1ch,02h   ;;(显示字型为:PHIL)
TAB:    DB 0FCH,60H,0DAH,0F2H,66h,0B6h   ;;(显示字型为:012345)

DL1MS:  MOV R7,#7FH
DL1MS_LOOP1:MOV R6,#7FH
DL1MS_LOOP: NOP
        NOP
        DJNZ R6,DL1MS_LOOP
        DJNZ R7,DL1MS_LOOP1
        RET
END

⌨️ 快捷键说明

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