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

📄 level3.lst

📁 此程序为利用mage8 AVR 和EM4094实现读取TYPE A类型卡的C程序、读卡稳定、这个项目我们做了好久、非常不错的程序、很适合做这方面产品的朋友们参考
💻 LST
📖 第 1 页 / 共 5 页
字号:
 403               	.L22:
 404               		.stabn 68,0,141,.LM60-Send
 405               	.LM60:
 406 0142 EC2F      		mov r30,r28
 407 0144 FF27      		clr r31
 408 0146 E050      		subi r30,lo8(-(cmd_message))
 409 0148 F040      		sbci r31,hi8(-(cmd_message))
 410 014a 612F      		mov r22,r17
 411 014c 8081      		ld r24,Z
 412 014e 00D0      		rcall Prepare_Data
 413 0150 080F      		add r16,r24
 414               		.stabn 68,0,140,.LM61-Send
 415               	.LM61:
 416 0152 CF5F      		subi r28,lo8(-(1))
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmgaaaa.s 			page 11


 417 0154 C117      		cp r28,r17
 418 0156 A8F3      		brlo .L22
 419 0158 E0CF      		rjmp .L25
 155:level3.c      **** }
 420               		.stabn 68,0,155,.LM62-Send
 421               	.LM62:
 422               	.L17:
 423               	.LBE4:
 424               	/* epilogue: frame size=0 */
 425 015a CF91      		pop r28
 426 015c 1F91      		pop r17
 427 015e 0F91      		pop r16
 428 0160 FF90      		pop r15
 429 0162 EF90      		pop r14
 430 0164 0895      		ret
 431               	/* epilogue end (size=6) */
 432               	/* function Send size 50 (39) */
 433               		.size	Send, .-Send
 434               		.stabs	"fwd_bit_count:r(4,2)",64,0,136,16
 435               		.stabs	"i:r(4,2)",64,0,137,28
 436               		.stabn	192,0,0,.LBB4-Send
 437               		.stabn	224,0,0,.LBE4-Send
 438               	.Lscope3:
 439               		.stabs	"",36,0,0,.Lscope3-Send
 440               		.stabs	"TA_UID:t(1,1)=(1,2)=s20atqa:(4,4),0,16;uid:(1,3)=ar(12,3);0;14;(4,2),16,120;sak:(1,4)=ar(1
 441               		.stabs	"TypeA_GetUID:F(0,20)",36,0,169,TypeA_GetUID
 442               	.global	TypeA_GetUID
 443               		.type	TypeA_GetUID, @function
 444               	TypeA_GetUID:
 156:level3.c      **** 
 157:level3.c      **** //--------------------------------------------------------------
 158:level3.c      **** // general read function
 159:level3.c      **** //
 160:level3.c      **** 
 161:level3.c      **** 
 162:level3.c      **** typedef struct {
 163:level3.c      ****     uint16_t atqa;
 164:level3.c      ****     uint8_t uid[ 3 * 5 ];
 165:level3.c      ****     uint8_t sak[ 3 ];
 166:level3.c      **** } TA_UID;
 167:level3.c      **** 
 168:level3.c      **** void TypeA_GetUID( void ) 
 169:level3.c      **** {
 445               		.stabn 68,0,169,.LM63-TypeA_GetUID
 446               	.LM63:
 447               	/* prologue: frame size=20 */
 448 0166 CF93      		push r28
 449 0168 DF93      		push r29
 450 016a CDB7      		in r28,__SP_L__
 451 016c DEB7      		in r29,__SP_H__
 452 016e 6497      		sbiw r28,20
 453 0170 0FB6      		in __tmp_reg__,__SREG__
 454 0172 F894      		cli
 455 0174 DEBF      		out __SP_H__,r29
 456 0176 0FBE      		out __SREG__,__tmp_reg__
 457 0178 CDBF      		out __SP_L__,r28
 458               	/* prologue end (size=10) */
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmgaaaa.s 			page 12


 170:level3.c      ****     uint8_t i , j , cascade;
 171:level3.c      ****     TA_UID ta_uid;
 172:level3.c      ****     
 173:level3.c      **** //    cbi( PORTD , DBG_FORWARD );  
 174:level3.c      **** 
 175:level3.c      ****     forward_link_type   = 0x02; 
 459               		.stabn 68,0,175,.LM64-TypeA_GetUID
 460               	.LM64:
 461               	.LBB5:
 462 017a 82E0      		ldi r24,lo8(2)
 463 017c 8093 0000 		sts forward_link_type,r24
 176:level3.c      ****     cmd_message[ 0 ]    = 0x26; //REQA
 464               		.stabn 68,0,176,.LM65-TypeA_GetUID
 465               	.LM65:
 466 0180 86E2      		ldi r24,lo8(38)
 467 0182 8093 0000 		sts cmd_message,r24
 177:level3.c      ****     expectedResponseLen = 0x10;
 468               		.stabn 68,0,177,.LM66-TypeA_GetUID
 469               	.LM66:
 470 0186 80E1      		ldi r24,lo8(16)
 471 0188 8093 0000 		sts expectedResponseLen,r24
 178:level3.c      ****     
 179:level3.c      ****     Send( 1 , 30 );
 472               		.stabn 68,0,179,.LM67-TypeA_GetUID
 473               	.LM67:
 474 018c 6EE1      		ldi r22,lo8(30)
 475 018e 70E0      		ldi r23,hi8(30)
 476 0190 81E0      		ldi r24,lo8(1)
 477 0192 B7DF      		rcall Send
 180:level3.c      ****      
 181:level3.c      ****     wdt_reset( );
 478               		.stabn 68,0,181,.LM68-TypeA_GetUID
 479               	.LM68:
 480               	/* #APP */
 481 0194 A895      		wdr
 182:level3.c      **** #ifdef WDT
 183:level3.c      ****         WatchDog_Feed( );
 482               		.stabn 68,0,183,.LM69-TypeA_GetUID
 483               	.LM69:
 484               	/* #NOAPP */
 485 0196 00D0      		rcall WatchDog_Feed
 184:level3.c      **** #endif
 185:level3.c      ****        
 186:level3.c      ****     Capture( );
 486               		.stabn 68,0,186,.LM70-TypeA_GetUID
 487               	.LM70:
 488 0198 33DF      		rcall Capture
 187:level3.c      ****     
 188:level3.c      **** 
 189:level3.c      ****     wdt_reset( );
 489               		.stabn 68,0,189,.LM71-TypeA_GetUID
 490               	.LM71:
 491               	/* #APP */
 492 019a A895      		wdr
 190:level3.c      **** #ifdef WDT
 191:level3.c      ****         WatchDog_Feed( );
 493               		.stabn 68,0,191,.LM72-TypeA_GetUID
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmgaaaa.s 			page 13


 494               	.LM72:
 495               	/* #NOAPP */
 496 019c 00D0      		rcall WatchDog_Feed
 192:level3.c      **** #endif    
 193:level3.c      ****     clean_data_cnt = ExtractTypeAData( 248 );
 497               		.stabn 68,0,193,.LM73-TypeA_GetUID
 498               	.LM73:
 499 019e 88EF      		ldi r24,lo8(-8)
 500 01a0 00D0      		rcall ExtractTypeAData
 501 01a2 982F      		mov r25,r24
 502 01a4 8093 0000 		sts clean_data_cnt,r24
 194:level3.c      **** 
 195:level3.c      ****     if ( clean_data_cnt == expectedResponseLen ) 
 503               		.stabn 68,0,195,.LM74-TypeA_GetUID
 504               	.LM74:
 505 01a8 8091 0000 		lds r24,expectedResponseLen
 506 01ac 9817      		cp r25,r24
 507 01ae 19F0      		breq .L49
 508               	.L34:
 196:level3.c      ****     {
 197:level3.c      ****         ta_uid.atqa = ( data_buffer[ 1 ] << 8 ) | ( data_buffer[ 0 ] );
 198:level3.c      ****     } 
 199:level3.c      ****     else 
 200:level3.c      ****     {    	  
 201:level3.c      ****         em4094_data_valid = 0x00 ;
 202:level3.c      ****         return;
 203:level3.c      ****     }
 204:level3.c      ****     i = data_buffer[ 0 ];
 205:level3.c      ****     j = i & 0x1F;
 206:level3.c      ****     if ( ( data_buffer[ 1 ] & 0x0F ) || ( ( i & 0xC0 ) == 0xC0 ) ||
 207:level3.c      ****       ( !( ( j == 0x01 ) || ( j == 0x02 ) || ( j == 0x04 ) || ( j == 0x08 ) || ( j == 0x10 ) ) ) ) 
 208:level3.c      ****     {
 209:level3.c      ****     	  em4094_data_valid = 0x00 ;
 210:level3.c      ****      	  return;
 211:level3.c      ****     }  
 212:level3.c      **** //    Beep( 2 );       
 213:level3.c      ****     cascade = 0;        //cascade loop
 214:level3.c      **** 
 215:level3.c      ****     i = 0x04;
 216:level3.c      **** 
 217:level3.c      ****     while ( i != 0 ) 
 218:level3.c      ****     {
 219:level3.c      **** 
 220:level3.c      ****         expectedResponseLen = 0x28;
 221:level3.c      ****         cmd_message[0] = cascade * 2 + 0x93;
 222:level3.c      ****         cmd_message[1] = 0x20;     //SEL (NVB = 0x20)
 223:level3.c      ****        
 224:level3.c      ****         Send( 2 , 30 );
 225:level3.c      **** 
 226:level3.c      ****         Capture( );
 227:level3.c      **** 
 228:level3.c      ****         clean_data_cnt = ExtractTypeAData( 248 );
 229:level3.c      **** 
 230:level3.c      ****         if ( clean_data_cnt == expectedResponseLen ) 
 231:level3.c      ****         {
 232:level3.c      ****             for ( i = 0 ; i < 5 ; i++ ) 
 233:level3.c      ****             {
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmgaaaa.s 			page 14


 234:level3.c      ****                 ta_uid.uid[ cascade * 5 + i ] = data_buffer[ i ];    //store this uid part
 235:level3.c      **** //                SendByte( data_buffer[ i ] );
 236:level3.c      **** //                weigan_data[ i ] = data_buffer[ i ] ;
 237:level3.c      **** //                Beep( 3 );
 238:level3.c      ****                 cmd_message[ 2 + i ] = data_buffer[ i ];                      //copy uid part to cm
 239:level3.c      ****             }
 240:level3.c      ****             weigan_data[ 0 ] = data_buffer[ 3 ]; 
 241:level3.c      ****             weigan_data[ 1 ] = data_buffer[ 2 ];
 242:level3.c      ****             weigan_data[ 2 ] = data_buffer[ 1 ];
 243:level3.c      ****             weigan_data[ 3 ] = data_buffer[ 0 ];
 244:level3.c      ****             weigan_data[ 4 ] = data_buffer[ 4 ];
 245:level3.c      ****             em4094_data_valid = 0x55 ;
 246:level3.c      **** //            SendByte(  0xC0 + cascade );
 247:level3.c      **** //            Beep(2);
 248:level3.c      ****             return;
 249:level3.c      ****         } 
 250:level3.c      ****         else 
 251:level3.c      ****         {
 252:level3.c      ****             em4094_data_valid = 0x00 ;
 509               		.stabn 68,0,252,.LM75-TypeA_GetUID
 510               	.LM75:
 511               	.LBB6:
 512 01b0 1092 0000 		sts em4094_data_valid,__zero_reg__
 513 01b4 61C0      		rjmp .L26
 514               		.stabn 68,0,202,.LM76-TypeA_GetUID
 515               	.LM76:
 516               	.L49:
 517               	.LBE6:
 518 01b6 8091 0000 		lds r24,data_buffer+1
 519 01ba 282F      		mov r18,r24
 520 01bc 3327      		clr r19
 521 01be 922F      		mov r25,r18
 522 01c0 8827      		clr r24
 523 01c2 4091 0000 		lds r20,data_buffer
 524 01c6 642F      		mov r22,r20
 525 01c8 7727      		clr r23
 526 01ca 862B      		or r24,r22
 527 01cc 972B      		or r25,r23
 528 01ce 8983      		std Y+1,r24
 529 01d0 9A83      		std Y+2,r25
 530               		.stabn 68,0,205,.LM77-TypeA_GetUID
 531               	.LM77:
 532 01d2 4F71      		andi r20,lo8(31)
 533               		.stabn 68,0,206,.LM78-TypeA_GetUID
 534               	.LM78:
 535 01d4 2F70      		andi r18,lo8(15)
 536 01d6 3070      		andi r19,hi8(15)
 537 01d8 232B      		or r18,r19
 538 01da 51F7      		brne .L34
 539 01dc 607C      		andi r22,lo8(192)
 540 01de 7070      		andi r23,hi8(192)
 541 01e0 603C      		cpi r22,192
 542 01e2 7105      		cpc r23,__zero_reg__
 543 01e4 29F3      		breq .L34
 544 01e6 842F      		mov r24,r20
 545 01e8 8150      		subi r24,lo8(-(-1))
 546 01ea 8230      		cpi r24,lo8(2)
GAS LISTING C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccmgaaaa.s 			page 15


 547 01ec 30F0      		brlo .L29
 548 01ee 4430      		cpi r20,lo8(4)
 549 01f0 21F0      		breq .L29
 550 01f2 4830      		cpi r20,lo8(8)
 551 01f4 11F0      		breq .L29
 552 01f6 4031      		cpi r20,lo8(16)
 553 01f8 D9F6      		brne .L34
 554               	.L29:
 555               		.stabn 68,0,220,.LM79-TypeA_GetUID
 556               	.LM79:
 557               	.LBB7:
 558 01fa 88E2      		ldi r24,lo8(40)
 559 01fc 8093 0000 		sts expectedResponseLen,r24
 560               		.stabn 68,0,221,.LM80-TypeA_GetUID
 561               	.LM80:
 562 0200 83E9      		ldi r24,lo8(-109)
 563 0202 8093 0000 		sts cmd_message,r24
 564               		.stabn 68,0,222,.LM81-TypeA_GetUID
 565               	.LM81:
 566 0206 80E2      		ldi r24,lo8(32)
 567 0208 8093 0000 		sts cmd_message+1,r24
 568               		.stabn 68,0,224,.LM82-TypeA_GetUID
 569               	.LM82:
 570 020c 6EE1      		ldi r22,lo8(30)
 571 020e 70E0      		ldi r23,hi8(30)
 572 0210 82E0      		ldi r24,lo8(2)
 573 0212 77DF      		rcall Send
 574               		.stabn 68,0,226,.LM83-TypeA_GetUID
 575               	.LM83:
 576 0214 F5DE      		rcall Capture
 577               		.stabn 68,0,228,.LM84-TypeA_GetUID
 578               	.LM84:
 579 0216 88EF      		ldi r24,lo8(-8)
 580 0218 00D0      		rcall ExtractTypeAData
 581 021a 982F      		mov r25,r24
 582 021c 8093 0000 		sts clean_data_cnt,r24

⌨️ 快捷键说明

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