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

📄 iccpdir.src

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 SRC
📖 第 1 页 / 共 5 页
字号:
?C0006:
;         else
;         {
			; SOURCE LINE # 130
;             if(dir)
			; SOURCE LINE # 131
	MOV  	A,mycharp
	JNB  	dir,?C0008
;                 mycharp >>= 1;
			; SOURCE LINE # 132
	CLR  	C
	RRC  	A
	MOV  	mycharp,A
	SJMP 	?C0009
?C0008:
;             else
;                 mycharp <<= 1;
			; SOURCE LINE # 134
	ADD  	A,ACC
	MOV  	mycharp,A
?C0009:
;             
;             ICCIO = CY;
			; SOURCE LINE # 136
	MOV  	P3_3,C
;             bitcounter --;
			; SOURCE LINE # 137
	DEC  	bitcounter
;         }
			; SOURCE LINE # 138
	RET  	
;         return;
;     }
			; SOURCE LINE # 140
?C0001:
;     else
;     {
			; SOURCE LINE # 142
;         bioport = dir ? ICCIO : ~ICCIO;             // 首先取得端口数据,保证时间准确
			; SOURCE LINE # 143
	JNB  	dir,?C0012
	MOV  	C,P3_3
	SJMP 	?C0013
?C0012:
	MOV  	C,P3_3
	CPL  	C
?C0013:
	MOV  	bioport?040,C
;         
;         if(parityerror)
			; SOURCE LINE # 145
	MOV  	A,parityerror
	JZ   	?C0014
;         {
			; SOURCE LINE # 146
;             if(parityerror == 1)        // parity error bit start
			; SOURCE LINE # 147
	CJNE 	A,#01H,?C0015
;             {
			; SOURCE LINE # 148
;                 ICCIO = 0;   // show error
			; SOURCE LINE # 149
	CLR  	P3_3
;                 parityerror ++;
			; SOURCE LINE # 150
	INC  	parityerror
;             }
			; SOURCE LINE # 151
	RET  	
?C0015:
;             else                        // parity error bit end
;             {
			; SOURCE LINE # 153
;                 ICCIO = 1;
			; SOURCE LINE # 154
	SETB 	P3_3
;                 
;                 parityerror = 0;
			; SOURCE LINE # 156
	CLR  	A
	MOV  	parityerror,A
;                 DiUserTimer();          // disable user timer interrupt
			; SOURCE LINE # 157
	CLR  	ET0
;                 IccEnable();
			; SOURCE LINE # 158
	CLR  	IE1
	SETB 	EX1
;                 RxWorking = 0;
			; SOURCE LINE # 159
	CLR  	RxWorking
;             }
			; SOURCE LINE # 160
	RET  	
;             return;
;         }
			; SOURCE LINE # 162
?C0014:
;         
;         // if(!endflag)
;         if(bitcounter)
			; SOURCE LINE # 165
	MOV  	A,bitcounter
	JZ   	?C0017
;         {
			; SOURCE LINE # 166
;             if(dir)
			; SOURCE LINE # 167
	MOV  	A,mycharp
	JNB  	dir,?C0018
;             {
			; SOURCE LINE # 168
;                 /*
;                 mycharp >>= 1;
;                 if(bioport)
;                     mycharp |= 0x80;
;                 */
;                 ACC = mycharp;
			; SOURCE LINE # 174
;                 CY = bioport;
			; SOURCE LINE # 175
	MOV  	C,bioport?040
;                 #pragma asm
;                 RRC     A;
	  RRC     A;
;                 #pragma endasm
;                 mycharp = ACC;
			; SOURCE LINE # 179
	MOV  	mycharp,A
;             }
			; SOURCE LINE # 180
	SJMP 	?C0019
?C0018:
;             else
;             {
			; SOURCE LINE # 182
;                 /*
;                 mycharp <<= 1;
;                 if(bioport)
;                     mycharp |= 0x01;
;                 */
;                 ACC = mycharp;
			; SOURCE LINE # 188
;                 CY = bioport;
			; SOURCE LINE # 189
	MOV  	C,bioport?040
;                 #pragma asm
;                 RLC     A;
	  RLC     A;
;                 #pragma endasm
;                 mycharp = ACC;
			; SOURCE LINE # 193
	MOV  	mycharp,A
;             }
			; SOURCE LINE # 194
?C0019:
;                 
;             bitcounter --;  /////////////////////////
			; SOURCE LINE # 196
	DEC  	bitcounter
	RET  	
;             
; 			return;
;         }
			; SOURCE LINE # 199
?C0017:
; 
;         ACC = mycharp;
			; SOURCE LINE # 201
	MOV  	A,mycharp
;         if(P == bioport)                            /* 校验正确 */
			; SOURCE LINE # 202
	MOV  	C,P
	JNB  	bioport?040,?C0167
	CPL  	C
?C0167:
	JC   	?C0020
;         {
			; SOURCE LINE # 203
;             FillBuf:
			; SOURCE LINE # 204
?iccgetputonebit?FillBuf:
;             if(ibufputidx != ibufgetidx-1)                              // ;             
			; SOURCE LINE # 205
	MOV  	A,ibufgetidx
	DEC  	A
	XRL  	A,ibufputidx
	JZ   	?C0022
;             {                                                           //  |            
			; SOURCE LINE # 206
;                 if( (ibufputidx != SSBUF_SIZE-1) || (ibufgetidx != 0) ) //  |            
			; SOURCE LINE # 207
	MOV  	A,ibufputidx
	CJNE 	A,#03FH,?C0024
	MOV  	A,ibufgetidx
	JZ   	?C0022
?C0024:
;                 {                                                       //  |            
			; SOURCE LINE # 208
;                     IBUF[ibufputidx++] = mycharp;                       //   > fill buf  
			; SOURCE LINE # 209
	MOV  	R7,ibufputidx
	INC  	ibufputidx
	MOV  	A,#LOW (IBUF)
	ADD  	A,R7
	MOV  	R0,A
	MOV  	@R0,mycharp
;                     if(ibufputidx == SSBUF_SIZE)                        //  |
			; SOURCE LINE # 210
	MOV  	A,ibufputidx
	CJNE 	A,#040H,?C0022
;                         ibufputidx = 0;                                 //  |
			; SOURCE LINE # 211
	CLR  	A
	MOV  	ibufputidx,A
;                 }                                                       //  |            
			; SOURCE LINE # 212
;             }                                                           // /
			; SOURCE LINE # 213
?C0022:
;             
;             DiUserTimer();                          // disable user timer interrupt
			; SOURCE LINE # 215
	CLR  	ET0
;             IccEnable();
			; SOURCE LINE # 216
	CLR  	IE1
	SETB 	EX1
;             RxWorking = 0;
			; SOURCE LINE # 217
	CLR  	RxWorking
;             // clear reseting flag
;             fReset = 0;
			; SOURCE LINE # 219
	CLR  	fReset
	RET  	
;             return;
;         }
			; SOURCE LINE # 221
?C0020:
;         
;         // 校验不正确,首先看是否是复位应答的开始字节TS
;         if(fReset && (mycharp == 0x03))
			; SOURCE LINE # 224
	JNB  	fReset,?C0026
	MOV  	A,mycharp
	CJNE 	A,#03H,?C0026
;         {
			; SOURCE LINE # 225
;             dir = 0;        // 反向协议
			; SOURCE LINE # 226
	CLR  	dir
;             mycharp = 0x3f;
			; SOURCE LINE # 227
	MOV  	mycharp,#03FH
;             goto FillBuf;
			; SOURCE LINE # 228
	SJMP 	?iccgetputonebit?FillBuf
;         }
			; SOURCE LINE # 229
?C0026:
;         
;         // 设校验错误标志并计数
;         // P2_0 = 1;/////////////////////////////////////////////////////////////////////////////////////////////////////////
;         parityerror = 1;
			; SOURCE LINE # 233
	MOV  	parityerror,#01H
;         parityerrorcnt ++;
			; SOURCE LINE # 234
	INC  	parityerrorcnt
;         // clear reseting flag
;         fReset = 0;
			; SOURCE LINE # 236
	CLR  	fReset
;         return;
;     }
			; SOURCE LINE # 238
; }
			; SOURCE LINE # 239
?C0010:
	RET  	
; END OF iccgetputonebit

CSEG	AT	00013H
	LJMP	TxRxdata

; 
; void TxRxdata(void) interrupt IE1_VECTOR using 3    //2

	RSEG  ?PR?TxRxdata?ICCPDIR
	USING	3
TxRxdata:
	PUSH 	ACC
	PUSH 	B
	PUSH 	DPH
	PUSH 	DPL
	PUSH 	PSW
	USING	3
	MOV  	PSW,#018H
			; SOURCE LINE # 241
; {
;     if(TxNotRx)
			; SOURCE LINE # 243
	JB   	TxNotRx,?C0029
;     {
			; SOURCE LINE # 244
;         // do nothing
;     }
			; SOURCE LINE # 246
?C0027:
;     else
;     {
			; SOURCE LINE # 248
;         InitUserTimer(RLD, RxRLDStart);
			; SOURCE LINE # 249
	MOV  	R5,RxRLDStart
	MOV  	R7,RLD
	LCALL	_InitUserTimer
; 
;         // mycharp = 0x80;
;         bitcounter = RxBits;
			; SOURCE LINE # 252
	MOV  	bitcounter,RxBits
;         RxWorking = 1;
			; SOURCE LINE # 253
	SETB 	RxWorking
;         
;         IccDisable();   // EX1 = 0;     // 禁止中断
			; SOURCE LINE # 255
	CLR  	EX1
;         parityerror = 0;                // clear parity error flag
			; SOURCE LINE # 256
	MOV  	parityerror,#00H
;         endflag = 0;
			; SOURCE LINE # 257
	MOV  	endflag,#00H
;     }
			; SOURCE LINE # 258
; }
			; SOURCE LINE # 259
?C0029:
	POP  	PSW
	POP  	DPL
	POP  	DPH
	POP  	B
	POP  	ACC
	RETI 	
; END OF TxRxdata

; 
; static bit GetInputData( unsigned char *addr )

	RSEG  ?PR?_GetInputData?ICCPDIR
_GetInputData:
	USING	0
			; SOURCE LINE # 261
;---- Variable 'addr?241' assigned to Register 'R1/R2/R3' ----
; {
			; SOURCE LINE # 262
;     if( ibufgetidx == ibufputidx )
			; SOURCE LINE # 263
	MOV  	A,ibufgetidx
	XRL  	A,ibufputidx
	JNZ  	?C0030
;     {
			; SOURCE LINE # 264
;         return 0;                  //buf empty
			; SOURCE LINE # 265
	CLR  	C
	RET  	
;     }
			; SOURCE LINE # 266
?C0030:
;     else
;     {
			; SOURCE LINE # 268
;         *addr = IBUF[ibufgetidx++];
			; SOURCE LINE # 269
	MOV  	R7,ibufgetidx
	INC  	ibufgetidx
	MOV  	A,#LOW (IBUF)
	ADD  	A,R7
	MOV  	R0,A
	MOV  	A,@R0
	LCALL	?C?CSTPTR
;     
;         if(ibufgetidx == SSBUF_SIZE)
			; SOURCE LINE # 271
	MOV  	A,ibufgetidx
	CJNE 	A,#040H,?C0033
;             ibufgetidx = 0;
			; SOURCE LINE # 272
	CLR  	A
	MOV  	ibufgetidx,A
?C0033:
;         return 1;
			; SOURCE LINE # 273
	SETB 	C
;     }
			; SOURCE LINE # 274
; }
			; SOURCE LINE # 275
?C0031:
	RET  	
; END OF _GetInputData

; 
; static void IccInitETU(unsigned int etu)

	RSEG  ?PR?_IccInitETU?ICCPDIR
L?0196:
	USING	0
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (attr)
	MOV  	DPH,A
	MOVX 	A,@DPTR
	ANL  	A,#03H
	MOV  	DPTR,#IccEtu
	MOVC 	A,@A+DPTR
	MOV  	R7,A
	MOV  	R6,#00H
_IccInitETU:
	USING	0
			; SOURCE LINE # 277
;---- Variable 'etu?342' assigned to Register 'R6/R7' ----
; {
			; SOURCE LINE # 278
;     ETU = etu;
			; SOURCE LINE # 279
	MOV  	ETU,R6
	MOV  	ETU+01H,R7
;     RLD = 256 - ETU;
			; SOURCE LINE # 280
	MOV  	A,ETU+01H
	CPL  	A
	INC  	A
	MOV  	RLD,A
;     TxRLDStart = RLD + 30;
			; SOURCE LINE # 281
	ADD  	A,#01EH
	MOV  	TxRLDStart,A
;     if(etu >= 170)
			; SOURCE LINE # 282
	CLR  	C
	MOV  	A,R7
	SUBB 	A,#0AAH
	MOV  	A,R6
	SUBB 	A,#00H
	MOV  	A,ETU
	JC   	?C0034
;     {
			; SOURCE LINE # 283
;         RxRLDStart = RLD + (ETU >> 1) + 60;
			; SOURCE LINE # 284
	RRC  	A
	MOV  	A,ETU+01H
	RRC  	A
	ADD  	A,RLD
	ADD  	A,#03CH
	MOV  	RxRLDStart,A
;         RxBits = 9;
			; SOURCE LINE # 285
	MOV  	RxBits,#09H
;     }
			; SOURCE LINE # 286
	RET  	
?C0034:
;     else
;     {
			; SOURCE LINE # 288
;         RxRLDStart = RLD - (ETU >> 1) + 60;
			; SOURCE LINE # 289
	CLR  	C
	RRC  	A
	MOV  	A,ETU+01H
	RRC  	A
	MOV  	R7,A
	CLR  	C
	MOV  	A,RLD
	SUBB 	A,R7
	ADD  	A,#03CH
	MOV  	RxRLDStart,A
;         RxBits = 8;
			; SOURCE LINE # 290
	MOV  	RxBits,#08H
;     }
			; SOURCE LINE # 291
; }
			; SOURCE LINE # 292
?C0036:
	RET  	
; END OF _IccInitETU

; 
; void IccSelect(unsigned char cardid)

	RSEG  ?PR?_IccSelect?ICCPDIR
_IccSelect:
	USING	0
			; SOURCE LINE # 294
;---- Variable 'cardid?443' assigned to Register 'R5' ----
	XCH  	A,R5
	MOV  	A,R7
	XCH  	A,R5
; {
			; SOURCE LINE # 295
;     // inhabit
;     ICCINH = 1;
			; SOURCE LINE # 297
	SETB 	P1_7
;     
;     // backup card id
;     CardId = cardid & 0x03;
			; SOURCE LINE # 300
	MOV  	A,R5
	ANL  	A,#03H
	MOV  	DPTR,#CardId
	MOVX 	@DPTR,A
;     
;     // switch to specified card
;     if(cardid & 0x01)
			; SOURCE LINE # 303
	MOV  	A,R5
	JNB  	ACC.0,?C0037
;         ICCA0 = 1;
			; SOURCE LINE # 304
	SETB 	P1_6
	SJMP 	?C0038
?C0037:
;     else
;         ICCA0 = 0;
			; SOURCE LINE # 306
	CLR  	P1_6
?C0038:
;     if(cardid & 0x02)
			; SOURCE LINE # 307
	MOV  	A,R5
	JNB  	ACC.1,?C0039
;         ICCA1 = 1;
			; SOURCE LINE # 308
	SETB 	P1_5
	SJMP 	?C0040
?C0039:
;     else
;         ICCA1 = 0;
			; SOURCE LINE # 310
	CLR  	P1_5
?C0040:
;     
;     // habit
;     ICCINH = 0;
			; SOURCE LINE # 313
	CLR  	P1_7
;     
;     // init card etu and direciton
;     IccInitETU(IccEtu[attr[cardid].etu]);
			; SOURCE LINE # 316
	MOV  	A,#LOW (attr)
	ADD  	A,R5
	LCALL	L?0196
;     dir = attr[cardid].dir;
			; SOURCE LINE # 317
	MOV  	A,#LOW (attr)
	ADD  	A,R5
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (attr)
	MOV  	DPH,A
	MOVX 	A,@DPTR
	RRC  	A
	RRC  	A
	RRC  	A
	ANL  	A,#01FH
	RRC  	A
	MOV  	dir,C
; }
			; SOURCE LINE # 318
	RET  	
; END OF _IccSelect

; 
; int IccRead( char *buf, int len )

	RSEG  ?PR?_IccRead?ICCPDIR
L?0192:
	USING	0
L?0193:
	MOV  	R2,#HIGH (inchar?961)
	MOV  	R1,#LOW (inchar?961)
L?0194:
	MOV  	R3,#00H
L?0195:
	MOV  	R5,#01H
	MOV  	R4,#00H
_IccRead:
	USING	0
			; SOURCE LINE # 320
	MOV  	DPTR,#buf?544
	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 # 321
;     int data i;
;     unsigned int data starttime;
; 
;     for(i=0; i<len; i++)
			; SOURCE LINE # 325
	CLR  	A
	MOV  	i?546,A
	MOV  	i?546+01H,A
?C0042:
	SETB 	C
	MOV  	DPTR,#len?545+01H
	MOVX 	A,@DPTR
	SUBB 	A,i?546+01H
	MOV  	A,i?546
	XRL  	A,#080H
	MOV  	R0,A

⌨️ 快捷键说明

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