📄 project.lst
字号:
(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 + -