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

📄 icccmd.src

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 SRC
📖 第 1 页 / 共 2 页
字号:
; .\out_sst89e564\icccmd.SRC generated from: source\icccmd.c
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE source\icccmd.c LARGE BROWSE ORDER NOAREGS DEBUG OBJECTEXTEND PRINT(.\icccmd.lst) SRC(.\out_sst89e564\icccmd.SRC)


NAME	ICCCMD

?PR?_IccSendCmd?ICCCMD                   SEGMENT CODE 
?XD?_IccSendCmd?ICCCMD                   SEGMENT XDATA OVERLAYABLE 
	EXTRN	CODE (_IccRead)
	EXTRN	CODE (_IccWrite)
	EXTRN	CODE (IccClear)
	EXTRN	CODE (?C?CLDOPTR)
	EXTRN	CODE (?C?COPY)
	EXTRN	CODE (?C?ILDIX)
	EXTRN	CODE (?C?CSTOPTR)
	PUBLIC	?_IccSendCmd?BYTE
	PUBLIC	_IccSendCmd

	RSEG  ?XD?_IccSendCmd?ICCCMD
?_IccSendCmd?BYTE:
        cmd?040:   DS   3
	ORG  3
        len?041:   DS   2
	ORG  5
        rsp?042:   DS   3
	ORG  8
          j?044:   DS   2
	ORG  10
          k?045:   DS   2
	ORG  12
  proc_char?046:   DS   1
	ORG  13
         LC?047:   DS   1
	ORG  14
         LE?048:   DS   1
	ORG  15
        tmp?049:   DS   1
	ORG  16
       tmp1?050:   DS   1
	ORG  17
       tmp2?051:   DS   1
	ORG  18
     cmdstr?052:   DS   5
; 	/************************
;  *    iccapp.c          *
;  * Designe by 刘俐训    *
;  * ic Card application  *
;  * update: 2004.07.08   *
;  ************************/
; #include <icc.h>
; #include <string.h>
; #include <icccmd.h>
; #include <uart.h>
; 
; // #define DEBUGICCCMD
; 
; int IccSendCmd(unsigned char *cmd, int len, unsigned char *rsp)

	RSEG  ?PR?_IccSendCmd?ICCCMD
_IccSendCmd:
	USING	0
			; SOURCE LINE # 14
	MOV  	DPTR,#cmd?040
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R4
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R5
	MOVX 	@DPTR,A
; {
			; SOURCE LINE # 15
;     int i, j, k;
;     unsigned char proc_char;
;     unsigned char LC, LE;
;     unsigned char tmp, tmp1, tmp2;   // 用于比较INS和过程字节的高7位
;     unsigned char cmdstr[5];
; 
;     IccClear();           //清缓冲区。
			; SOURCE LINE # 22
	LCALL	IccClear
;     
;     if(len < 4)
			; SOURCE LINE # 24
	MOV  	DPTR,#len?041
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	CLR  	C
	SUBB 	A,#04H
	MOV  	A,R4
	XRL  	A,#080H
	SUBB 	A,#080H
	JNC  	?C0001
;         return -1;
			; SOURCE LINE # 25
	MOV  	R6,#0FFH
	MOV  	R7,#0FFH
	RET  	
?C0001:
;     else if(len == 4)
			; SOURCE LINE # 26
	MOV  	A,R5
	XRL  	A,#04H
	ORL  	A,R4
	JNZ  	?C0004
;     {
			; SOURCE LINE # 27
;         LC = 0;
			; SOURCE LINE # 28
	MOV  	DPTR,#LC?047
	MOVX 	@DPTR,A
;         LE = 0;
			; SOURCE LINE # 29
	INC  	DPTR
	MOVX 	@DPTR,A
;     }
			; SOURCE LINE # 30
	SJMP 	?C0003
?C0004:
;     else if(len == 5)
			; SOURCE LINE # 31
	MOV  	DPTR,#len?041
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	XRL  	A,#05H
	ORL  	A,R6
	JNZ  	?C0006
;     {
			; SOURCE LINE # 32
;         LC = 0;
			; SOURCE LINE # 33
	MOV  	DPTR,#LC?047
	MOVX 	@DPTR,A
;         LE = cmd[4];
			; SOURCE LINE # 34
	MOV  	DPTR,#cmd?040
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#04H
;     }
			; SOURCE LINE # 35
	SJMP 	?C0036
?C0006:
;     else // if(len > 5)
;     {
			; SOURCE LINE # 37
;         LC = cmd[4];
			; SOURCE LINE # 38
	MOV  	DPTR,#cmd?040
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#04H
	LCALL	?C?CLDOPTR
	MOV  	R5,A
	MOV  	DPTR,#LC?047
	MOVX 	@DPTR,A
;         if(len - LC == 5)
			; SOURCE LINE # 39
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R5
	MOV  	R7,A
	MOV  	A,R6
	SUBB 	A,#00H
	MOV  	R6,A
	MOV  	A,R7
	XRL  	A,#05H
	ORL  	A,R6
	JNZ  	?C0008
;             LE = 0;
			; SOURCE LINE # 40
	INC  	DPTR
	MOVX 	@DPTR,A
	SJMP 	?C0003
?C0008:
;         else // if(len - LC == 6)
;             LE = cmd[5+LC];
			; SOURCE LINE # 42
	MOV  	DPTR,#LC?047
	MOVX 	A,@DPTR
	ADD  	A,#05H
	MOV  	DPL,A
	CLR  	A
	RLC  	A
	MOV  	DPH,A
?C0036:
	LCALL	?C?CLDOPTR
	MOV  	DPTR,#LE?048
	MOVX 	@DPTR,A
;     }
			; SOURCE LINE # 43
?C0003:
;     
;     memcpy(cmdstr, cmd, 5);
			; SOURCE LINE # 45
	MOV  	R0,#LOW (cmdstr?052)
	MOV  	R4,#HIGH (cmdstr?052)
	MOV  	R5,#01H
	MOV  	DPTR,#cmd?040
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	R6,#00H
	MOV  	R7,#05H
	LCALL	?C?COPY
; 
; 
; Startsend:
			; SOURCE LINE # 48
?_IccSendCmd?Startsend:
;     j = 0;
			; SOURCE LINE # 49
	CLR  	A
	MOV  	DPTR,#j?044
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
;     k = 0;
			; SOURCE LINE # 50
	INC  	DPTR
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
;     tmp1 = cmdstr[1] & 0xfe;    // mask the lsb
			; SOURCE LINE # 51
	MOV  	DPTR,#cmdstr?052+01H
	MOVX 	A,@DPTR
	ANL  	A,#0FEH
	MOV  	DPTR,#tmp1?050
	MOVX 	@DPTR,A
;     tmp2 = tmp1 | 0x01;
			; SOURCE LINE # 52
	ORL  	A,#01H
	INC  	DPTR
	MOVX 	@DPTR,A
;     i = IccWrite(cmdstr, 5);              /* send command head 5 bytes */
			; SOURCE LINE # 53
	MOV  	R3,#01H
	MOV  	R2,#HIGH (cmdstr?052)
	MOV  	R1,#LOW (cmdstr?052)
	MOV  	R5,#05H
	MOV  	R4,#00H
	LCALL	_IccWrite
;---- Variable 'i?043' assigned to Register 'R6/R7' ----
;     if(i < 5)
			; SOURCE LINE # 54
	CLR  	C
	MOV  	A,R7
	SUBB 	A,#05H
	MOV  	A,R6
	XRL  	A,#080H
	SUBB 	A,#080H
	JNC  	?_IccSendCmd?Proc
; 	{
			; SOURCE LINE # 55
;         #ifdef DEBUGICCCMD
;         ComWrite("\xff", 1);
;         #endif
; 
;         return -2;
			; SOURCE LINE # 60
	LJMP 	?C0044
; 	}
			; SOURCE LINE # 61
; 
;     
; Proc:
			; SOURCE LINE # 64
?_IccSendCmd?Proc:
;     i = IccRead(&proc_char, 1);             /* procedure byte */
			; SOURCE LINE # 65
	MOV  	R3,#01H
	MOV  	R2,#HIGH (proc_char?046)
	MOV  	R1,#LOW (proc_char?046)
	MOV  	R5,#01H
	MOV  	R4,#00H
	LCALL	_IccRead
;     if(i < 1)
			; SOURCE LINE # 66
	CLR  	C
	MOV  	A,R7
	SUBB 	A,#01H
	MOV  	A,R6
	XRL  	A,#080H
	SUBB 	A,#080H
	JNC  	?C0013
; 	{
			; SOURCE LINE # 67
;         #ifdef DEBUGICCCMD
;         ComWrite("\xee", 1);
;         #endif
; 
;         return -2;
			; SOURCE LINE # 72
?C0037:
	LJMP 	?C0044
; 	}
			; SOURCE LINE # 73
?C0013:
; 	
;     tmp = proc_char & 0xfe;     // mask the lsb
			; SOURCE LINE # 75
	MOV  	DPTR,#proc_char?046
	MOVX 	A,@DPTR
	ANL  	A,#0FEH
	MOV  	R5,A
	MOV  	DPTR,#tmp?049
	MOVX 	@DPTR,A
;     if(tmp1 == tmp)             // tmp1: lsb = 0, INS = proc_char
			; SOURCE LINE # 76
	INC  	DPTR
	MOVX 	A,@DPTR
	XRL  	A,R5
	JZ   	$ + 5H
	LJMP 	?C0014
;     {
			; SOURCE LINE # 77
;         // trans all left chars
;         if(LC > 0)
			; SOURCE LINE # 79
	MOV  	DPTR,#LC?047
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#00H
	JC   	?C0015
;         {
			; SOURCE LINE # 80
;             /* send lc */
;             i = IccWrite(cmd+5+j, LC);
			; SOURCE LINE # 82
	MOV  	DPTR,#cmd?040
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#05H
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
	MOV  	DPTR,#j?044
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,R1
	MOV  	R1,A
	MOV  	A,R2
	ADDC 	A,R6
	MOV  	R2,A
	MOV  	DPTR,#LC?047
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	R4,#00H
	LCALL	_IccWrite
;             if(i < LC)
			; SOURCE LINE # 83
	MOV  	DPTR,#LC?047
	MOVX 	A,@DPTR
	MOV  	R5,A
	MOV  	R4,#00H
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R5
	MOV  	A,#080H
	MOV  	R0,A
	XRL  	A,R6
	SUBB 	A,R0
	JNC  	?C0016
; 			{
			; SOURCE LINE # 84
;                 #ifdef DEBUGICCCMD
;                 ComWrite("\xdd", 1);
;                 #endif
; 
; 		        return -2;
			; SOURCE LINE # 89
?C0038:
	LJMP 	?C0044
; 			}
			; SOURCE LINE # 90
?C0016:
; 			
; 			j += LC;
			; SOURCE LINE # 92
	MOV  	DPTR,#j?044+01H
	MOVX 	A,@DPTR
	ADD  	A,R5
	MOVX 	@DPTR,A
	MOV  	DPTR,#j?044
	MOVX 	A,@DPTR
	ADDC 	A,R4
	MOVX 	@DPTR,A
; 			LC = 0;
			; SOURCE LINE # 93
	CLR  	A
	MOV  	DPTR,#LC?047
	MOVX 	@DPTR,A
; 			goto Proc;
			; SOURCE LINE # 94
	LJMP 	?_IccSendCmd?Proc
; 		}
			; SOURCE LINE # 95
?C0015:
;         
;         if(LE > 0)
			; SOURCE LINE # 97
	MOV  	DPTR,#LE?048
	MOVX 	A,@DPTR
	SETB 	C
	SUBB 	A,#00H
	JNC  	$ + 5H
	LJMP 	?_IccSendCmd?Proc
;         {
			; SOURCE LINE # 98
;             i = IccRead(rsp+k, LE);          // get response.data
			; SOURCE LINE # 99
	MOV  	DPTR,#rsp?042
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#k?045
	MOVX 	A,@DPTR
	MOV  	R6,A

⌨️ 快捷键说明

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