📄 iccpdir.src
字号:
MOV DPTR,#len?545
MOVX A,@DPTR
XRL A,#080H
SUBB A,R0
JC ?C0043
; {
; SOURCE LINE # 326
; starttime = GetTickCount();
; SOURCE LINE # 327
LCALL GetTickCount
MOV starttime?547,R6
MOV starttime?547+01H,R7
?C0045:
; while(!GetInputData(buf+i))
; SOURCE LINE # 328
MOV DPTR,#buf?544
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
ADD A,i?546+01H
MOV R1,A
MOV A,R2
ADDC A,i?546
MOV R2,A
LCALL _GetInputData
JC ?C0044
; {
; SOURCE LINE # 329
; if(GetTickCount() - starttime >= TIME_OUT_MS)
; SOURCE LINE # 330
LCALL GetTickCount
CLR C
MOV A,R7
SUBB A,starttime?547+01H
MOV R7,A
MOV A,R6
SUBB A,starttime?547
MOV R6,A
CLR C
MOV A,R7
SUBB A,TIME_OUT_MS+01H
MOV A,R6
SUBB A,TIME_OUT_MS
JC ?C0045
; return i;
; SOURCE LINE # 331
SJMP ?C0173
; }
; SOURCE LINE # 332
; }
; SOURCE LINE # 333
?C0044:
INC i?546+01H
MOV A,i?546+01H
JNZ ?C0042
INC i?546
?C0168:
SJMP ?C0042
?C0043:
; return i;
; SOURCE LINE # 334
?C0173:
MOV R6,i?546
MOV R7,i?546+01H
; }
; SOURCE LINE # 335
?C0048:
RET
; END OF _IccRead
;
; int IccWrite(char * buf, int len)
RSEG ?PR?_IccWrite?ICCPDIR
_IccWrite:
USING 0
; SOURCE LINE # 337
MOV DPTR,#buf?648
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 # 338
; int data i;
; unsigned int data starttime;
; unsigned char data trytimes = 3;
; SOURCE LINE # 341
MOV trytimes?652,#03H
;
; for(i=0; i<len; i++)
; SOURCE LINE # 343
CLR A
MOV i?650,A
MOV i?650+01H,A
?C0049:
SETB C
MOV DPTR,#len?649+01H
MOVX A,@DPTR
SUBB A,i?650+01H
MOV A,i?650
XRL A,#080H
MOV R0,A
MOV DPTR,#len?649
MOVX A,@DPTR
XRL A,#080H
SUBB A,R0
JNC $ + 5H
LJMP ?C0050
; {
; SOURCE LINE # 344
; starttime = GetTickCount();
; SOURCE LINE # 345
LCALL GetTickCount
MOV starttime?651,R6
MOV starttime?651+01H,R7
; SoftDelayCyl(ETU); // delay 2 etu
; SOURCE LINE # 346
SJMP ?C0174
?C0052:
; while(RxWorking)
; SOURCE LINE # 347
JNB RxWorking,?C0053
; {
; SOURCE LINE # 348
?C0054:
; while(RxWorking) // 重复两次是为了防止接收校验出错的重传
; SOURCE LINE # 349
JNB RxWorking,?C0055
; {
; SOURCE LINE # 350
; if(GetTickCount() - starttime >= TIME_OUT_MS)
; SOURCE LINE # 351
LCALL GetTickCount
CLR C
MOV A,R7
SUBB A,starttime?651+01H
MOV R7,A
MOV A,R6
SUBB A,starttime?651
MOV R6,A
CLR C
MOV A,R7
SUBB A,TIME_OUT_MS+01H
MOV A,R6
SUBB A,TIME_OUT_MS
JC ?C0054
; {
; SOURCE LINE # 352
; #if DEBUG_ICC
; ComWrite("\xff", 1);
; delay(3);
; #endif
; return i;
; SOURCE LINE # 357
SJMP ?C0175
; }
; SOURCE LINE # 358
; }
; SOURCE LINE # 359
?C0055:
; SoftDelayCyl(ETU); // delay 4 etu
; SOURCE LINE # 360
?C0174:
MOV R7,ETU+01H
LCALL _SoftDelayCyl
; }
; SOURCE LINE # 361
SJMP ?C0052
?C0053:
; SoftDelayCyl(ETU); // delay 2 etu
; SOURCE LINE # 362
MOV R7,ETU+01H
LCALL _SoftDelayCyl
;
; starttime = GetTickCount();
; SOURCE LINE # 364
LCALL GetTickCount
MOV starttime?651,R6
MOV starttime?651+01H,R7
; mycharp = buf[i];
; SOURCE LINE # 365
MOV DPTR,#buf?648
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
MOV DPL,i?650+01H
MOV DPH,i?650
LCALL ?C?CLDOPTR
MOV mycharp,A
;
; ///////////////////////////////////
; // initialize for current byte
; // get parity bit
; ACC = mycharp;
; SOURCE LINE # 370
; TxParity = P;
; SOURCE LINE # 371
MOV C,P
MOV TxParity,C
; if(!dir)
; SOURCE LINE # 372
JB dir,?C0058
; {
; SOURCE LINE # 373
; mycharp = ~mycharp;
; SOURCE LINE # 374
XRL mycharp,#0FFH
; TxParity = ~TxParity;
; SOURCE LINE # 375
CPL TxParity
; }
; SOURCE LINE # 376
?C0058:
;
; // clear parity error
; parityerror = 0;
; SOURCE LINE # 379
CLR A
MOV parityerror,A
; // clear endflag
; endflag = 0;
; SOURCE LINE # 381
MOV endflag,A
; // set bit counter
; bitcounter = 8;
; SOURCE LINE # 383
MOV bitcounter,#08H
;
; // disable receive interrupt
; IccDisable(); // EX1 = 0;
; SOURCE LINE # 386
CLR EX1
;
; disable(); // enter critical section
; SOURCE LINE # 388
CLR EA
; InitUserTimer(RLD, TxRLDStart);
; SOURCE LINE # 389
MOV R5,TxRLDStart
MOV R7,RLD
LCALL _InitUserTimer
; StartSend();
; SOURCE LINE # 390
SETB TxNotRx
CLR P3_3
; enable(); // leave critical section
; SOURCE LINE # 391
SETB EA
?C0059:
;
; while(TxNotRx)
; SOURCE LINE # 393
JNB TxNotRx,?C0060
; {
; SOURCE LINE # 394
; if(GetTickCount() - starttime >= TIME_OUT_MS)
; SOURCE LINE # 395
LCALL GetTickCount
CLR C
MOV A,R7
SUBB A,starttime?651+01H
MOV R7,A
MOV A,R6
SUBB A,starttime?651
MOV R6,A
CLR C
MOV A,R7
SUBB A,TIME_OUT_MS+01H
MOV A,R6
SUBB A,TIME_OUT_MS
JC ?C0059
; {
; SOURCE LINE # 396
; TxNotRx = 0;
; SOURCE LINE # 397
CLR TxNotRx
; #if DEBUG_ICC
; ComWrite("\xee", 1);
; delay(3);
; #endif
; return i;
; SOURCE LINE # 402
SJMP ?C0177
; }
; SOURCE LINE # 403
; }
; SOURCE LINE # 404
?C0060:
; if(parityerror)
; SOURCE LINE # 405
MOV A,parityerror
JZ ?C0051
; {
; SOURCE LINE # 406
; trytimes --;
; SOURCE LINE # 407
DJNZ trytimes?652,?C0063
; if(!trytimes)
; SOURCE LINE # 408
; {
; SOURCE LINE # 409
; #if DEBUG_ICC
; ComWrite("\xdd", 1);
; delay(3);
; #endif
; return i;
; SOURCE LINE # 414
?C0175:
?C0176:
SJMP ?C0177
; }
; SOURCE LINE # 415
?C0063:
; else
; i --;
; SOURCE LINE # 417
MOV A,i?650+01H
DEC i?650+01H
JNZ ?C0169
DEC i?650
?C0169:
; }
; SOURCE LINE # 418
; //SoftDelayCyl(ETU); // delay 2 etu
; }
; SOURCE LINE # 420
?C0051:
INC i?650+01H
MOV A,i?650+01H
JNZ ?C0170
INC i?650
?C0170:
LJMP ?C0049
?C0050:
; return i;
; SOURCE LINE # 421
?C0177:
MOV R6,i?650
MOV R7,i?650+01H
; }
; SOURCE LINE # 422
?C0057:
RET
; END OF _IccWrite
;
; void IccClear(void)
RSEG ?PR?IccClear?ICCPDIR
IccClear:
; SOURCE LINE # 424
; {
; SOURCE LINE # 425
; ibufputidx = ibufgetidx;
; SOURCE LINE # 426
MOV ibufputidx,ibufgetidx
; RxWorking = 0;
; SOURCE LINE # 427
CLR RxWorking
; TxNotRx = 0;
; SOURCE LINE # 428
CLR TxNotRx
; ICCIO = 1; // 输入状态
; SOURCE LINE # 429
SETB P3_3
;
; // if smart card
; IccEnable();
; SOURCE LINE # 432
CLR IE1
SETB EX1
; // else do nothing
; }
; SOURCE LINE # 434
RET
; END OF IccClear
;
; /*** set time out time in receiving a char from sam ***/
; void IccSetTimeout(unsigned int ms)
RSEG ?PR?_IccSetTimeout?ICCPDIR
_IccSetTimeout:
; SOURCE LINE # 437
;---- Variable 'ms?853' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 438
; TIME_OUT_MS = ms;
; SOURCE LINE # 439
MOV TIME_OUT_MS,R6
MOV TIME_OUT_MS+01H,R7
; }
; SOURCE LINE # 440
RET
; END OF _IccSetTimeout
;
;
; int IccOpen(char *buf) // ICC_INFO *info)
RSEG ?PR?_IccOpen?ICCPDIR
_IccOpen:
USING 0
; SOURCE LINE # 443
MOV DPTR,#buf?954
MOV A,R3
MOVX @DPTR,A
INC DPTR
MOV A,R2
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
; {
; SOURCE LINE # 444
; unsigned char data i, j;
; unsigned char data format;
; unsigned char data mylrc;
; unsigned char data CWI, BWI;
; unsigned char data inchar;
; unsigned int data oldtmo;
; unsigned char data nhistory;
;
; if(0x03 == CardId)
; SOURCE LINE # 453
MOV DPTR,#CardId
MOVX A,@DPTR
CJNE A,#03H,?C0067
; {
; SOURCE LINE # 454
; ICCUSERSCLK = 0;
; SOURCE LINE # 455
CLR P1_2
; ICCUSERCLKC = 1;
; SOURCE LINE # 456
SETB P1_1
; }
; SOURCE LINE # 457
?C0067:
;
; ICCIO = 1;
; SOURCE LINE # 459
SETB P3_3
;
; mylrc = 0;
; SOURCE LINE # 461
CLR A
MOV mylrc?958,A
; // info->protocolid = 0;
; // info->infolen = INFOLEN;
;
; oldtmo = TIME_OUT_MS;
; SOURCE LINE # 465
MOV oldtmo?962,TIME_OUT_MS
MOV oldtmo?962+01H,TIME_OUT_MS+01H
; TIME_OUT_MS = 1200;
; SOURCE LINE # 466
MOV TIME_OUT_MS,#04H
MOV TIME_OUT_MS+01H,#0B0H
; IccEnable();
; SOURCE LINE # 467
CLR IE1
SETB EX1
;
; for(j=0; j<4; j++)
; SOURCE LINE # 469
MOV j?956,A
?C0068:
; {
; SOURCE LINE # 470
; parityerrorcnt = 0;
; SOURCE LINE # 471
CLR A
MOV parityerrorcnt,A
; attr[CardId].dir = 1;
; SOURCE LINE # 472
MOV DPTR,#CardId
MOVX A,@DPTR
MOV R7,A
ADD A,#LOW (attr)
MOV DPL,A
CLR A
ADDC A,#HIGH (attr)
MOV DPH,A
MOVX A,@DPTR
ORL A,#08H
MOVX @DPTR,A
; dir = 1;
; SOURCE LINE # 473
SETB dir
;
; if(0x03 == CardId)
; SOURCE LINE # 475
MOV A,R7
MOV R7,#0AH
MOV R6,#00H
CJNE A,#03H,?C0071
; {
; SOURCE LINE # 476
; delay(10);
; SOURCE LINE # 477
LCALL _delay
; USERRST = 0;
; SOURCE LINE # 478
CLR P2_0
; delay(10);
; SOURCE LINE # 479
MOV R7,#0AH
MOV R6,#00H
LCALL _delay
; IccClear();
; SOURCE LINE # 480
LCALL IccClear
; fReset = 1;
; SOURCE LINE # 481
SETB fReset
; USERRST = 1;
; SOURCE LINE # 482
SETB P2_0
; }
; SOURCE LINE # 483
SJMP ?C0072
?C0071:
; else
; {
; SOURCE LINE # 485
; delay(10);
; SOURCE LINE # 486
LCALL _delay
; ICCRST = 0;
; SOURCE LINE # 487
CLR P3_4
; delay(10);
; SOURCE LINE # 488
MOV R7,#0AH
MOV R6,#00H
LCALL _delay
; IccClear();
; SOURCE LINE # 489
LCALL IccClear
; fReset = 1;
; SOURCE LINE # 490
SETB fReset
; ICCRST = 1;
; SOURCE LINE # 491
SETB P3_4
; }
; SOURCE LINE # 492
?C0072:
;
; i=IccRead(buf, 1); // TS
; SOURCE LINE # 494
MOV DPTR,#buf?954
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R1,A
LCALL L?0195
MOV i?955,R7
; if (i < 1)
; SOURCE LINE # 495
MOV A,i?955
CLR C
SUBB A,#01H
JNC ?C0073
; {
; SOURCE LINE # 496
; if(parityerrorcnt && attr[CardId].autob)
; SOURCE LINE # 497
MOV A,parityerrorcnt
JZ ?C0074
MOV DPTR,#CardId
MOVX A,@DPTR
MOV R7,A
ADD A,#LOW (attr)
MOV DPL,A
CLR A
ADDC A,#HIGH (attr)
MOV DPH,A
MOVX A,@DPTR
MOV R6,A
RRC A
RRC A
ANL A,#03FH
JNB ACC.0,?C0074
; {
; SOURCE LINE # 498
; attr[CardId].etu ++;
; SOURCE LINE # 499
; IccInitETU(IccEtu[attr[CardId].etu]);
; SOURCE LINE # 500
; continue;
; SOURCE LINE # 501
SJMP ?C0179
; }
; SOURCE LINE # 502
?C0074:
; else
; {
; SOURCE LINE # 504
; TIME_OUT_MS = oldtmo;
; SOURCE LINE # 505
; return 0;
; SOURCE LINE # 506
LJMP ?C0180
; }
; SOURCE LINE # 507
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -