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

📄 iccpdir.src

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	JNB  	ACC.4,?C0101
;             {
			; SOURCE LINE # 647
;                 /*TA3: IC卡信息域大小整数*/     /* T=1 时存在=0xb7 */
;                 i=IccRead(&inchar, 1);
			; SOURCE LINE # 649
	LCALL	L?0193
	MOV  	i?955,R7
;                 if (i < 1)
			; SOURCE LINE # 650
	MOV  	A,i?955
	CLR  	C
	SUBB 	A,#01H
	JNC  	?C0102
;                 {
			; SOURCE LINE # 651
;                     TIME_OUT_MS = oldtmo;
			; SOURCE LINE # 652
?C0189:
;                     return j;
			; SOURCE LINE # 653
	LJMP 	?C0191
;                 }
			; SOURCE LINE # 654
?C0102:
;                 mylrc ^= inchar;
			; SOURCE LINE # 655
	MOV  	A,inchar?961
	XRL  	mylrc?958,A
;                 buf[j++] = inchar;
			; SOURCE LINE # 656
	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
	MOV  	R7,j?956
	INC  	j?956
	MOV  	DPL,R7
	MOV  	DPH,#00H
	MOV  	A,inchar?961
	LCALL	?C?CSTOPTR
;                 // info->infolen = inchar;
;             }
			; SOURCE LINE # 658
?C0101:
;             if (format & 0x20)
			; SOURCE LINE # 659
	MOV  	A,format?957
	JNB  	ACC.5,?C0103
;             {
			; SOURCE LINE # 660
;                 /*TB3: CWI和BWI*/               /* T=1 时存在=0x45 */
;                 i=IccRead(&inchar, 1);
			; SOURCE LINE # 662
	LCALL	L?0193
	MOV  	i?955,R7
;                 if (i < 1)
			; SOURCE LINE # 663
	MOV  	A,i?955
	CLR  	C
	SUBB 	A,#01H
	JNC  	?C0104
;                 {
			; SOURCE LINE # 664
;                     TIME_OUT_MS = oldtmo;
			; SOURCE LINE # 665
?C0190:
;                     return j;
			; SOURCE LINE # 666
	SJMP 	?C0191
;                 }
			; SOURCE LINE # 667
?C0104:
;                 mylrc ^= inchar;
			; SOURCE LINE # 668
	MOV  	A,inchar?961
	XRL  	mylrc?958,A
;                 buf[j++] = inchar;
			; SOURCE LINE # 669
	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
	MOV  	R7,j?956
	INC  	j?956
	MOV  	DPL,R7
	MOV  	DPH,#00H
	MOV  	A,inchar?961
	LCALL	?C?CSTOPTR
;                 CWI = inchar >> 4;
			; SOURCE LINE # 670
	MOV  	A,inchar?961
	SWAP 	A
	ANL  	A,#0FH
	MOV  	CWI?959,A
;                 BWI = inchar & 0x0f;
			; SOURCE LINE # 671
	MOV  	A,inchar?961
	ANL  	A,#0FH
	MOV  	BWI?960,A
;                 //计算CWT、BWT
;             }
			; SOURCE LINE # 673
?C0103:
;             if (format & 0x40)
			; SOURCE LINE # 674
	MOV  	A,format?957
	JNB  	ACC.6,?C0091
;             {
			; SOURCE LINE # 675
;                 /*TC3: 块错误检测代码类型*/
;                 i=IccRead(&inchar, 1);
			; SOURCE LINE # 677
	LCALL	L?0193
	MOV  	i?955,R7
;                 if (i < 1)
			; SOURCE LINE # 678
	MOV  	A,i?955
	CLR  	C
	SUBB 	A,#01H
	JNC  	?C0106
;                 {
			; SOURCE LINE # 679
;                     TIME_OUT_MS = oldtmo;
			; SOURCE LINE # 680
?C0191:
	MOV  	TIME_OUT_MS,oldtmo?962
	MOV  	TIME_OUT_MS+01H,oldtmo?962+01H
;                     return j;
			; SOURCE LINE # 681
	MOV  	R7,j?956
	MOV  	R6,#00H
	RET  	
;                 }
			; SOURCE LINE # 682
?C0106:
;                 mylrc ^= inchar;
			; SOURCE LINE # 683
	MOV  	A,inchar?961
	XRL  	mylrc?958,A
;                 buf[j++] = inchar;
			; SOURCE LINE # 684
	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
	MOV  	R7,j?956
	INC  	j?956
	MOV  	DPL,R7
	MOV  	DPH,#00H
	MOV  	A,inchar?961
	LCALL	?C?CSTOPTR
;             }
			; SOURCE LINE # 685
;         }
			; SOURCE LINE # 686
;     }
			; SOURCE LINE # 687
?C0091:
;     
;     i = IccRead(buf+j, nhistory);      /* 获取历史字符 */
			; SOURCE LINE # 689
	MOV  	DPTR,#buf?954
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R6,#00H
	ADD  	A,j?956
	MOV  	R1,A
	MOV  	A,R6
	ADDC 	A,R2
	MOV  	R2,A
	MOV  	A,nhistory?963
	MOV  	R5,A
	MOV  	R4,#00H
	LCALL	_IccRead
	MOV  	i?955,R7
;     if(i < nhistory)
			; SOURCE LINE # 690
	MOV  	A,i?955
	CLR  	C
	SUBB 	A,nhistory?963
	JNC  	?C0107
;     {
			; SOURCE LINE # 691
;         TIME_OUT_MS = oldtmo;
			; SOURCE LINE # 692
	MOV  	TIME_OUT_MS,oldtmo?962
	MOV  	TIME_OUT_MS+01H,oldtmo?962+01H
;         return j+i;
			; SOURCE LINE # 693
	MOV  	A,j?956
	ADD  	A,R7
	SJMP 	?C0178
;     }
			; SOURCE LINE # 694
?C0107:
;     
;     /*    
;     if (info->protocolid != 0)
;     {
;         i = IccRead(&inchar, 1);
;         if(i < 1)
;         {
;             TIME_OUT_MS = oldtmo;
;             return 0;
;         }
;             
;         for(i=0; i<info->historylen; i++)
;             mylrc ^= info->history[i];
;             
;         if(mylrc != inchar)     // 校验错误
;         {
;             TIME_OUT_MS = oldtmo;
;             return 0;
;         }
;     }
;     */
;         
;     /*reset success*/
;     TIME_OUT_MS = oldtmo;
			; SOURCE LINE # 718
	MOV  	TIME_OUT_MS,oldtmo?962
	MOV  	TIME_OUT_MS+01H,oldtmo?962+01H
;     return j+nhistory;
			; SOURCE LINE # 719
	MOV  	A,j?956
	ADD  	A,nhistory?963
?C0178:
	MOV  	R7,A
	CLR  	A
	RLC  	A
	MOV  	R6,A
; }
			; SOURCE LINE # 720
?C0076:
	RET  	
; END OF _IccOpen

; 
; /*** install etu for sam ***/
; void IccInit(void)

	RSEG  ?PR?IccInit?ICCPDIR
IccInit:
	USING	0
			; SOURCE LINE # 723
; {
			; SOURCE LINE # 724
;     // disable user power
;     IccUserPower(0);
			; SOURCE LINE # 726
	CLR  	?IccUserPower?BIT
	LCALL	IccUserPower
; 
;     // start sam clk
;     StartCLKO(2);
			; SOURCE LINE # 729
	MOV  	R7,#02H
	MOV  	R6,#00H
	LCALL	_StartCLKO
;     
;     // preparing for transmiting and receiving
;     RxWorking = 0;
			; SOURCE LINE # 732
	CLR  	RxWorking
;     TxParity = 0;
			; SOURCE LINE # 733
	CLR  	TxParity
;     TxNotRx = 0;
			; SOURCE LINE # 734
	CLR  	TxNotRx
;     
;     // 
;     ICCUSEREJECT = 1;       // disable eject card
			; SOURCE LINE # 737
	SETB 	P1_4
;     ICCUSERCLS = 1;         // set to input mode
			; SOURCE LINE # 738
	SETB 	P2_5
;     ICCUSEROVLD = 1;        // set to input mode
			; SOURCE LINE # 739
	SETB 	P2_6
;     ICCIO = 1;              // set to input mode
			; SOURCE LINE # 740
	SETB 	P3_3
;     ICCRST = 0;             // 
			; SOURCE LINE # 741
	CLR  	P3_4
;     USERRST = 0;
			; SOURCE LINE # 742
	CLR  	P2_0
; 
;     // set transmit and receive interrupt
;     SetIntPri(IE1_VECTOR, 3);
			; SOURCE LINE # 745
	MOV  	R5,#03H
	MOV  	R7,#02H
	LCALL	_SetIntPri
;         
;     IT1 = 1;                // 下降沿触发
			; SOURCE LINE # 747
	SETB 	IT1
; }
			; SOURCE LINE # 748
	RET  	
; END OF IccInit

; 
; // power on/off user card and enable/disable clock output
; void IccUserPower(bit en)

	RSEG  ?PR?IccUserPower?ICCPDIR
IccUserPower:
			; SOURCE LINE # 751
; {
			; SOURCE LINE # 752
;     // disable clock out
;     ICCUSERSCLK = 0;
			; SOURCE LINE # 754
	CLR  	P1_2
;     ICCUSERCLKC = 0;
			; SOURCE LINE # 755
	CLR  	P1_1
; 
;     if(en)
			; SOURCE LINE # 757
	JNB  	en?1164,?C0109
;     {
			; SOURCE LINE # 758
;         // VCC on
;         ICCUSERVCCC = 0;     
			; SOURCE LINE # 760
	CLR  	P2_1
;     }
			; SOURCE LINE # 761
	RET  	
?C0109:
;     else
;     {
			; SOURCE LINE # 763
;         // RST = 0
;         USERRST = 0;
			; SOURCE LINE # 765
	CLR  	P2_0
;         // VCC off
;         ICCUSERVCCC = 1;
			; SOURCE LINE # 767
	SETB 	P2_1
;     }
			; SOURCE LINE # 768
; }
			; SOURCE LINE # 769
?C0111:
	RET  	
; END OF IccUserPower

; 
; 
; ///////////////////////////////////////////
; // for user card mechanical interface
; 
; bit IccUserTest(void)

	RSEG  ?PR?IccUserTest?ICCPDIR
IccUserTest:
			; SOURCE LINE # 775
; {
			; SOURCE LINE # 776
;     return ICCUSERCLS;
			; SOURCE LINE # 777
	MOV  	C,P2_5
; }
			; SOURCE LINE # 778
?C0112:
	RET  	
; END OF IccUserTest

; 
; // eject card
; bit IccUserEject(void)

	RSEG  ?PR?IccUserEject?ICCPDIR
IccUserEject:
	USING	0
			; SOURCE LINE # 781
; {
			; SOURCE LINE # 782
;     unsigned char i;
;     
;     ICCUSERCLKC = 0;
			; SOURCE LINE # 785
	CLR  	P1_1
;     for(i=0; i<6; i++)
			; SOURCE LINE # 786
	CLR  	A
	MOV  	DPTR,#i?1365
	MOVX 	@DPTR,A
?C0113:
;     {
			; SOURCE LINE # 787
;         ICCUSEREJECT = 0;
			; SOURCE LINE # 788
	CLR  	P1_4
;         delay(80);
			; SOURCE LINE # 789
	MOV  	R7,#050H
	MOV  	R6,#00H
	LCALL	_delay
;         ICCUSEREJECT = 1;
			; SOURCE LINE # 790
	SETB 	P1_4
;         if(!ICCUSERCLS)
			; SOURCE LINE # 791
	JB   	P2_5,?C0116
;             return 1;
			; SOURCE LINE # 792
	SETB 	C
	RET  	
?C0116:
;         delay(50);
			; SOURCE LINE # 793
	MOV  	R7,#032H
	MOV  	R6,#00H
	LCALL	_delay
;     }
			; SOURCE LINE # 794
	MOV  	DPTR,#i?1365
	MOVX 	A,@DPTR
	INC  	A
	MOVX 	@DPTR,A
	MOVX 	A,@DPTR
	CLR  	C
	SUBB 	A,#06H
	JC   	?C0113
?C0114:
; 
;     return 0;
			; SOURCE LINE # 796
	CLR  	C
; }
			; SOURCE LINE # 797
?C0117:
	RET  	
; END OF IccUserEject

; 
; // get overload status
; bit IccUserOverLoad(void)

	RSEG  ?PR?IccUserOverLoad?ICCPDIR
IccUserOverLoad:
	USING	0
			; SOURCE LINE # 800
; {
			; SOURCE LINE # 801
;     static unsigned int ovtime = 0;
;     
;     if(ICCUSEROVLD)
			; SOURCE LINE # 804
	JNB  	P2_6,?C0118
;     {
			; SOURCE LINE # 805
;         ovtime = GetTickCount();
			; SOURCE LINE # 806
	LCALL	GetTickCount
	MOV  	DPTR,#ovtime?1466
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
;         return 0;
			; SOURCE LINE # 807
	CLR  	C
	RET  	
;     }
			; SOURCE LINE # 808
?C0118:
;     else
;     {
			; SOURCE LINE # 810
;         if(GetTickCount() - ovtime >= 20)
			; SOURCE LINE # 811
	LCALL	GetTickCount
	MOV  	DPTR,#ovtime?1466
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	CLR  	C
	MOV  	A,R7
	SUBB 	A,R5
	MOV  	R7,A
	MOV  	A,R6
	SUBB 	A,R4
	MOV  	R6,A
	CLR  	C
	MOV  	A,R7
	SUBB 	A,#014H
	MOV  	A,R6
	SUBB 	A,#00H
	JC   	?C0121
;         {
			; SOURCE LINE # 812
;             // power off and eject card
;             IccUserPower(0);
			; SOURCE LINE # 814
	CLR  	?IccUserPower?BIT
	LCALL	IccUserPower
;             IccUserEject();
			; SOURCE LINE # 815
	LCALL	IccUserEject
;             return 1;
			; SOURCE LINE # 816
	SETB 	C
	RET  	
;         }
			; SOURCE LINE # 817
?C0121:
;         else
;             return 0;
			; SOURCE LINE # 819
	CLR  	C
;     }
			; SOURCE LINE # 820
; }
			; SOURCE LINE # 821
?C0119:
	RET  	
; END OF IccUserOverLoad

; 
; // write some bytes and read some bytes
; bit IccSyncWRWithACK(void *wbuf, int wlen, void *rbuf, int rlen)

	RSEG  ?PR?_IccSyncWRWithACK?ICCPDIR
_IccSyncWRWithACK:
	USING	0
			; SOURCE LINE # 824
	MOV  	DPTR,#wbuf?1567
	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 # 825
;     int i;
; 
;     // start
;     IccSyncStart();
			; SOURCE LINE # 829
	LCALL	IccSyncStart
;     
;     // write
;     for(i=0; i<wlen; i++)
			; SOURCE LINE # 832
	CLR  	A
	MOV  	DPTR,#i?1571
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
?C0123:
	MOV  	DPTR,#wlen?1568
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPTR,#i?1571
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	CLR  	C
	SUBB 	A,R7
	MOV  	A,R6
	XRL  	A,#080H
	MOV  	R0,A
	MOV  	A,R4
	XRL  	A,#080H
	SUBB 	A,R0
	JNC  	?C0124
;     {
			; SOURCE LINE # 833
;         if(!IccSyncPutCharWaitACK(((unsigned char *)wbuf)[i]))
			; SOURCE LINE # 834
	MOV  	DPTR,#wbuf?1567
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	M

⌨️ 快捷键说明

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