📄 icccmd.src
字号:
; .\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 + -