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

📄 iccpdir.src

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	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 + -