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

📄 251.lst

📁 卡车仪表的单片机程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 + -