📄 251.lst
字号:
03B2 01F0 MOVW R30,R0
03B3 0FE8 ADD R30,R24
03B4 1FF9 ADC R31,R25
03B5 8020 LDD R2,Z+0
03B6 8031 LDD R3,Z+1
03B7 ED86 LDI R24,0xD6
03B8 E090 LDI R25,0
03B9 01F0 MOVW R30,R0
03BA 0FE8 ADD R30,R24
03BB 1FF9 ADC R31,R25
03BC 8040 LDD R4,Z+0
03BD 8051 LDD R5,Z+1
03BE 1424 CP R2,R4
03BF 0435 CPC R3,R5
03C0 F490 BCC 0x03D3
(0421) {
(0422) VoltageMotorCurrent[i]--;
03C1 E082 LDI R24,2
03C2 9D8E MUL R24,R14
03C3 0110 MOVW R2,R0
03C4 ED86 LDI R24,0xD6
03C5 E090 LDI R25,0
03C6 0E28 ADD R2,R24
03C7 1E39 ADC R3,R25
03C8 01F1 MOVW R30,R2
03C9 8180 LDD R24,Z+0
03CA 8191 LDD R25,Z+1
03CB 9701 SBIW R24,1
03CC 8391 STD Z+1,R25
03CD 8380 STD Z+0,R24
(0423) AnticlockwiseCmd |=BIT((i+VoltageMotorBias));
03CE 2D1E MOV R17,R14
03CF 5F1E SUBI R17,0xFE
03D0 E001 LDI R16,1
03D1 D66C RCALL lsl8
03D2 2AA0 OR R10,R16
03D3 94E3 INC R14
03D4 E085 LDI R24,5
03D5 158E CP R24,R14
03D6 F008 BCS 0x03D8
03D7 CFB0 RJMP 0x0388
(0424) }
(0425) }
(0426) //invert
(0427) clockwise |= ClockwiseCmd&ClockwiseMotor;
03D8 2D8C MOV R24,R12
03D9 7880 ANDI R24,0x80
03DA 2B68 OR R22,R24
(0428) anticlockwise |= ClockwiseCmd&(~ClockwiseMotor);
03DB 2D8C MOV R24,R12
03DC 778F ANDI R24,0x7F
03DD 2B48 OR R20,R24
(0429) anticlockwise |= AnticlockwiseCmd&(ClockwiseMotor);
03DE 2D8A MOV R24,R10
03DF 7880 ANDI R24,0x80
03E0 2B48 OR R20,R24
(0430) clockwise |= AnticlockwiseCmd&(~ClockwiseMotor);
03E1 2D8A MOV R24,R10
03E2 778F ANDI R24,0x7F
03E3 2B68 OR R22,R24
(0431)
(0432) //CLOCKWISE
(0433) //set DAD1(PB7)
(0434) PORTB |= BIT(7);
03E4 9AC7 SBI 0x18,7
(0435) //set DAC1-8 through SPI
(0436) SPIOutput(clockwise);
03E5 2F06 MOV R16,R22
03E6 DCE9 RCALL _SPIOutput
(0437) PORTB |= BIT(0); //SET OUTCS
03E7 9AC0 SBI 0x18,0
(0438) _NOP();
03E8 0000 NOP
(0439) PORTB &= ~BIT(0); //CLEAR OUTCS
03E9 98C0 CBI 0x18,0
(0440) //clear DAC1-8
(0441) SPIOutput(0);
03EA 2700 CLR R16
03EB DCE4 RCALL _SPIOutput
(0442) PORTB |= BIT(0); //SET OUTCS
03EC 9AC0 SBI 0x18,0
(0443) _NOP();
03ED 0000 NOP
(0444) PORTB &= ~BIT(0); //CLEAR OUTCS
03EE 98C0 CBI 0x18,0
(0445)
(0446)
(0447) //ANTICLOCKWISE
(0448) //clear DAD1(PB7)
(0449) PORTB &= ~BIT(7);
03EF 98C7 CBI 0x18,7
(0450) //set DAC1-8 through SPI
(0451) SPIOutput(anticlockwise);
03F0 2F04 MOV R16,R20
03F1 DCDE RCALL _SPIOutput
(0452) PORTB |= BIT(0); //SET OUTCS
03F2 9AC0 SBI 0x18,0
(0453) _NOP();
03F3 0000 NOP
(0454) PORTB &= ~BIT(0); //CLEAR OUTCS
03F4 98C0 CBI 0x18,0
(0455) //clear DAC1-8
(0456) SPIOutput(0);
03F5 2700 CLR R16
03F6 DCD9 RCALL _SPIOutput
(0457) while ( !(SPSR & BIT(7)) ) ; //wait
03F7 9B77 SBIS 0x0E,7
03F8 CFFE RJMP 0x03F7
(0458) PORTB |= BIT(0); //SET OUTCS
03F9 9AC0 SBI 0x18,0
(0459) _NOP();
03FA 0000 NOP
(0460) PORTB &= ~BIT(0); //CLEAR OUTCS
03FB 98C0 CBI 0x18,0
(0461)
(0462) //BLOCK
(0463) MotorBlocked = 1;
03FC E081 LDI R24,1
03FD 9380006B STS MotorBlocked,R24
03FF D5C3 RCALL pop_gset5
0400 9508 RET
(0464)
(0465) }
(0466)
(0467) void Parallel(void)
(0468) {
(0469) ParallelOutput();
_Parallel:
0401 D005 RCALL _ParallelOutput
(0470) KeyMileageCurrentClear();//注意,小计清零的输入只能放在这里!!!
0402 D183 RCALL _KeyMileageCurrentClear
(0471) ParallelBlocked = 1;
0403 E081 LDI R24,1
0404 9380006D STS ParallelBlocked,R24
0406 9508 RET
(0472) }
(0473)
(0474)
(0475) void ParallelOutput(void)
(0476) {
(0477) SPIOutput( *((char*)&ParallelOutputCmd+1) );
_ParallelOutput:
0407 910000F0 LDS R16,ParallelOutputCmd+1
0409 DCC6 RCALL _SPIOutput
(0478) SPIOutput( *((char*)&ParallelOutputCmd+0) );
040A EEEF LDI R30,0xEF
040B E0F0 LDI R31,0
040C 8100 LDD R16,Z+0
040D DCC2 RCALL _SPIOutput
(0479) PORTD |= BIT(7);
040E 9A97 SBI 0x12,7
(0480) _NOP();
040F 0000 NOP
(0481) PORTD &= ~BIT(7);
0410 9897 CBI 0x12,7
0411 9508 RET
_LCDDecoding:
temp2 --> Y+4
temp1 --> Y+0
i --> R10
0412 D5B6 RCALL push_gset3
0413 9728 SBIW R28,0x8
(0482) }
(0483)
(0484) void LCDDecoding(void)//mileage,MileageCurrent --> LCDContent
(0485) {
(0486) unsigned long temp1,temp2;
(0487) uchar i;
(0488) temp1 = mileage/10;
0414 E04A LDI R20,0xA
0415 E050 LDI R21,0
0416 E060 LDI R22,0
0417 E070 LDI R23,0
0418 904000B9 LDS R4,mileage+2
041A 905000BA LDS R5,mileage+3
041C 902000B7 LDS R2,mileage
041E 903000B8 LDS R3,mileage+1
0420 937A ST R23,-Y
0421 936A ST R22,-Y
0422 935A ST R21,-Y
0423 934A ST R20,-Y
0424 0181 MOVW R16,R2
0425 0192 MOVW R18,R4
0426 D4E9 RCALL div32u
0427 01FE MOVW R30,R28
0428 8300 STD Z+0,R16
0429 8311 STD Z+1,R17
042A 8322 STD Z+2,R18
042B 8333 STD Z+3,R19
(0489) //累计
(0490) for(i=0;i<=6;i++)
042C 24AA CLR R10
042D C052 RJMP 0x0480
(0491) {
(0492) temp2 = temp1/10;
042E E04A LDI R20,0xA
042F E050 LDI R21,0
0430 E060 LDI R22,0
0431 E070 LDI R23,0
0432 01FE MOVW R30,R28
0433 8020 LDD R2,Z+0
0434 8031 LDD R3,Z+1
0435 8042 LDD R4,Z+2
0436 8053 LDD R5,Z+3
0437 937A ST R23,-Y
0438 936A ST R22,-Y
0439 935A ST R21,-Y
043A 934A ST R20,-Y
043B 0181 MOVW R16,R2
043C 0192 MOVW R18,R4
043D D4D2 RCALL div32u
043E 01FE MOVW R30,R28
043F 8304 STD Z+4,R16
0440 8315 STD Z+5,R17
0441 8326 STD Z+6,R18
0442 8337 STD Z+7,R19
(0493) LCDContent[i] = temp1-temp2*10;
0443 01FE MOVW R30,R28
0444 8024 LDD R2,Z+4
0445 8035 LDD R3,Z+5
0446 8046 LDD R4,Z+6
0447 8057 LDD R5,Z+7
0448 E04A LDI R20,0xA
0449 E050 LDI R21,0
044A E060 LDI R22,0
044B E070 LDI R23,0
044C 925A ST R5,-Y
044D 924A ST R4,-Y
044E 923A ST R3,-Y
044F 922A ST R2,-Y
0450 018A MOVW R16,R20
0451 019B MOVW R18,R22
0452 D53E RCALL empy32s
0453 01FE MOVW R30,R28
0454 8020 LDD R2,Z+0
0455 8031 LDD R3,Z+1
0456 8042 LDD R4,Z+2
0457 8053 LDD R5,Z+3
0458 1A20 SUB R2,R16
0459 0A31 SBC R3,R17
045A 0A42 SBC R4,R18
045B 0A53 SBC R5,R19
045C EE82 LDI R24,0xE2
045D E090 LDI R25,0
045E 2DEA MOV R30,R10
045F 27FF CLR R31
0460 0FE8 ADD R30,R24
0461 1FF9 ADC R31,R25
0462 8220 STD Z+0,R2
(0494) temp1 = temp2;
0463 01FE MOVW R30,R28
0464 8024 LDD R2,Z+4
0465 8035 LDD R3,Z+5
0466 8046 LDD R4,Z+6
0467 8057 LDD R5,Z+7
0468 01FE MOVW R30,R28
0469 8220 STD Z+0,R2
046A 8231 STD Z+1,R3
046B 8242 STD Z+2,R4
046C 8253 STD Z+3,R5
(0495) if(temp1 == 0 && i>=0) //保证1位不消隐
046D E040 LDI R20,0
046E E050 LDI R21,0
046F E060 LDI R22,0
0470 E070 LDI R23,0
0471 01FE MOVW R30,R28
0472 8020 LDD R2,Z+0
0473 8031 LDD R3,Z+1
0474 8042 LDD R4,Z+2
0475 8053 LDD R5,Z+3
0476 1624 CP R2,R20
0477 0635 CPC R3,R21
0478 0646 CPC R4,R22
0479 0657 CPC R5,R23
047A F421 BNE 0x047F
047B 2D8A MOV R24,R10
047C 3080 CPI R24,0
047D F008 BCS 0x047F
(0496) break;
047E C005 RJMP 0x0484
047F 94A3 INC R10
0480 E086 LDI R24,6
0481 158A CP R24,R10
0482 F008 BCS 0x0484
0483 CFAA RJMP 0x042E
(0497) }
(0498) for(i++;i<=6;i++)
0484 94A3 INC R10
0485 C009 RJMP 0x048F
(0499) LCDContent[i] = 10;//Hide
0486 EE82 LDI R24,0xE2
0487 E090 LDI R25,0
0488 2DEA MOV R30,R10
0489 27FF CLR R31
048A 0FE8 ADD R30,R24
048B 1FF9 ADC R31,R25
048C E08A LDI R24,0xA
048D 8380 STD Z+0,R24
048E 94A3 INC R10
048F E086 LDI R24,6
0490 158A CP R24,R10
0491 F7A0 BCC 0x0486
(0500) //小计
(0501) temp1 = MileageCurrent;
0492 904000BD LDS R4,MileageCurrent+2
0494 905000BE LDS R5,MileageCurrent+3
0496 902000BB LDS R2,MileageCurrent
0498 903000BC LDS R3,MileageCurrent+1
049A 01FE MOVW R30,R28
049B 8220 STD Z+0,R2
049C 8231 STD Z+1,R3
049D 8242 STD Z+2,R4
049E 8253 STD Z+3,R5
(0502) for(i=0;i<=3;i++)
049F 24AA CLR R10
04A0 C056 RJMP 0x04F7
(0503) {
(0504) temp2 = temp1/10;
04A1 E04A LDI R20,0xA
04A2 E050 LDI R21,0
04A3 E060 LDI R22,0
04A4 E070 LDI R23,0
04A5 01FE MOVW R30,R28
04A6 8020 LDD R2,Z+0
04A7 8031 LDD R3,Z+1
04A8 8042 LDD R4,Z+2
04A9 8053 LDD R5,Z+3
04AA 937A ST R23,-Y
04AB 936A ST R22,-Y
04AC 935A ST R21,-Y
04AD 934A ST R20,-Y
04AE 0181 MOVW R16,R2
04AF 0192 MOVW R18,R4
04B0 D45F RCALL div32u
04B1 01FE MOVW R30,R28
04B2 8304 STD Z+4,R16
04B3 8315 STD Z+5,R17
04B4 8326 STD Z+6,R18
04B5 8337 STD Z+7,R19
(0505) LCDContent[12-i] = temp1-temp2*10;
04B6 01FE MOVW R30,R28
04B7 8024 LDD R2,Z+4
04B8 8035 LDD R3,Z+5
04B9 8046 LDD R4,Z+6
04BA 8057 LDD R5,Z+7
04BB E04A LDI R20,0xA
04BC E050 LDI R21,0
04BD E060 LDI R22,0
04BE E070 LDI R23,0
04BF 925A ST R5,-Y
04C0 924A ST R4,-Y
04C1 923A ST R3,-Y
04C2 922A ST R2,-Y
04C3 018A MOVW R16,R20
04C4 019B MOVW R18,R22
04C5 D4CB RCALL empy32s
04C6 01FE MOVW R30,R28
04C7 8020 LDD R2,Z+0
04C8 8031 LDD R3,Z+1
04C9 8042 LDD R4,Z+2
04CA 8053 LDD R5,Z+3
04CB 1A20 SUB R2,R16
04CC 0A31 SBC R3,R17
04CD 0A42 SBC R4,R18
04CE 0A53 SBC R5,R19
04CF 2C3A MOV R3,R10
04D0 2444 CLR R4
04D1 E0EC LDI R30,0xC
04D2 E0F0 LDI R31,0
04D3 19E3 SUB R30,R3
04D4 09F4 SBC R31,R4
04D5 EE82 LDI R24,0xE2
04D6 E090 LDI R25,0
04D7 0FE8 ADD R30,R24
04D8 1FF9 ADC R31,R25
04D9 8220 STD Z+0,R2
(0506) temp1 = temp2;
04DA 01FE MOVW R30,R28
04DB 8024 LDD R2,Z+4
04DC 8035 LDD R3,Z+5
04DD 8046 LDD R4,Z+6
04DE 8057 LDD R5,Z+7
04DF 01FE MOVW R30,R28
04E0 8220 STD Z+0,R2
04E1 8231 STD Z+1,R3
04E2 8242 STD Z+2,R4
04E3 8253 STD Z+3,R5
(0507) if(temp1 == 0 && i>=1) //保证2位不消隐
04E4 E040 LDI R20,0
04E5 E050 LDI R21,0
04E6 E060 LDI R22,0
04E7 E070 LDI R23,0
04E8 01FE MOVW R30,R28
04E9 8020 LDD R2,Z+0
04EA 8031 LDD R3,Z+1
04EB 8042 LDD R4,Z+2
04EC 8053 LDD R5,Z+3
04ED 1624 CP R2,R20
04EE 0635 CPC R3,R21
04EF 0646 CPC R4,R22
04F0 0657 CPC R5,R23
04F1 F421 BNE 0x04F6
04F2 2D8A MOV R24,R10
04F3 3081 CPI R24,1
04F4 F008 BCS 0x04F6
(0508) break;
04F5 C005 RJMP 0x04FB
04F6 94A3 INC R10
04F7 E083 LDI R24,3
04F8 158A CP R24,R10
04F9 F008 BCS 0x04FB
04FA CFA6 RJMP 0x04A1
(0509) }
(0510) for(i++;i<=3;i++)
04FB 94A3 INC R10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -