📄 fm1702.lst
字号:
255 3 status = Request(RF_CMD_REQUEST_ALL);
256 3 if(status != FM1702_OK)
257 3 {
258 4 RevBuffer[0] = 1;
259 4 RevBuffer[1] = FM1702_REQERR;
260 4 break;
261 4 }
262 3 }
263 2 if(tagtype[0]==2)
264 2 cardtype=mifarepro; // Mifare Pro 卡
265 2 else if(tagtype[0]==4)
266 2 cardtype=mifare1; // Mifare One 卡
267 2 else if(tagtype[0]==16)
268 2 cardtype=mifarelight; // Mifare Light 卡
269 2 else
270 2 cardtype=unknowncard;
271 2
272 2 RevBuffer[0]=3;
273 2 RevBuffer[1]=status;
274 2 RevBuffer[2]=tagtype[0];
275 2 RevBuffer[3]=tagtype[1];
276 2 break;
277 2 case 3: // 防冲突 读卡的系列号 MLastSelectedSnr
278 2 status = AntiColl();;
279 2 if(status!=FM1702_OK)
280 2 {
281 3 RevBuffer[0]=1;
282 3 RevBuffer[1]=FM1702_ANTICOLLERR;
283 3 break;
284 3 }
285 2 //memcpy(MLastSelectedSnr,&RevBuffer[2],4);
286 2 RevBuffer[0]=5;
287 2 RevBuffer[1]=status;
288 2 RevBuffer[2]=UID[0];
289 2 RevBuffer[3]=UID[1];
290 2 RevBuffer[4]=UID[2];
291 2 RevBuffer[5]=UID[3];
292 2 break;
293 2 case 4: // 选择卡 Select Card
294 2 status=Select_Card();
295 2 if(status!=FM1702_OK)
296 2 {
297 3 RevBuffer[0]=1;
298 3 RevBuffer[1]=FM1702_SELERR;
299 3 break;
300 3 }
301 2 RevBuffer[0]=1;
302 2 RevBuffer[1]=status;
303 2 break;
C51 COMPILER V7.50 FM1702 10/16/2007 16:33:32 PAGE 6
304 2 case 6: //下载密钥
305 2 status = Load_keyE2_CPY(RevBuffer[2],RevBuffer[1]); //%40
306 2 status = Authentication(UID, RevBuffer[2], RevBuffer[1]);
307 2 if(status != FM1702_OK)
308 2 {
309 3 RevBuffer[0]=1;
310 3 RevBuffer[1]=status;
311 3 break;
312 3 }
313 2 RevBuffer[0]=1;
314 2 RevBuffer[1]=status;
315 2 break;
316 2 case 8: //读卡
317 2 status=MIF_READ(&RevBuffer[2],RevBuffer[1]);
318 2 if(status != FM1702_OK)
319 2 {
320 3 RevBuffer[0]=1;
321 3 RevBuffer[1]=status;
322 3 break;
323 3 }
324 2 else
325 2 {
326 3 if(cardtype==mifare1||cardtype==mifarepro)
327 3 RevBuffer[0]=17;
328 3 else if(cardtype==1)
329 3 RevBuffer[0]=9;
330 3 else
331 3 RevBuffer[0]=16;
332 3 }
333 2 RevBuffer[1]=status;
334 2 break;
335 2 case 9: //写卡
336 2 status=MIF_Write(&RevBuffer[2],RevBuffer[1]);
337 2 RevBuffer[0]=1;
338 2 RevBuffer[1]=status;
339 2 break;
340 2 case 10: //加值减值
341 2 if(RevBuffer[1] == RF_CMD_INC)
342 2 {
343 3 status = MIF_Increment(&RevBuffer[3],RevBuffer[2]);
344 3 MIF_Transfer(RevBuffer[2]);
345 3 }
346 2 else if(RevBuffer[1] == RF_CMD_DEC)
347 2 {
348 3 status = MIF_Decrement(&RevBuffer[3],RevBuffer[2]);
349 3 MIF_Transfer(RevBuffer[2]);
350 3 }
351 2 else
352 2 {
353 3 status = 1;
354 3 }
355 2 RevBuffer[0]=1;
356 2 RevBuffer[1]=status;
357 2 break;
358 2 case 12:
359 2 RevBuffer[0]=1;
360 2 RevBuffer[1]=0;
361 2 break;
362 2 default:
363 2 RevBuffer[0] = 1;
364 2 RevBuffer[1] = 1;
365 2 break;
C51 COMPILER V7.50 FM1702 10/16/2007 16:33:32 PAGE 7
366 2 }
367 1 }
368
369
370 void delay1(unsigned char dlength)
371 {
372 1 unsigned char i;
373 1 for (i=0;i<dlength;i++)
374 1 {
375 2 _nop_();
376 2 }
377 1 }
378
379 /****************************************************************/
380 /*名称: Clear_FIFO */
381 /*功能: 该函数实现清空FM1702中FIFO的数据*/
382 /*输入: N/A */
383 /*输出: TRUE, FIFO被清空*/
384 /* FALSE, FIFO未被清空*/
385 /****************************************************************/
386 uchar Clear_FIFO(void)
387 {
388 1 uchar temp;
389 1 uint i;
390 1 temp = SPIRead(Control); /* 清空FIFO */
391 1 temp = (temp | 0x01);
392 1 SPIWrite(Control,temp);
393 1 for(i = 0; i < RF_TimeOut; i++) /* 检查FIFO是否被清空 */
394 1 {
395 2 temp = SPIRead(FIFO_Length);
396 2 if(temp == 0)
397 2 {
398 3 return TRUE;
399 3 }
400 2 }
401 1
402 1 return FALSE;
403 1 }
404
405 /****************************************************************/
406 /*名称: Write_FIFO */
407 /*功能: 该函数实现向FM1702的FIFO中写入x bytes数据*/
408 /*输入: count, 待写入字节的长度*/
409 /* buff, 指向待写入数据的指针*/
410 /*输出: N/A */
411 /****************************************************************/
412 void Write_FIFO(uchar count, uchar idata *buff)
413 {
414 1 uchar i;
415 1
416 1 for(i = 0; i < count; i++)
417 1 {
418 2 SPIWrite(FIFO,*(buff + i));
419 2 }
420 1 }
421
422 /****************************************************************/
423 /*名称: Read_FIFO */
424 /*功能: 该函数实现从FM1702的FIFO中读出x bytes数据*/
425 /*输入: buff, 指向读出数据的指针*/
426 /*输出: N/A */
427 /****************************************************************/
C51 COMPILER V7.50 FM1702 10/16/2007 16:33:32 PAGE 8
428 uchar Read_FIFO(uchar idata *buff)
429 {
430 1 uchar temp;
431 1 uchar i;
432 1
433 1 temp = SPIRead(FIFO_Length);
434 1 if(temp == 0)
435 1 {
436 2 return 0;
437 2 }
438 1
439 1 if(temp >= 24)
440 1 {
441 2
442 2 temp = 24;
443 2 }
444 1
445 1 for(i = 0; i < temp; i++)
446 1 {
447 2 *(buff + i) = SPIRead(FIFO);
448 2 }
449 1
450 1 return temp;
451 1 }
452
453 /****************************************************************/
454 /*名称: Judge_Req */
455 /*功能: 该函数实现对卡片复位应答信号的判断*/
456 /*输入: *buff, 指向应答数据的指针*/
457 /*输出: TRUE, 卡片应答信号正确*/
458 /* FALSE, 卡片应答信号错误*/
459 /****************************************************************/
460 uchar Judge_Req(uchar idata *buff)
461 {
462 1
463 1 uchar temp1, temp2;
464 1
465 1 temp1 = *buff;
466 1 temp2 = *(buff + 1);
467 1 if((temp1 == 0x02) || (temp1 == 0x04) || (temp1 == 0x05) || (temp1 == 0x53) || (temp1 == 0x03))
468 1 {
469 2 if (temp2 == 0x00)
470 2 {
471 3 return TRUE;
472 3 }
473 2 }
474 1 return FALSE;
475 1 }
476
477 /****************************************************************/
478 /*名称: Check_UID */
479 /*功能: 该函数实现对收到的卡片的序列号的判断*/
480 /*输入: N/A */
481 /*输出: TRUE: 序列号正确*/
482 /* FALSE: 序列号错误*/
483 /****************************************************************/
484 uchar Check_UID(void)
485 {
486 1
487 1 uchar temp;
488 1 uchar i;
489 1
C51 COMPILER V7.50 FM1702 10/16/2007 16:33:32 PAGE 9
490 1 temp = 0x00;
491 1 for(i = 0; i < 5; i++)
492 1 {
493 2 temp = temp ^ UID[i];
494 2 }
495 1
496 1 if(temp == 0)
497 1 {
498 2 return TRUE;
499 2 }
500 1
501 1 return FALSE;
502 1 }
503
504 /****************************************************************/
505 /*名称: Save_UID */
506 /*功能: 该函数实现保存卡片收到的序列号*/
507 /*输入: row: 产生冲突的行*/
508 /* col: 产生冲突的列*/
509 /* length: 接収到的UID数据长度*/
510 /*输出: N/A */
511 /****************************************************************/
512 void Save_UID(uchar row, uchar col, uchar length)
513 {
514 1 uchar i;
515 1 uchar temp;
516 1 uchar temp1;
517 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -