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

📄 level2.lst

📁 此程序为利用mage8 AVR 和EM4094实现读取ISO15693类型卡的C程序、读卡稳定、这个项目我们做了好久、非常不错的程序、很适合做这方面产品的朋友们参考
💻 LST
📖 第 1 页 / 共 5 页
字号:
 302:level2.c      ****         if ( byte == 0x50 ) 
 849               		.stabn 68,0,302,.LM118-SearchValidBit
 850               	.LM118:
 851 032c 8035      		cpi r24,lo8(80)
 852 032e 31F4      		brne .L91
 303:level2.c      ****             if ( ( ( *ptr ) & 0xF0 ) == 0 )
 853               		.stabn 68,0,303,.LM119-SearchValidBit
 854               	.LM119:
 855 0330 8C91      		ld r24,X
 856 0332 807F      		andi r24,lo8(-16)
 857 0334 19F4      		brne .L91
 304:level2.c      ****                 return 3;
 858               		.stabn 68,0,304,.LM120-SearchValidBit
 859               	.LM120:
 860 0336 83E0      		ldi r24,lo8(3)
 861 0338 90E0      		ldi r25,hi8(3)
 305:level2.c      ****         byte = valid & 0x78;
 306:level2.c      ****         if ( byte == 0x28 ) 
 307:level2.c      ****             if ( ( ( *ptr ) & 0x78 ) == 0 )
 308:level2.c      ****                 return 4;
 309:level2.c      ****     }
 310:level2.c      ****     return 255;                               //no valid bit
 311:level2.c      **** }
 862               		.stabn 68,0,311,.LM121-SearchValidBit
 863               	.LM121:
 864 033a 0895      		ret
 865               	.L91:
 866               		.stabn 68,0,305,.LM122-SearchValidBit
 867               	.LM122:
 868 033c 9877      		andi r25,lo8(120)
 869               		.stabn 68,0,306,.LM123-SearchValidBit
 870               	.LM123:
 871 033e 9832      		cpi r25,lo8(40)
 872 0340 61F4      		brne .L90
 873               		.stabn 68,0,307,.LM124-SearchValidBit
 874               	.LM124:
 875 0342 8C91      		ld r24,X
 876 0344 9927      		clr r25
 877 0346 8877      		andi r24,lo8(120)
 878 0348 9070      		andi r25,hi8(120)
 879 034a 892B      		or r24,r25
 880 034c 31F4      		brne .L90
 881               		.stabn 68,0,308,.LM125-SearchValidBit
 882               	.LM125:
 883 034e 84E0      		ldi r24,lo8(4)
 884 0350 90E0      		ldi r25,hi8(4)
 885               		.stabn 68,0,311,.LM126-SearchValidBit
 886               	.LM126:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s 			page 22


 887 0352 0895      		ret
 888               	.L97:
 889               		.stabn 68,0,287,.LM127-SearchValidBit
 890               	.LM127:
 891 0354 842F      		mov r24,r20
 892 0356 9927      		clr r25
 893               		.stabn 68,0,311,.LM128-SearchValidBit
 894               	.LM128:
 895 0358 0895      		ret
 896               	.L90:
 897               		.stabn 68,0,310,.LM129-SearchValidBit
 898               	.LM129:
 899 035a 8FEF      		ldi r24,lo8(255)
 900 035c 90E0      		ldi r25,hi8(255)
 901               		.stabn 68,0,311,.LM130-SearchValidBit
 902               	.LM130:
 903 035e 0895      		ret
 904               	.LBE8:
 905               	/* epilogue: frame size=0 */
 906               	/* epilogue: noreturn */
 907               	/* epilogue end (size=0) */
 908               	/* function SearchValidBit size 73 (73) */
 909               		.size	SearchValidBit, .-SearchValidBit
 910               		.stabs	"bitcnt:r(4,2)",64,0,275,21
 911               		.stabs	"byte:r(4,2)",64,0,276,24
 912               		.stabs	"valid:r(4,2)",64,0,277,25
 913               		.stabs	"ptr:r(1,1)",64,0,278,26
 914               		.stabn	192,0,0,.LBB8-SearchValidBit
 915               		.stabn	224,0,0,.LBE8-SearchValidBit
 916               	.Lscope7:
 917               		.stabs	"",36,0,0,.Lscope7-SearchValidBit
 918               		.stabs	"ExtractData:F(4,2)",36,0,319,ExtractData
 919               		.stabs	"size:P(4,2)",64,0,318,28
 920               	.global	ExtractData
 921               		.type	ExtractData, @function
 922               	ExtractData:
 312:level2.c      **** 
 313:level2.c      **** 
 314:level2.c      **** // ==================================================================
 315:level2.c      **** // Extracts decoded data to bytes accroding to start position
 316:level2.c      **** //   valid start range is < 255 
 317:level2.c      **** 
 318:level2.c      **** uint8_t ExtractData( uint8_t size ) 
 319:level2.c      **** {
 923               		.stabn 68,0,319,.LM131-ExtractData
 924               	.LM131:
 925               	/* prologue: frame size=0 */
 926 0360 0F93      		push r16
 927 0362 1F93      		push r17
 928 0364 CF93      		push r28
 929               	/* prologue end (size=3) */
 930 0366 C82F      		mov r28,r24
 320:level2.c      ****     uint8_t value = 0;
 931               		.stabn 68,0,320,.LM132-ExtractData
 932               	.LM132:
 933               	.LBB9:
 934 0368 10E0      		ldi r17,lo8(0)
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s 			page 23


 321:level2.c      ****     uint8_t valid;
 322:level2.c      ****     uint8_t pom;  
 323:level2.c      ****     uint8_t start;
 324:level2.c      ****     uint8_t bitcnt;
 325:level2.c      ****     uint8_t ptr = 0;  
 935               		.stabn 68,0,325,.LM133-ExtractData
 936               	.LM133:
 937 036a 012F      		mov r16,r17
 326:level2.c      ****     uint8_t running_one;
 327:level2.c      ****     pom = SearchValidBit( 0 , 7 );             //find the first valid bit in 0th byte of capture_va
 938               		.stabn 68,0,327,.LM134-ExtractData
 939               	.LM134:
 940 036c 67E0      		ldi r22,lo8(7)
 941 036e 812F      		mov r24,r17
 942 0370 B0DF      		rcall SearchValidBit
 328:level2.c      ****     if ( pom == 255 )
 943               		.stabn 68,0,328,.LM135-ExtractData
 944               	.LM135:
 945 0372 8F3F      		cpi r24,lo8(-1)
 946 0374 09F4      		brne .+2
 947 0376 4BC0      		rjmp .L102
 329:level2.c      ****     	  return size;
 330:level2.c      ****     start = pom;
 948               		.stabn 68,0,330,.LM136-ExtractData
 949               	.LM136:
 950 0378 482F      		mov r20,r24
 331:level2.c      ****  
 332:level2.c      ****     bitcnt = start % 8;                                     //set the pointers
 951               		.stabn 68,0,332,.LM137-ExtractData
 952               	.LM137:
 953 037a 682F      		mov r22,r24
 954 037c 6770      		andi r22,lo8(7)
 333:level2.c      ****     start = start / 8;
 955               		.stabn 68,0,333,.LM138-ExtractData
 956               	.LM138:
 957 037e 4695      		lsr r20
 958 0380 4695      		lsr r20
 959 0382 4695      		lsr r20
 334:level2.c      ****     running_one = 1 << ( 7 - bitcnt );
 960               		.stabn 68,0,334,.LM139-ExtractData
 961               	.LM139:
 962 0384 27E0      		ldi r18,lo8(7)
 963 0386 30E0      		ldi r19,hi8(7)
 964 0388 261B      		sub r18,r22
 965 038a 3109      		sbc r19,__zero_reg__
 966 038c 81E0      		ldi r24,lo8(1)
 967 038e 90E0      		ldi r25,hi8(1)
 968 0390 02C0      		rjmp 2f
 969 0392 880F      	1:	lsl r24
 970 0394 991F      		rol r25
 971 0396 2A95      	2:	dec r18
 972 0398 E2F7      		brpl 1b
 973 039a 582F      		mov r21,r24
 335:level2.c      **** 
 336:level2.c      ****     pom = capture.capture_data[ start ] & running_one;                  //check the 1st bit is '1'
 974               		.stabn 68,0,336,.LM140-ExtractData
 975               	.LM140:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s 			page 24


 976 039c E42F      		mov r30,r20
 977 039e FF27      		clr r31
 978 03a0 E050      		subi r30,lo8(-(capture))
 979 03a2 F040      		sbci r31,hi8(-(capture))
 980 03a4 8081      		ld r24,Z
 981 03a6 8523      		and r24,r21
 337:level2.c      **** 
 338:level2.c      ****     if ( pom == 0 )
 982               		.stabn 68,0,338,.LM141-ExtractData
 983               	.LM141:
 984 03a8 91F1      		breq .L102
 339:level2.c      ****     	  return size;
 340:level2.c      **** 
 341:level2.c      ****     while ( size > 0 ) 
 985               		.stabn 68,0,341,.LM142-ExtractData
 986               	.LM142:
 987 03aa CC23      		tst r28
 988 03ac 81F1      		breq .L102
 989               	.L108:
 342:level2.c      ****     {
 343:level2.c      ****         if ( bitcnt == 7 ) //increment position to next bit
 990               		.stabn 68,0,343,.LM143-ExtractData
 991               	.LM143:
 992 03ae 6730      		cpi r22,lo8(7)
 993 03b0 21F4      		brne .L104
 344:level2.c      ****         {                                    
 345:level2.c      ****             bitcnt = 0;
 994               		.stabn 68,0,345,.LM144-ExtractData
 995               	.LM144:
 996 03b2 60E0      		ldi r22,lo8(0)
 346:level2.c      ****             running_one = 0x80;
 997               		.stabn 68,0,346,.LM145-ExtractData
 998               	.LM145:
 999 03b4 50E8      		ldi r21,lo8(-128)
 347:level2.c      ****             start++;
 1000               		.stabn 68,0,347,.LM146-ExtractData
 1001               	.LM146:
 1002 03b6 4F5F      		subi r20,lo8(-(1))
 1003 03b8 02C0      		rjmp .L105
 1004               	.L104:
 348:level2.c      ****         } 
 349:level2.c      ****         else 
 350:level2.c      ****         {
 351:level2.c      ****             bitcnt++;
 1005               		.stabn 68,0,351,.LM147-ExtractData
 1006               	.LM147:
 1007 03ba 6F5F      		subi r22,lo8(-(1))
 352:level2.c      ****             running_one >>= 1;
 1008               		.stabn 68,0,352,.LM148-ExtractData
 1009               	.LM148:
 1010 03bc 5695      		lsr r21
 1011               	.L105:
 353:level2.c      ****         } 
 354:level2.c      ****  
 355:level2.c      ****         pom = capture.capture_data[ start ] & running_one;
 1012               		.stabn 68,0,355,.LM149-ExtractData
 1013               	.LM149:
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s 			page 25


 1014 03be E42F      		mov r30,r20
 1015 03c0 FF27      		clr r31
 1016 03c2 E050      		subi r30,lo8(-(capture))
 1017 03c4 F040      		sbci r31,hi8(-(capture))
 1018 03c6 8081      		ld r24,Z
 1019 03c8 8523      		and r24,r21
 356:level2.c      ****         value >>= 1;
 1020               		.stabn 68,0,356,.LM150-ExtractData
 1021               	.LM150:
 1022 03ca 0695      		lsr r16
 357:level2.c      ****         if ( pom != 0 ) 
 1023               		.stabn 68,0,357,.LM151-ExtractData
 1024               	.LM151:
 1025 03cc 8111      		cpse r24,__zero_reg__
 358:level2.c      ****         	  value |= 0x80;      
 1026               		.stabn 68,0,358,.LM152-ExtractData
 1027               	.LM152:
 1028 03ce 0068      		ori r16,lo8(-128)
 1029               	.L106:
 359:level2.c      **** 
 360:level2.c      ****         valid = capture.capture_valid[ start ] & running_one;
 1030               		.stabn 68,0,360,.LM153-ExtractData
 1031               	.LM153:
 1032 03d0 E058      		subi r30,lo8(-(128))
 1033 03d2 FF4F      		sbci r31,hi8(-(128))
 1034 03d4 8081      		ld r24,Z
 1035 03d6 8523      		and r24,r21
 361:level2.c      ****         if ( valid != 0 )
 1036               		.stabn 68,0,361,.LM154-ExtractData
 1037               	.LM154:
 1038 03d8 D1F4      		brne .L102
 362:level2.c      ****             break;
 363:level2.c      ****         size--;
 1039               		.stabn 68,0,363,.LM155-ExtractData
 1040               	.LM155:
 1041 03da C150      		subi r28,lo8(-(-1))
 364:level2.c      ****         data_buffer[ ptr / 8 ] = value >> ( 7 - ( ptr & 7 ) );              //always store the byte
 1042               		.stabn 68,0,364,.LM156-ExtractData
 1043               	.LM156:
 1044 03dc 812F      		mov r24,r17
 1045 03de 8695      		lsr r24
 1046 03e0 8695      		lsr r24
 1047 03e2 8695      		lsr r24
 1048 03e4 E82F      		mov r30,r24
 1049 03e6 FF27      		clr r31
 1050 03e8 E050      		subi r30,lo8(-(data_buffer))
 1051 03ea F040      		sbci r31,hi8(-(data_buffer))
 1052 03ec 202F      		mov r18,r16
 1053 03ee 3327      		clr r19
 1054 03f0 812F      		mov r24,r17
 1055 03f2 9927      		clr r25
 1056 03f4 8095      		com r24
 1057 03f6 9095      		com r25
 1058 03f8 8770      		andi r24,lo8(7)
 1059 03fa 9070      		andi r25,hi8(7)
 1060 03fc 02C0      		rjmp 2f
 1061 03fe 3595      	1:	asr r19
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccU5baaa.s 			page 26


 1062 0400 2795      		ror r18
 1063 0402 8A95      	2:	dec r24
 1064 0404 E2F7      		brpl 1b
 1065 0406 2083      		st Z,r18
 365:level2.c      ****         ptr++;
 1066               		.stabn 68,0,365,.LM157-ExtractData
 1067               	.LM157:
 1068 0408 1F5F   

⌨️ 快捷键说明

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