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

📄 level3.lst

📁 此程序为利用mage8 AVR 和EM4094实现读取ISO15693类型卡的C程序、读卡稳定、这个项目我们做了好久、非常不错的程序、很适合做这方面产品的朋友们参考
💻 LST
📖 第 1 页 / 共 5 页
字号:
 609               	.global	InventoryStep_version4
 610               		.type	InventoryStep_version4, @function
 611               	InventoryStep_version4:
 230:level3.c      **** 
 231:level3.c      **** //--------------------------------------------------------------
 232:level3.c      **** //--------------------------------------------------------------
 233:level3.c      **** //1TS Inventory
 234:level3.c      **** 
 235:level3.c      **** //#define DBG_1TS
 236:level3.c      **** 
 237:level3.c      **** #define STACK_LENGTH 8                //stack size
 238:level3.c      **** 
 239:level3.c      **** typedef struct {
 240:level3.c      ****     uint8_t mask_len;
 241:level3.c      ****     uint8_t value;
 242:level3.c      ****     uint8_t mask[ 12 ];
 243:level3.c      ****     uint8_t vata[ 2 ];                    //to keep this structure size being 2^n
 244:level3.c      **** } TINVENTORY;
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s 			page 16


 245:level3.c      **** 
 246:level3.c      **** TINVENTORY found[ STACK_LENGTH ];
 247:level3.c      **** 
 248:level3.c      **** int8_t found_ptr;
 249:level3.c      **** 
 250:level3.c      **** uint8_t dbg_counter;
 251:level3.c      **** 
 252:level3.c      **** //--------------------------------------------------------------
 253:level3.c      **** //--------------------------------------------------------------
 254:level3.c      **** //--------------------------------------------------------------
 255:level3.c      **** 
 256:level3.c      **** // ****************** 1TS inventory version 4 ******************
 257:level3.c      **** 
 258:level3.c      **** TINVENTORY search;
 259:level3.c      **** 
 260:level3.c      **** int8_t InventoryStep_version4( void ) 
 261:level3.c      **** {
 612               		.stabn 68,0,261,.LM88-InventoryStep_version4
 613               	.LM88:
 614               	/* prologue: frame size=0 */
 615 027c CF93      		push r28
 616 027e DF93      		push r29
 617               	/* prologue end (size=2) */
 262:level3.c      ****     uint8_t i, j, k, l;
 263:level3.c      ****     uint8_t result;
 264:level3.c      ****     uint16_t crc;
 265:level3.c      ****     expectedResponseLen = 96;
 618               		.stabn 68,0,265,.LM89-InventoryStep_version4
 619               	.LM89:
 620               	.LBB7:
 621 0280 80E6      		ldi r24,lo8(96)
 622 0282 8093 0000 		sts expectedResponseLen,r24
 266:level3.c      **** 
 267:level3.c      ****     j = search.mask_len;
 623               		.stabn 68,0,267,.LM90-InventoryStep_version4
 624               	.LM90:
 625 0286 C091 0000 		lds r28,search
 268:level3.c      **** 
 269:level3.c      ****     //set collision bit
 270:level3.c      ****     if ( j > 0 ) 
 626               		.stabn 68,0,270,.LM91-InventoryStep_version4
 627               	.LM91:
 628 028a CC23      		tst r28
 629 028c C1F1      		breq .L42
 271:level3.c      ****     {
 272:level3.c      ****         l = 2 + ( j - 1 ) / 8;
 630               		.stabn 68,0,272,.LM92-InventoryStep_version4
 631               	.LM92:
 632 028e AC2F      		mov r26,r28
 633 0290 BB27      		clr r27
 634 0292 AD01      		movw r20,r26
 635 0294 4150      		subi r20,lo8(-(-1))
 636 0296 5040      		sbci r21,hi8(-(-1))
 637 0298 57FF      		sbrs r21,7
 638 029a 03C0      		rjmp .L43
 639 029c AD01      		movw r20,r26
 640 029e 4A5F      		subi r20,lo8(-(6))
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s 			page 17


 641 02a0 5F4F      		sbci r21,hi8(-(6))
 642               	.L43:
 643 02a2 23E0      		ldi r18,3
 644 02a4 5595      	1:	asr r21
 645 02a6 4795      		ror r20
 646 02a8 2A95      		dec r18
 647 02aa E1F7      		brne 1b
 648 02ac 4E5F      		subi r20,lo8(-(2))
 273:level3.c      ****         for ( k = 0xFE , i = 0 ; i < ( ( j - 1 ) % 8 ) ; i++ ) 
 649               		.stabn 68,0,273,.LM93-InventoryStep_version4
 650               	.LM93:
 651 02ae 8EEF      		ldi r24,lo8(-2)
 652 02b0 50E0      		ldi r21,lo8(0)
 653 02b2 02C0      		rjmp .L44
 654               	.L49:
 274:level3.c      ****             k <<= 1;   //!!!
 655               		.stabn 68,0,274,.LM94-InventoryStep_version4
 656               	.LM94:
 657 02b4 880F      		lsl r24
 658               		.stabn 68,0,273,.LM95-InventoryStep_version4
 659               	.LM95:
 660 02b6 5F5F      		subi r21,lo8(-(1))
 661               	.L44:
 662 02b8 E52F      		mov r30,r21
 663 02ba FF27      		clr r31
 664 02bc 9D01      		movw r18,r26
 665 02be 2150      		subi r18,lo8(-(-1))
 666 02c0 3040      		sbci r19,hi8(-(-1))
 667 02c2 B901      		movw r22,r18
 668 02c4 37FF      		sbrs r19,7
 669 02c6 03C0      		rjmp .L48
 670 02c8 BD01      		movw r22,r26
 671 02ca 6A5F      		subi r22,lo8(-(6))
 672 02cc 7F4F      		sbci r23,hi8(-(6))
 673               	.L48:
 674 02ce 687F      		andi r22,lo8(-8)
 675 02d0 261B      		sub r18,r22
 676 02d2 370B      		sbc r19,r23
 677 02d4 B901      		movw r22,r18
 678 02d6 E217      		cp r30,r18
 679 02d8 F307      		cpc r31,r19
 680 02da 64F3      		brlt .L49
 275:level3.c      ****         search.mask[ l ] = search.mask[ l ] & ( ~k );
 681               		.stabn 68,0,275,.LM96-InventoryStep_version4
 682               	.LM96:
 683 02dc E42F      		mov r30,r20
 684 02de FF27      		clr r31
 685 02e0 E050      		subi r30,lo8(-(search))
 686 02e2 F040      		sbci r31,hi8(-(search))
 687 02e4 8095      		com r24
 688 02e6 2281      		ldd r18,Z+2
 689 02e8 2823      		and r18,r24
 276:level3.c      ****         k = search.value << ( ( j - 1 ) % 8 );
 690               		.stabn 68,0,276,.LM97-InventoryStep_version4
 691               	.LM97:
 692 02ea 8091 0000 		lds r24,search+1
 693 02ee 9927      		clr r25
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s 			page 18


 694 02f0 02C0      		rjmp 2f
 695 02f2 880F      	1:	lsl r24
 696 02f4 991F      		rol r25
 697 02f6 6A95      	2:	dec r22
 698 02f8 E2F7      		brpl 1b
 277:level3.c      ****         search.mask[ l ] = search.mask[ l ] | k;
 699               		.stabn 68,0,277,.LM98-InventoryStep_version4
 700               	.LM98:
 701 02fa 282B      		or r18,r24
 702 02fc 2283      		std Z+2,r18
 703               	.L42:
 278:level3.c      ****     }
 279:level3.c      ****     cmd_message[ 0 ] = message_flags;
 704               		.stabn 68,0,279,.LM99-InventoryStep_version4
 705               	.LM99:
 706 02fe 8091 0000 		lds r24,message_flags
 707 0302 8093 0000 		sts cmd_message,r24
 280:level3.c      ****     cmd_message[ 1 ] = 0x01;
 708               		.stabn 68,0,280,.LM100-InventoryStep_version4
 709               	.LM100:
 710 0306 81E0      		ldi r24,lo8(1)
 711 0308 8093 0000 		sts cmd_message+1,r24
 281:level3.c      ****     cmd_message[ 2 ] = j;
 712               		.stabn 68,0,281,.LM101-InventoryStep_version4
 713               	.LM101:
 714 030c C093 0000 		sts cmd_message+2,r28
 282:level3.c      **** 
 283:level3.c      ****     //copy uid as a mask
 284:level3.c      ****     if ( j != 0 ) 
 715               		.stabn 68,0,284,.LM102-InventoryStep_version4
 716               	.LM102:
 717 0310 CC23      		tst r28
 718 0312 D1F0      		breq .L51
 285:level3.c      ****     {
 286:level3.c      ****         l = ( j - 1 ) / 8;
 719               		.stabn 68,0,286,.LM103-InventoryStep_version4
 720               	.LM103:
 721 0314 DD27      		clr r29
 722 0316 AE01      		movw r20,r28
 723 0318 4150      		subi r20,lo8(-(-1))
 724 031a 5040      		sbci r21,hi8(-(-1))
 725 031c 57FF      		sbrs r21,7
 726 031e 03C0      		rjmp .L52
 727 0320 AE01      		movw r20,r28
 728 0322 4A5F      		subi r20,lo8(-(6))
 729 0324 5F4F      		sbci r21,hi8(-(6))
 730               	.L52:
 731 0326 93E0      		ldi r25,3
 732 0328 5595      	1:	asr r21
 733 032a 4795      		ror r20
 734 032c 9A95      		dec r25
 735 032e E1F7      		brne 1b
 287:level3.c      ****         Copy( &cmd_message[ 3 ] , &search.mask[ 2 ] , l + 1 );
 736               		.stabn 68,0,287,.LM104-InventoryStep_version4
 737               	.LM104:
 738 0330 4F5F      		subi r20,lo8(-(1))
 739 0332 60E0      		ldi r22,lo8(search+4)
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s 			page 19


 740 0334 70E0      		ldi r23,hi8(search+4)
 741 0336 80E0      		ldi r24,lo8(cmd_message+3)
 742 0338 90E0      		ldi r25,hi8(cmd_message+3)
 743 033a 00D0      		rcall Copy
 288:level3.c      ****         j = ( j + 7 ) / 8;
 744               		.stabn 68,0,288,.LM105-InventoryStep_version4
 745               	.LM105:
 746 033c 2796      		adiw r28,7
 747 033e 83E0      		ldi r24,3
 748 0340 D595      	1:	asr r29
 749 0342 C795      		ror r28
 750 0344 8A95      		dec r24
 751 0346 E1F7      		brne 1b
 752               	.L51:
 289:level3.c      ****     }  
 290:level3.c      ****     //compute CRC
 291:level3.c      ****     j += 3;
 753               		.stabn 68,0,291,.LM106-InventoryStep_version4
 754               	.LM106:
 755 0348 CD5F      		subi r28,lo8(-(3))
 292:level3.c      ****     AddCRC( j );
 756               		.stabn 68,0,292,.LM107-InventoryStep_version4
 757               	.LM107:
 758 034a 8C2F      		mov r24,r28
 759 034c 81DF      		rcall AddCRC
 293:level3.c      ****     j += 2;
 760               		.stabn 68,0,293,.LM108-InventoryStep_version4
 761               	.LM108:
 762 034e CE5F      		subi r28,lo8(-(2))
 294:level3.c      **** 
 295:level3.c      ****     //form & send command & wait
 296:level3.c      ****     Send( j , STD_WAIT );
 763               		.stabn 68,0,296,.LM109-InventoryStep_version4
 764               	.LM109:
 765 0350 61E9      		ldi r22,lo8(145)
 766 0352 70E0      		ldi r23,hi8(145)
 767 0354 8C2F      		mov r24,r28
 768 0356 3FDF      		rcall Send
 297:level3.c      **** 
 298:level3.c      ****     //listen for response
 299:level3.c      ****     maxCaptureTimeLow = ( uint8_t )maxTGeneral;
 769               		.stabn 68,0,299,.LM110-InventoryStep_version4
 770               	.LM110:
 771 0358 8091 0000 		lds r24,maxTGeneral
 772 035c 8093 0000 		sts maxCaptureTimeLow,r24
 300:level3.c      ****     maxCaptureTimeHi = maxTGeneral >> 8;
 773               		.stabn 68,0,300,.LM111-InventoryStep_version4
 774               	.LM111:
 775 0360 8091 0000 		lds r24,maxTGeneral
 776 0364 9091 0000 		lds r25,(maxTGeneral)+1
 777 0368 892F      		mov r24,r25
 778 036a 9927      		clr r25
 779 036c 8093 0000 		sts maxCaptureTimeHi,r24
 301:level3.c      **** 
 302:level3.c      ****     Capture( 2 );
 780               		.stabn 68,0,302,.LM112-InventoryStep_version4
 781               	.LM112:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccqgcaaa.s 			page 20


 782 0370 82E0      		ldi r24,lo8(2)
 783 0372 00D0      		rcall Capture
 303:level3.c      ****     clean_data_cnt = 0;
 784               		.stabn 68,0,303,.LM113-InventoryStep_version4
 785               	.LM113:
 786 0374 1092 0000 		sts clean_data_cnt,__zero_reg__
 304:level3.c      ****     result = 0;
 305:level3.c      **** 
 306:level3.c      ****     if ( ( sof == 0 ) || ( capture_cnt < 8 ) )
 787               		.stabn 68,0,306,.LM114-InventoryStep_version4
 788               	.LM114:
 789 0378 8091 0000 		lds r24,sof
 790 037c 8823      		tst r24
 791 037e 89F1      		breq .L56
 792 0380 27E0      		ldi r18,lo8(7)
 793 0382 2815      		cp r18,r8
 794 0384 70F5      		brsh .L56
 307:level3.c      ****     {
 308:level3.c      **** 
 309:level3.c      ****         return 0;
 310:level3.c      ****     }
 311:level3.c      ****     j = ExtractData( expectedResponseLen );        //find first data bit
 795               		.stabn 68,0,311,.LM115-InventoryStep_version4
 796               	.LM115:
 797 0386 8091 0000 		lds r24,expectedResponseLen
 798 038a 00D0      		rcall ExtractData
 799 038c C82F      		mov r28,r24
 312:level3.c      **** 
 313:level3.c      **** //    Copy( found[ found_ptr ].mask , data_buffer , 12 );   //always copy data regardless the resul
 314:level3.c      **** 
 315:level3.c      ****     if ( j == 0 ) 
 800               		.stabn 68,0,315,.LM116-InventoryStep_version4
 801               	.LM116:

⌨️ 快捷键说明

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