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

📄 project.lst

📁 AVR单片机 C语言程序设计经典实用
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0576) // Description : Parse Received String and Execute Command
(0577) //********************************************************************
(0578) void SCI_Parsing(struct SCI_Buffer *ptr)
(0579) {
(0580) 	INT8S wLow;
(0581) 	INT8S wHigh;
(0582) 	INT8S wMid;
(0583) 	char wCommandBuffer[2];
(0584) 	wCommandBuffer[0] = ptr->bRxBuffer[0];
    03C8 01FA      MOVW	R30,R20
    03C9 8023      LDD	R2,Z+3
    03CA 822A      STD	Y+2,R2
(0585) 	wCommandBuffer[1] = ptr->bRxBuffer[1];
    03CB 01FA      MOVW	R30,R20
    03CC 8024      LDD	R2,Z+4
    03CD 822B      STD	Y+3,R2
(0586) 	
(0587) 	wLow = 0;
    03CE 2766      CLR	R22
(0588) 	wHigh = 8 - 1;
    03CF E087      LDI	R24,7
    03D0 2EA8      MOV	R10,R24
(0589) 	wMid = wHigh >> 1;
    03D1 2F48      MOV	R20,R24
    03D2 9545      ASR	R20
    03D3 C01F      RJMP	0x03F3
(0590) 		
(0591) 	while(wLow <= wHigh && strncmp(wCommandTabArray[wMid],wCommandBuffer,2)!=0)
(0592) 	{
(0593) 		if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2) > 0)
    03D4 E082      LDI	R24,2
    03D5 E090      LDI	R25,0
    03D6 8399      STD	Y+1,R25
    03D7 8388      STD	Y+0,R24
    03D8 019E      MOVW	R18,R28
    03D9 5F2E      SUBI	R18,0xFE
    03DA 4F3F      SBCI	R19,0xFF
    03DB E002      LDI	R16,2
    03DC 2F14      MOV	R17,R20
    03DD 0201      MULS	R16,R17
    03DE 0180      MOVW	R16,R0
    03DF E784      LDI	R24,0x74
    03E0 E090      LDI	R25,0
    03E1 0F08      ADD	R16,R24
    03E2 1F19      ADC	R17,R25
    03E3 940E0669  CALL	_strncmp
    03E5 2422      CLR	R2
    03E6 2433      CLR	R3
    03E7 1620      CP	R2,R16
    03E8 0631      CPC	R3,R17
    03E9 F424      BGE	0x03EE
(0594) 		{
(0595) 			wHigh = wMid - 1;	
    03EA 2F84      MOV	R24,R20
    03EB 5081      SUBI	R24,1
    03EC 2EA8      MOV	R10,R24
(0596) 		}
    03ED C002      RJMP	0x03F0
(0597) 		else
(0598) 		{
(0599) 			wLow = wMid + 1;
    03EE 2F64      MOV	R22,R20
    03EF 5F6F      SUBI	R22,0xFF
(0600) 		}
(0601) 			
(0602) 		wMid = (wLow + wHigh) >> 1;
    03F0 2F46      MOV	R20,R22
    03F1 0D4A      ADD	R20,R10
    03F2 9545      ASR	R20
    03F3 16A6      CP	R10,R22
    03F4 F0A4      BLT	0x0409
    03F5 E082      LDI	R24,2
    03F6 E090      LDI	R25,0
    03F7 8399      STD	Y+1,R25
    03F8 8388      STD	Y+0,R24
    03F9 019E      MOVW	R18,R28
    03FA 5F2E      SUBI	R18,0xFE
    03FB 4F3F      SBCI	R19,0xFF
    03FC E002      LDI	R16,2
    03FD 2F14      MOV	R17,R20
    03FE 0201      MULS	R16,R17
    03FF 0180      MOVW	R16,R0
    0400 E784      LDI	R24,0x74
    0401 E090      LDI	R25,0
    0402 0F08      ADD	R16,R24
    0403 1F19      ADC	R17,R25
    0404 940E0669  CALL	_strncmp
    0406 3000      CPI	R16,0
    0407 0701      CPC	R16,R17
    0408 F659      BNE	0x03D4
(0603) 	}
(0604) 		
(0605) 	if(strncmp(wCommandTabArray[wMid],wCommandBuffer,2)==0)
    0409 E082      LDI	R24,2
    040A E090      LDI	R25,0
    040B 8399      STD	Y+1,R25
    040C 8388      STD	Y+0,R24
    040D 019E      MOVW	R18,R28
    040E 5F2E      SUBI	R18,0xFE
    040F 4F3F      SBCI	R19,0xFF
    0410 E002      LDI	R16,2
    0411 2F14      MOV	R17,R20
    0412 0201      MULS	R16,R17
    0413 0180      MOVW	R16,R0
    0414 E784      LDI	R24,0x74
    0415 E090      LDI	R25,0
    0416 0F08      ADD	R16,R24
    0417 1F19      ADC	R17,R25
    0418 940E0669  CALL	_strncmp
    041A 3000      CPI	R16,0
    041B 0701      CPC	R16,R17
    041C F469      BNE	0x042A
(0606) 	{
(0607) 		CommandJobArray[wMid]();
    041D E002      LDI	R16,2
    041E 2F14      MOV	R17,R20
    041F 0201      MULS	R16,R17
    0420 01F0      MOVW	R30,R0
    0421 E684      LDI	R24,0x64
    0422 E090      LDI	R25,0
    0423 0FE8      ADD	R30,R24
    0424 1FF9      ADC	R31,R25
    0425 81A0      LDD	R26,Z+0
    0426 81B1      LDD	R27,Z+1
    0427 01FD      MOVW	R30,R26
    0428 940E071A  CALL	xicall
(0608) 	}
(0609) }
    042A 9624      ADIW	R28,4
    042B 940E06F8  CALL	pop_gset3
    042D 9508      RET
_sbNumAsciiPick:
  bCode                --> R10
  bPosition            --> Y+10
  dwData               --> Y+6
    042E 940E067F  CALL	push_arg4
    0430 940E0716  CALL	push_gset3
(0610) 
(0611) //********************************************************************
(0612) // Function    : sbNumAsciiPick
(0613) // Input       : dwData -Input Data,bPosition-Selected Index
(0614) // Output      : Position Index in Decimal System
(0615) // Description : Extract out Selected Number in Decimal System
(0616) //********************************************************************
(0617) INT8U sbNumAsciiPick(INT32U dwData,INT8U bPosition)
(0618) {
(0619) 	INT8U	bCode;
(0620) 	switch(bPosition)
    0432 84AA      LDD	R10,Y+10
    0433 24BB      CLR	R11
    0434 01C5      MOVW	R24,R10
    0435 3081      CPI	R24,1
    0436 E0E0      LDI	R30,0
    0437 079E      CPC	R25,R30
    0438 F409      BNE	0x043A
    0439 C02E      RJMP	0x0468
    043A 3082      CPI	R24,2
    043B E0E0      LDI	R30,0
    043C 079E      CPC	R25,R30
    043D F409      BNE	0x043F
    043E C046      RJMP	0x0485
    043F 3083      CPI	R24,3
    0440 E0E0      LDI	R30,0
    0441 079E      CPC	R25,R30
    0442 F409      BNE	0x0444
    0443 C068      RJMP	0x04AC
    0444 3084      CPI	R24,4
    0445 E0E0      LDI	R30,0
    0446 079E      CPC	R25,R30
    0447 F409      BNE	0x0449
    0448 C08A      RJMP	0x04D3
    0449 3085      CPI	R24,5
    044A E0E0      LDI	R30,0
    044B 079E      CPC	R25,R30
    044C F409      BNE	0x044E
    044D C0AC      RJMP	0x04FA
    044E 3086      CPI	R24,6
    044F E0E0      LDI	R30,0
    0450 079E      CPC	R25,R30
    0451 F409      BNE	0x0453
    0452 C0CE      RJMP	0x0521
    0453 3087      CPI	R24,7
    0454 E0E0      LDI	R30,0
    0455 079E      CPC	R25,R30
    0456 F409      BNE	0x0458
    0457 C0F0      RJMP	0x0548
    0458 3088      CPI	R24,0x8
    0459 E0E0      LDI	R30,0
    045A 079E      CPC	R25,R30
    045B F409      BNE	0x045D
    045C C112      RJMP	0x056F
    045D 3089      CPI	R24,0x9
    045E E0E0      LDI	R30,0
    045F 079E      CPC	R25,R30
    0460 F409      BNE	0x0462
    0461 C134      RJMP	0x0596
    0462 308A      CPI	R24,0xA
    0463 E0E0      LDI	R30,0
    0464 079E      CPC	R25,R30
    0465 F409      BNE	0x0467
    0466 C156      RJMP	0x05BD
    0467 C17C      RJMP	0x05E4
(0621) 	{
(0622) 		case 1:
(0623) 			bCode = dwData % 10 + '0';
    0468 E04A      LDI	R20,0xA
    0469 E050      LDI	R21,0
    046A E060      LDI	R22,0
    046B E070      LDI	R23,0
    046C 01FE      MOVW	R30,R28
    046D 8026      LDD	R2,Z+6
    046E 8037      LDD	R3,Z+7
    046F 8440      LDD	R4,Z+8
    0470 8451      LDD	R5,Z+9
    0471 937A      ST	R23,-Y
    0472 936A      ST	R22,-Y
    0473 935A      ST	R21,-Y
    0474 934A      ST	R20,-Y
    0475 0181      MOVW	R16,R2
    0476 0192      MOVW	R18,R4
    0477 940E0686  CALL	mod32u
    0479 0118      MOVW	R2,R16
    047A 0129      MOVW	R4,R18
    047B E340      LDI	R20,0x30
    047C E050      LDI	R21,0
    047D E060      LDI	R22,0
    047E E070      LDI	R23,0
    047F 0E24      ADD	R2,R20
    0480 1E35      ADC	R3,R21
    0481 1E46      ADC	R4,R22
    0482 1E57      ADC	R5,R23
    0483 2CA2      MOV	R10,R2
(0624) 			break;
    0484 C161      RJMP	0x05E6
(0625) 		case 2:
(0626) 			bCode = (dwData / 10) % 10 + '0';
    0485 E04A      LDI	R20,0xA
    0486 E050      LDI	R21,0
    0487 E060      LDI	R22,0
    0488 E070      LDI	R23,0
    0489 01FE      MOVW	R30,R28
    048A 8026      LDD	R2,Z+6
    048B 8037      LDD	R3,Z+7
    048C 8440      LDD	R4,Z+8
    048D 8451      LDD	R5,Z+9
    048E 937A      ST	R23,-Y
    048F 936A      ST	R22,-Y
    0490 935A      ST	R21,-Y
    0491 934A      ST	R20,-Y
    0492 0181      MOVW	R16,R2
    0493 0192      MOVW	R18,R4
    0494 940E0684  CALL	div32u
    0496 E04A      LDI	R20,0xA
    0497 E050      LDI	R21,0
    0498 E060      LDI	R22,0
    0499 E070      LDI	R23,0
    049A 937A      ST	R23,-Y
    049B 936A      ST	R22,-Y
    049C 935A      ST	R21,-Y
    049D 934A      ST	R20,-Y
    049E 940E0686  CALL	mod32u
    04A0 0118      MOVW	R2,R16
    04A1 0129      MOVW	R4,R18
    04A2 E340      LDI	R20,0x30
    04A3 E050      LDI	R21,0
    04A4 E060      LDI	R22,0
    04A5 E070      LDI	R23,0
    04A6 0E24      ADD	R2,R20
    04A7 1E35      ADC	R3,R21
    04A8 1E46      ADC	R4,R22
    04A9 1E57      ADC	R5,R23
    04AA 2CA2      MOV	R10,R2
(0627) 			break;
    04AB C13A      RJMP	0x05E6
(0628) 		case 3:
(0629) 			bCode = (dwData / 100) % 10 + '0';
    04AC E644      LDI	R20,0x64
    04AD E050      LDI	R21,0
    04AE E060      LDI	R22,0
    04AF E070      LDI	R23,0
    04B0 01FE      MOVW	R30,R28
    04B1 8026      LDD	R2,Z+6
    04B2 8037      LDD	R3,Z+7
    04B3 8440      LDD	R4,Z+8
    04B4 8451      LDD	R5,Z+9
    04B5 937A      ST	R23,-Y
    04B6 936A      ST	R22,-Y
    04B7 935A      ST	R21,-Y
    04B8 934A      ST	R20,-Y
    04B9 0181      MOVW	R16,R2
    04BA 0192      MOVW	R18,R4
    04BB 940E0684  CALL	div32u
    04BD E04A      LDI	R20,0xA
    04BE E050      LDI	R21,0
    04BF E060      LDI	R22,0
    04C0 E070      LDI	R23,0
    04C1 937A      ST	R23,-Y
    04C2 936A      ST	R22,-Y
    04C3 935A      ST	R21,-Y
    04C4 934A      ST	R20,-Y
    04C5 940E0686  CALL	mod32u
    04C7 0118      MOVW	R2,R16
    04C8 0129      MOVW	R4,R18
    04C9 E340      LDI	R20,0x30
    04CA E050      LDI	R21,0
    04CB E060      LDI	R22,0
    04CC E070      LDI	R23,0
    04CD 0E24      ADD	R2,R20
    04CE 1E35      ADC	R3,R21
    04CF 1E46      ADC	R4,R22
    04D0 1E57      ADC	R5,R23
    04D1 2CA2      MOV	R10,R2
(0630) 			break;
    04D2 C113      RJMP	0x05E6
(0631) 		case 4:
(0632) 			bCode = (dwData / 1000) % 10 + '0';
    04D3 EE48      LDI	R20,0xE8
    04D4 E053      LDI	R21,3
    04D5 E060      LDI	R22,0
    04D6 E070      LDI	R23,0
    04D7 01FE      MOVW	R30,R28
    04D8 8026      LDD	R2,Z+6
    04D9 8037      LDD	R3,Z+7
    04DA 8440      LDD	R4,Z+8
    04DB 8451      LDD	R5,Z+9
    04DC 937A      ST	R23,-Y
    04DD 936A      ST	R22,-Y
    04DE 935A      ST	R21,-Y
    04DF 934A      ST	R20,-Y
    04E0 0181      MOVW	R16,R2
    04E1 0192      MOVW	R18,R4
    04E2 940E0684  CALL	div32u
    04E4 E04A      LDI	R20,0xA
    04E5 E050      LDI	R21,0
    04E6 E060      LDI	R22,0
    04E7 E070      LDI	R23,0
    04E8 937A      ST	R23,-Y
    04E9 936A      ST	R22,-Y
    04EA 935A      ST	R21,-Y
    04EB 934A      ST	R20,-Y
    04EC 940E0686  CALL	mod32u
    04EE 0118      MOVW	R2,R16
    04EF 0129      MOVW	R4,R18
    04F0 E340      LDI	R20,0x30
    04F1 E050      LDI	R21,0
    04F2 E060      LDI	R22,0
    04F3 E070      LDI	R23,0
    04F4 0E24      ADD	R2,R20
    04F5 1E35      ADC	R3,R21
    04F6 1E46      ADC	R4,R22
    04F7 1E57      ADC	R5,R23
    04F8 2CA2      MOV	R10,R2
(0633) 			break;
    04F9 C0EC      RJMP	0x05E6
(0634) 		case 5:
(0635) 			bCode = (dwData / 10000) % 10 + '0';
    04FA E140      LDI	R20,0x10
    04FB E257      LDI	R21,0x27
    04FC E060      LDI	R22,0
    04FD E070      LDI	R23,0
    04FE 01FE      MOVW	R30,R28
    04FF 8026      LDD	R2,Z+6
    0500 8037      LDD	R3,Z+7
    0501 8440      LDD	R4,Z+8
    0502 8451      LDD	R5,Z+9
    0503 937A      ST	R23,-Y
    0504 936A      ST	R22,-Y
    0505 935A      ST	R21,-Y
    0506 934A      ST	R20,-Y
    0507 0181      MOVW	R16,R2
    0508 0192      MOVW	R18,R4
    0509 940E0684  CALL	div32u
    050B E04A      LDI	R20,0xA
    050C E050      LDI	R21,0
    050D E060      LDI	R22,0
    050E E070      LDI	R23,0
    050F 937A      ST	R23,-Y
    0510 936A      ST	R22,-Y
    0511 935A      ST	R21,-Y
    0512 934A      ST	R20,-Y
    0513 940E0686  CALL	mod32u
    0515 0118      MOVW	R2,R16
    0516 0129      MOVW	R4,R18
    0517 E340      LDI	R20,0x30
    0518 E050      LDI	R21,0
    0519 E060      LDI	R22,0
    051A E070      LDI	R23,0
    0

⌨️ 快捷键说明

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