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

📄 mifare1.src

📁 mifarea卡程序mifarea卡程序mifarea卡程序
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	SETB 	C
	SUBB 	A,#03H
	JC   	?C0004
;                         {
			; SOURCE LINE # 110
;                             cnt = 0;
			; SOURCE LINE # 111
	CLR  	A
	MOVX 	@DPTR,A
;                             beep(3, 25);
			; SOURCE LINE # 112
	MOV  	R5,#019H
	MOV  	R7,#03H
	LCALL	_beep
;                         }
			; SOURCE LINE # 113
;                     }
			; SOURCE LINE # 114
;                 }
			; SOURCE LINE # 115
;             }
			; SOURCE LINE # 116
;         }
			; SOURCE LINE # 117
	SJMP 	?C0004
?C0005:
;         else
;         {
			; SOURCE LINE # 119
;             cnt = 0;
			; SOURCE LINE # 120
	CLR  	A
	MOV  	DPTR,#cnt?144
	MOVX 	@DPTR,A
;             if(fCardIn)
			; SOURCE LINE # 121
	JNB  	fCardIn?143,?C0004
;             {
			; SOURCE LINE # 122
;                 fCardIn = 0;
			; SOURCE LINE # 123
	CLR  	fCardIn?143
;                 fWaitCmd = 0;
			; SOURCE LINE # 124
	CLR  	fWaitCmd
;                 
;                 if(fRFCBeep)
			; SOURCE LINE # 126
	JNB  	fRFCBeep,?C0016
;                 {
			; SOURCE LINE # 127
;                     beep(1, 40);
			; SOURCE LINE # 128
	MOV  	R5,#028H
	MOV  	R7,#01H
	LCALL	_beep
;                 }
			; SOURCE LINE # 129
?C0016:
;                 
;                 CardLed(1, 0);
			; SOURCE LINE # 131
	SETB 	?CardLed?BIT
	CLR  	?CardLed?BIT+01H
	LCALL	CardLed
;     
;                 if(fNotice)
			; SOURCE LINE # 133
	JNB  	fNotice,?C0004
;                 {
			; SOURCE LINE # 134
;                     buf[0] = RFCARD;
			; SOURCE LINE # 135
	MOV  	DPTR,#buf?142
	MOV  	A,#0FEH
	MOVX 	@DPTR,A
;                     buf[1] = 0;
			; SOURCE LINE # 136
	CLR  	A
	INC  	DPTR
	MOVX 	@DPTR,A
;                     
;                     #if 1
;                     CommSendNotWaitAck(buf, 2);        /////////////////////////////////////
			; SOURCE LINE # 139
	MOV  	R3,#01H
	MOV  	R2,#HIGH (buf?142)
	MOV  	R1,#LOW (buf?142)
	MOV  	R5,#02H
	MOV  	R4,A
	LCALL	_CommSendNotWaitAck
;                     #else
;                     CommSend(buf, 2);
;                     #endif
;                 }
			; SOURCE LINE # 143
;             }
			; SOURCE LINE # 144
;         }
			; SOURCE LINE # 145
;     }
			; SOURCE LINE # 146
?C0004:
;     
;     if(fWaitCmd)
			; SOURCE LINE # 148
	JNB  	fWaitCmd,?C0020
;     {
			; SOURCE LINE # 149
;         if(GetTickCount() - waitcmdtime >= 1000)
			; SOURCE LINE # 150
	LCALL	GetTickCount
	MOV  	DPTR,#waitcmdtime?141
	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,#0E8H
	MOV  	A,R6
	SUBB 	A,#03H
	JC   	?C0020
;         {
			; SOURCE LINE # 151
;             fCardIn = 0;
			; SOURCE LINE # 152
	CLR  	fCardIn?143
;             fWaitCmd = 0;
			; SOURCE LINE # 153
	CLR  	fWaitCmd
;             beep(3, 25);
			; SOURCE LINE # 154
	MOV  	R5,#019H
	MOV  	R7,#03H
	LCALL	_beep
;         }
			; SOURCE LINE # 155
;     }
			; SOURCE LINE # 156
; }
			; SOURCE LINE # 157
?C0020:
	RET  	
; END OF M1Card

; 
; // excute the command for m1 card from host
; unsigned int M1Command(unsigned char *cmd, unsigned int len)

	RSEG  ?PR?_M1Command?MIFARE1
_M1Command:
	USING	0
			; SOURCE LINE # 160
	MOV  	DPTR,#cmd?245
	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 # 161
;     unsigned char m1sector;     // m1卡命令针对的扇区
;     unsigned char m1block;      // m1卡命令针对的块号
;     long epvalue;
;     long oldepvalue;
;     unsigned char epstatus = 0x03;
			; SOURCE LINE # 166
	MOV  	DPTR,#epstatus?266
	MOV  	A,#03H
	MOVX 	@DPTR,A
;     unsigned char m1keyidx;
;     bit fkeypassed;
;     unsigned char *m1data;
;     int i;
;     
;     // clear waiting cmd flag
;     fWaitCmd = 0;
			; SOURCE LINE # 173
	CLR  	fWaitCmd
;     
;     m1sector = cmd[2];
			; SOURCE LINE # 175
	MOV  	DPTR,#cmd?245
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#02H
	LCALL	?C?CLDOPTR
	MOV  	DPTR,#m1sector?262
	MOVX 	@DPTR,A
;     m1block = cmd[3];
			; SOURCE LINE # 176
	MOV  	DPTR,#03H
	LCALL	?C?CLDOPTR
	MOV  	DPTR,#m1block?263
	MOVX 	@DPTR,A
;     m1data = cmd + 4;
			; SOURCE LINE # 177
	MOV  	A,R1
	ADD  	A,#04H
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	MOV  	R2,A
	MOV  	DPTR,#m1data?269
	MOV  	A,R3
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R2
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R1
	MOVX 	@DPTR,A
;     
;     ///////////////////////////////////////
;     // request card!
;     if(!M1Search(snr))
			; SOURCE LINE # 181
	LCALL	L?0267
	JC   	?C0021
;     {
			; SOURCE LINE # 182
;         // error
;         cmd[0] = FAIL;
			; SOURCE LINE # 184
	MOV  	DPTR,#cmd?245
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	A,#01H
	LCALL	?C?CSTPTR
;         cmd[1] = MI_NOTAGERR;
			; SOURCE LINE # 185
	MOV  	DPTR,#cmd?245
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#01H
	MOV  	A,#01H
;         return 2;
			; SOURCE LINE # 186
	LJMP 	?C0246
;     }
			; SOURCE LINE # 187
?C0021:
;     
;     if(cmd[1] == CMD_GETSNR)       // get card snr
			; SOURCE LINE # 189
	MOV  	DPTR,#cmd?245
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#01H
	LCALL	?C?CLDOPTR
	JNZ  	?C0023
;     {
			; SOURCE LINE # 190
;         if(len != 2)
			; SOURCE LINE # 191
	MOV  	DPTR,#len?246
	MOVX 	A,@DPTR
	JNZ  	?C0184
	INC  	DPTR
	MOVX 	A,@DPTR
	XRL  	A,#02H
?C0184:
	JZ   	?C0024
;         {
			; SOURCE LINE # 192
;             cmd[0] = ERRORCMDLEN;
			; SOURCE LINE # 193
;             return 1;
			; SOURCE LINE # 194
	LJMP 	?C0250
;         }
			; SOURCE LINE # 195
?C0024:
;         
;         // copy snr to cmd
;         cmd[0] = SUCCESS;
			; SOURCE LINE # 198
	CLR  	A
	LCALL	?C?CSTPTR
;         memcpy(cmd+1, snr, 4);
			; SOURCE LINE # 199
	MOV  	DPTR,#cmd?245
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	ADD  	A,#01H
	MOV  	R1,A
	CLR  	A
	ADDC 	A,R2
	XCH  	A,R0
	MOV  	A,R1
	XCH  	A,R0
	MOV  	R4,A
	XCH  	A,R5
	MOV  	A,R3
	XCH  	A,R5
	MOV  	R3,#01H
	MOV  	R2,#HIGH (snr)
	MOV  	R1,#LOW (snr)
	MOV  	R6,#00H
	MOV  	R7,#04H
	LCALL	?C?COPY
;         return 5;
			; SOURCE LINE # 200
	LJMP 	?C0249
;     }
			; SOURCE LINE # 201
?C0023:
;     
;     if(cmd[1] == CMD_AUTH)    // auth card with specified key
			; SOURCE LINE # 203
	MOV  	DPTR,#cmd?245
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#01H
	LCALL	?C?CLDOPTR
	XRL  	A,#01H
	JNZ  	?C0025
;     {
			; SOURCE LINE # 204
;         if(len != 10)
			; SOURCE LINE # 205
	MOV  	DPTR,#len?246
	MOVX 	A,@DPTR
	JNZ  	?C0185
	INC  	DPTR
	MOVX 	A,@DPTR
	XRL  	A,#0AH
?C0185:
	JZ   	?C0026
;         {
			; SOURCE LINE # 206
;             cmd[0] = ERRORCMDLEN;
			; SOURCE LINE # 207
?C0207:
;             return 1;
			; SOURCE LINE # 208
	LJMP 	?C0250
;         }
			; SOURCE LINE # 209
?C0026:
;         
;         m1sector &= 0x7f;       // mask the invalid msb
			; SOURCE LINE # 211
	MOV  	DPTR,#m1sector?262
	MOVX 	A,@DPTR
	ANL  	A,#07FH
	MOVX 	@DPTR,A
	MOV  	R6,A
;         i = M1Auth(m1block, m1data, m1sector);
			; SOURCE LINE # 212
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	MOV  	DPTR,#m1data?269
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#?_M1Auth?BYTE+04H
	MOV  	A,R6
	MOVX 	@DPTR,A
	LCALL	_M1Auth
	MOV  	R6,#00H
	MOV  	DPTR,#i?270
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
;         if(MI_OK != i)
			; SOURCE LINE # 213
	MOV  	DPTR,#cmd?245
	JZ   	?C0027
;         {
			; SOURCE LINE # 214
;             cmd[0] = FAIL;
			; SOURCE LINE # 215
;             cmd[1] = i;
			; SOURCE LINE # 216
;             return 2;
			; SOURCE LINE # 217
	LJMP 	?C0227
;         }
			; SOURCE LINE # 218
?C0027:
;         else
;         {
			; SOURCE LINE # 220
;             cmd[0] = SUCCESS;
			; SOURCE LINE # 221
;             return 1;
			; SOURCE LINE # 222
	LJMP 	?C0211
;         }
			; SOURCE LINE # 223
;     }
			; SOURCE LINE # 224
?C0025:
;     else if(cmd[1] == CMD_LDKEY)
			; SOURCE LINE # 225
	MOV  	DPTR,#cmd?245
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPTR,#01H
	LCALL	?C?CLDOPTR
	XRL  	A,#0BH
	JZ   	$ + 5H
	LJMP 	?C0029
;     {
			; SOURCE LINE # 226
;         if((len < 10) && (len != 2))
			; SOURCE LINE # 227
	MOV  	DPTR,#len?246
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R7,A
	CLR  	C
	SUBB 	A,#0AH
	MOV  	A,R6
	SUBB 	A,#00H
	JNC  	?C0031
	MOV  	A,R7
	XRL  	A,#02H
	ORL  	A,R6
	JZ   	?C0031
;         {
			; SOURCE LINE # 228
;             cmd[0] = ERRORCMDLEN;
			; SOURCE LINE # 229
?C0209:
;             return 1;
			; SOURCE LINE # 230
	LJMP 	?C0250
;         }
			; SOURCE LINE # 231
?C0031:
;         
;         len -= 2;
			; SOURCE LINE # 233
	MOV  	DPTR,#len?246+01H
	MOVX 	A,@DPTR
	ADD  	A,#0FEH
	MOVX 	@DPTR,A
	MOV  	DPTR,#len?246
	MOVX 	A,@DPTR
	ADDC 	A,#0FFH
	MOVX 	@DPTR,A
;         if((len & 0x07) != 0)       // len % 8
			; SOURCE LINE # 234
	INC  	DPTR
	MOVX 	A,@DPTR
	ANL  	A,#07H
	JZ   	?C0032
;         {
			; SOURCE LINE # 235
;             cmd[0] = ERRORCMDLEN;
			; SOURCE LINE # 236
?C0212:
;             return 1;
			; SOURCE LINE # 237
	LJMP 	?C0250
;         }
			; SOURCE LINE # 238
?C0032:
;         
;         len >>= 3;  // len = len / 8;
			; SOURCE LINE # 240
	MOV  	DPTR,#len?246
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R0,#03H
?C0186:
	XCH  	A,R6
	CLR  	C
	RRC  	A
	XCH  	A,R6
	RRC  	A
	DJNZ 	R0,?C0186
	MOV  	R7,A
	MOV  	DPTR,#len?246
	MOV  	A,R6
	MOVX 	@DPTR,A
	INC  	DPTR
	MOV  	A,R7
	MOVX 	@DPTR,A
;         if(len > m1keycntmax)       // too much keys
			; SOURCE LINE # 241
	MOV  	DPTR,#m1keycntmax
	CLR  	A
	MOVC 	A,@A+DPTR
	MOV  	R5,A
	SETB 	C
	MOV  	A,R7
	SUBB 	A,R5
	MOV  	A,R6
	SUBB 	A,#00H
	JC   	?C0033
;         {
			; SOURCE LINE # 242
;             cmd[0] = ERRORCMDLEN;
			; SOURCE LINE # 243
?C0213:
;             return 1;
			; SOURCE LINE # 244
	LJMP 	?C0250
;         }
			; SOURCE LINE # 245
?C0033:
;         
;         // check if there are same key sector in the data
;         for(i=0; i<len-1; i++)
			; SOURCE LINE # 248
	CLR  	A
	MOV  	DPTR,#i?270
	MOVX 	@DPTR,A
	INC  	DPTR
	MOVX 	@DPTR,A
?C0034:
	MOV  	DPTR,#len?246+01H
	MOVX 	A,@DPTR
	ADD  	A,#0FFH
	MOV  	R7,A
	MOV  	DPTR,#len?246
	MOVX 	A,@DPTR
	ADDC 	A,#0FFH
	MOV  	R6,A
	MOV  	DPTR,#i?270
	MOVX 	A,@DPTR
	MOV  	R4,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R5,A
	CLR  	C
	SUBB 	A,R7
	MOV  	A,R4
	SUBB 	A,R6
	JC   	$ + 5H
	LJMP 	?C0035
;         {
			; SOURCE LINE # 249
;             unsigned char i1;
;             bit fsame = 0;
			; SOURCE LINE # 251
	CLR  	fsame?248
;             
;             for(i1=i+1; i1<len; i1++)
			; SOURCE LINE # 253
	MOV  	A,R5
	INC  	A
	INC  	DPTR
	MOVX 	@DPTR,A
?C0037:
	MOV  	DPTR,#i1?247
	MOVX 	A,@DPTR
	MOV  	R7,A
	SETB 	C
	MOV  	DPTR,#len?246+01H
	MOVX 	A,@DPTR
	SUBB 	A,R7
	MOV  	DPTR,#len?246
	MOVX 	A,@DPTR
	SUBB 	A,#00H
	JC   	?C0038
;             {
			; SOURCE LINE # 254
;                 if(cmd[2+(i<<3)] > 0x7f)
			; SOURCE LINE # 255
	MOV  	DPTR,#i?270
	MOVX 	A,@DPTR
	MOV  	R6,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R0,#03H
?C0187:
	CLR  	C
	RLC  	A
	XCH  	A,R6
	RLC  	A
	XCH  	A,R6
	DJNZ 	R0,?C0187
	ADD  	A,#02H
	MOV  	R7,A
	CLR  	A
	ADDC 	A,R6
	MOV  	R6,A
	MOV  	DPTR,#cmd?245
	MOVX 	A,@DPTR
	MOV  	R3,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R2,A
	INC  	DPTR
	MOVX 	A,@DPTR
	MOV  	R1,A
	MOV  	DPL,R7
	MOV  	DPH,R6
	LCALL	?C?CLDOPTR
	MOV  	R5,A
	SETB 	C
	SUBB 	A,#07FH
	JC   	?C0040
;                 {
			; SOURCE LINE # 256
;                     fsame = 1;
			; SOURCE LINE # 257
	SETB 	fsame?248

⌨️ 快捷键说明

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