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

📄 251.lst

📁 卡车仪表的单片机程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0252 079E      CPC	R25,R30
    0253 F1C0      BCS	0x028C
(0297)  {
(0298)    mileage++;
    0254 E041      LDI	R20,1
    0255 E050      LDI	R21,0
    0256 E060      LDI	R22,0
    0257 E070      LDI	R23,0
    0258 904000B9  LDS	R4,mileage+2
    025A 905000BA  LDS	R5,mileage+3
    025C 902000B7  LDS	R2,mileage
    025E 903000B8  LDS	R3,mileage+1
    0260 0E24      ADD	R2,R20
    0261 1E35      ADC	R3,R21
    0262 1E46      ADC	R4,R22
    0263 1E57      ADC	R5,R23
    0264 923000B8  STS	mileage+1,R3
    0266 922000B7  STS	mileage,R2
    0268 925000BA  STS	mileage+3,R5
    026A 924000B9  STS	mileage+2,R4
(0299)    MileageCurrent++;
    026C E041      LDI	R20,1
    026D E050      LDI	R21,0
    026E E060      LDI	R22,0
    026F E070      LDI	R23,0
    0270 904000BD  LDS	R4,MileageCurrent+2
    0272 905000BE  LDS	R5,MileageCurrent+3
    0274 902000BB  LDS	R2,MileageCurrent
    0276 903000BC  LDS	R3,MileageCurrent+1
    0278 0E24      ADD	R2,R20
    0279 1E35      ADC	R3,R21
    027A 1E46      ADC	R4,R22
    027B 1E57      ADC	R5,R23
    027C 923000BC  STS	MileageCurrent+1,R3
    027E 922000BB  STS	MileageCurrent,R2
    0280 925000BE  STS	MileageCurrent+3,R5
    0282 924000BD  STS	MileageCurrent+2,R4
(0300)    MileageSaved = 0;
    0284 2422      CLR	R2
    0285 922000C1  STS	MileageSaved,R2
(0301)    MileagePulseCnt = 0;
    0287 2433      CLR	R3
    0288 923000C0  STS	MileagePulseCnt+1,R3
    028A 922000BF  STS	MileagePulseCnt,R2
(0302)  }
(0303) 
(0304)  //clear Timer
(0305)  TCNT1H = 0;
    028C 2422      CLR	R2
    028D BC2D      OUT	0x2D,R2
(0306)  TCNT1L = 0;
    028E BC2C      OUT	0x2C,R2
    028F D72D      RCALL	pop_gset2
    0290 9029      LD	R2,Y+
    0291 BE2F      OUT	0x3F,R2
    0292 91E9      LD	R30,Y+
    0293 91B9      LD	R27,Y+
    0294 91A9      LD	R26,Y+
    0295 9199      LD	R25,Y+
    0296 9189      LD	R24,Y+
    0297 9139      LD	R19,Y+
    0298 9129      LD	R18,Y+
    0299 9119      LD	R17,Y+
    029A 9109      LD	R16,Y+
    029B 9059      LD	R5,Y+
    029C 9049      LD	R4,Y+
    029D 9039      LD	R3,Y+
    029E 9029      LD	R2,Y+
    029F 9518      RETI
_int1_isr:
    02A0 922A      ST	R2,-Y
    02A1 923A      ST	R3,-Y
    02A2 938A      ST	R24,-Y
    02A3 939A      ST	R25,-Y
    02A4 B62F      IN	R2,0x3F
    02A5 922A      ST	R2,-Y
(0307) }
(0308) 
(0309) #pragma interrupt_handler int1_isr:3
(0310) void int1_isr(void)
(0311) {
(0312)  //external interupt on INT1
(0313)  NPulseCnt++;
    02A6 9180007A  LDS	R24,NPulseCnt
    02A8 9190007B  LDS	R25,NPulseCnt+1
    02AA 9601      ADIW	R24,1
    02AB 9390007B  STS	NPulseCnt+1,R25
    02AD 9380007A  STS	NPulseCnt,R24
(0314)  if(NPulseCnt>MaxNPulse)
    02AF E788      LDI	R24,0x78
    02B0 E090      LDI	R25,0
    02B1 9020007A  LDS	R2,NPulseCnt
    02B3 9030007B  LDS	R3,NPulseCnt+1
    02B5 1582      CP	R24,R2
    02B6 0593      CPC	R25,R3
    02B7 F420      BCC	0x02BC
(0315)    NPulseCnt = MaxNPulse; //Limit
    02B8 9390007B  STS	NPulseCnt+1,R25
    02BA 9380007A  STS	NPulseCnt,R24
    02BC 9029      LD	R2,Y+
    02BD BE2F      OUT	0x3F,R2
    02BE 9199      LD	R25,Y+
    02BF 9189      LD	R24,Y+
    02C0 9039      LD	R3,Y+
    02C1 9029      LD	R2,Y+
    02C2 9518      RETI
(0316) }
(0317) 
(0318) //call this routine to initialize all peripherals
(0319) void init_devices(void)
(0320) {
(0321)  //stop errant interrupts until set up
(0322)  CLI(); //disable all interrupts
_init_devices:
    02C3 94F8      BCLR	7
(0323)  port_init();
    02C4 DE68      RCALL	_port_init
(0324)  //timer1_init();
(0325)  timer2_init();
    02C5 DE8F      RCALL	_timer2_init
(0326)  spi_init();
    02C6 DEFD      RCALL	_spi_init
(0327)  //adc_init();
(0328) 
(0329)  MCUCR = 0x0F;
    02C7 E08F      LDI	R24,0xF
    02C8 BF85      OUT	0x35,R24
(0330)  GICR  = 0x00;
    02C9 2422      CLR	R2
    02CA BE2B      OUT	0x3B,R2
(0331)  TIMSK = 0x45; //timer interrupt sources
    02CB E485      LDI	R24,0x45
    02CC BF89      OUT	0x39,R24
(0332)  SEI(); //re-enable interrupts
    02CD 9478      BSET	7
    02CE 9508      RET
_main:
    02CF 9721      SBIW	R28,1
(0333)  //all peripherals are now initialized
(0334) }
(0335) 
(0336) void main(void)
(0337) {
(0338)  //Initiate port,timer2,spi& others
(0339)  init_devices();//port&timer2 for motor control
    02D0 DFF2      RCALL	_init_devices
(0340)  ParallelOutputCmd = 0x00;
    02D1 2422      CLR	R2
    02D2 2433      CLR	R3
    02D3 923000F0  STS	ParallelOutputCmd+1,R3
    02D5 922000EF  STS	ParallelOutputCmd,R2
(0341)  ParallelOutput();
    02D7 D12F      RCALL	_ParallelOutput
(0342)  MileageLoding();
    02D8 D265      RCALL	_MileageLoding
(0343)  init_lcd();
    02D9 DE15      RCALL	_init_lcd
(0344)  LCDDecoding();
    02DA D137      RCALL	_LCDDecoding
(0345)  lcd_display(lcdshow,LCDContent,13);
    02DB E08D      LDI	R24,0xD
    02DC 8388      STD	Y+0,R24
    02DD EE22      LDI	R18,0xE2
    02DE E030      LDI	R19,0
    02DF E600      LDI	R16,0x60
    02E0 E010      LDI	R17,0
    02E1 DE1D      RCALL	_lcd_display
    02E2 C005      RJMP	0x02E8
(0346)  //motor turn to zero
(0347)  while(SpeedMotorSetting!=SpeedMotorCurrent)
(0348)  {
(0349)     if(MotorBlocked==0)
    02E3 9020006B  LDS	R2,MotorBlocked
    02E5 2022      TST	R2
    02E6 F409      BNE	0x02E8
(0350) 	  motor();
    02E7 D029      RCALL	_motor
    02E8 902000C2  LDS	R2,SpeedMotorCurrent
    02EA 903000C3  LDS	R3,SpeedMotorCurrent+1
    02EC 904000C4  LDS	R4,SpeedMotorSetting
    02EE 905000C5  LDS	R5,SpeedMotorSetting+1
    02F0 1442      CP	R4,R2
    02F1 0453      CPC	R5,R3
    02F2 F781      BNE	0x02E3
(0351)  }
(0352) 										
(0353)  //Initiate timer1,adc,OPEN int0,1
(0354)  timer0_init();
    02F3 DE46      RCALL	_timer0_init
(0355)  timer1_init();
    02F4 DE4C      RCALL	_timer1_init
(0356)  adc_init();
    02F5 DEDE      RCALL	_adc_init
(0357)  GICR  = 0xC0;
    02F6 EC80      LDI	R24,0xC0
    02F7 BF8B      OUT	0x3B,R24
(0358)  watchdog_init();
    02F8 DE66      RCALL	_watchdog_init
    02F9 C014      RJMP	0x030E
(0359)  //Initialization Finished!!! Insert your functional code here...
(0360)  while(1)
(0361)  {
(0362)     if(MotorBlocked==0)//unblocked by timer2
    02FA 9020006B  LDS	R2,MotorBlocked
    02FC 2022      TST	R2
    02FD F409      BNE	0x02FF
(0363) 	  motor();
    02FE D012      RCALL	_motor
(0364) 	if(ParallelBlocked==0)//unblocked by timer0
    02FF 9020006D  LDS	R2,ParallelBlocked
    0301 2022      TST	R2
    0302 F409      BNE	0x0304
(0365) 	  Parallel();
    0303 D0FD      RCALL	_Parallel
(0366) 	if(CalculateBlocked==0)//unblocked by timer0
    0304 9020006C  LDS	R2,CalculateBlocked
    0306 2022      TST	R2
    0307 F409      BNE	0x0309
(0367) 	  Calculate();
    0308 D3FE      RCALL	_Calculate
(0368) 	if(MileageSaveBlocked==0)//unblocked by timer1_overflow
    0309 9020006F  LDS	R2,MileageSaveBlocked
    030B 2022      TST	R2
    030C F409      BNE	0x030E
(0369) 	  MileageSaving();
    030D D202      RCALL	_MileageSaving
    030E CFEB      RJMP	0x02FA
    030F 9621      ADIW	R28,1
    0310 9508      RET
_motor:
  anticlockwise        --> R20
  clockwise            --> R22
  AnticlockwiseCmd     --> R10
  ClockwiseCmd         --> R12
  i                    --> R14
    0311 D6B3      RCALL	push_gset5
(0370)  }
(0371) }
(0372) 
(0373) //===============================================
(0374) //=============MOTOR SUBROUTINE=================
(0375) //================================================
(0376) void motor(void)
(0377) {
(0378)  	 uchar i;
(0379)  	 uchar clockwise = 0x00;//test
    0312 2766      CLR	R22
(0380) 	 uchar anticlockwise = 0x00;
    0313 2744      CLR	R20
(0381) 	 uchar ClockwiseCmd=0x00;//Original, reversed motor not inverted
    0314 24CC      CLR	R12
(0382) 	 uchar AnticlockwiseCmd=0x00;//Original, reversed motor not inverted
    0315 24AA      CLR	R10
(0383) 
(0384)  //TEST
(0385)  PORTB ^= BIT(2);	 
    0316 E084      LDI	R24,4
    0317 B228      IN	R2,0x18
    0318 2628      EOR	R2,R24
    0319 BA28      OUT	0x18,R2
(0386) 	 //LIMITING
(0387) 	 if(SpeedMotorSetting>MaxAngle)
    031A E480      LDI	R24,0x40
    031B E09B      LDI	R25,0xB
    031C 902000C4  LDS	R2,SpeedMotorSetting
    031E 903000C5  LDS	R3,SpeedMotorSetting+1
    0320 1582      CP	R24,R2
    0321 0593      CPC	R25,R3
    0322 F424      BGE	0x0327
(0388) 	    SpeedMotorSetting = MaxAngle;
    0323 939000C5  STS	SpeedMotorSetting+1,R25
    0325 938000C4  STS	SpeedMotorSetting,R24
(0389) 	 if(NMotorSetting>MaxAngle)
    0327 E480      LDI	R24,0x40
    0328 E09B      LDI	R25,0xB
    0329 902000C8  LDS	R2,NMotorSetting
    032B 903000C9  LDS	R3,NMotorSetting+1
    032D 1582      CP	R24,R2
    032E 0593      CPC	R25,R3
    032F F424      BGE	0x0334
(0390) 	    NMotorSetting = MaxAngle;		
    0330 939000C9  STS	NMotorSetting+1,R25
    0332 938000C8  STS	NMotorSetting,R24
(0391) 	 
(0392)  	 //CALCULATE THE DIRECTION OF ALL MOTOR
(0393) 	 if(SpeedMotorCurrent<SpeedMotorSetting)
    0334 902000C4  LDS	R2,SpeedMotorSetting
    0336 903000C5  LDS	R3,SpeedMotorSetting+1
    0338 904000C2  LDS	R4,SpeedMotorCurrent
    033A 905000C3  LDS	R5,SpeedMotorCurrent+1
    033C 1442      CP	R4,R2
    033D 0453      CPC	R5,R3
    033E F454      BGE	0x0349
(0394) 	 {	 	 
(0395) 	   SpeedMotorCurrent++;
    033F 01C2      MOVW	R24,R4
    0340 9601      ADIW	R24,1
    0341 939000C3  STS	SpeedMotorCurrent+1,R25
    0343 938000C2  STS	SpeedMotorCurrent,R24
(0396) 	   ClockwiseCmd |=BIT(0);
    0345 2D8C      MOV	R24,R12
    0346 6081      ORI	R24,1
    0347 2EC8      MOV	R12,R24
(0397) 	 }
    0348 C014      RJMP	0x035D
(0398) 	 else if (SpeedMotorCurrent>SpeedMotorSetting)
    0349 902000C4  LDS	R2,SpeedMotorSetting
    034B 903000C5  LDS	R3,SpeedMotorSetting+1
    034D 904000C2  LDS	R4,SpeedMotorCurrent
    034F 905000C3  LDS	R5,SpeedMotorCurrent+1
    0351 1424      CP	R2,R4
    0352 0435      CPC	R3,R5
    0353 F44C      BGE	0x035D
(0399) 	 {
(0400) 	   SpeedMotorCurrent--;
    0354 01C2      MOVW	R24,R4
    0355 9701      SBIW	R24,1
    0356 939000C3  STS	SpeedMotorCurrent+1,R25
    0358 938000C2  STS	SpeedMotorCurrent,R24
(0401) 	   AnticlockwiseCmd |=BIT(0);
    035A 2D8A      MOV	R24,R10
    035B 6081      ORI	R24,1
    035C 2EA8      MOV	R10,R24
(0402) 	 }
(0403) 	 if(NMotorCurrent<NMotorSetting)
    035D 902000C8  LDS	R2,NMotorSetting
    035F 903000C9  LDS	R3,NMotorSetting+1
    0361 904000C6  LDS	R4,NMotorCurrent
    0363 905000C7  LDS	R5,NMotorCurrent+1
    0365 1442      CP	R4,R2
    0366 0453      CPC	R5,R3
    0367 F454      BGE	0x0372
(0404) 	 {
(0405) 	   NMotorCurrent++;
    0368 01C2      MOVW	R24,R4
    0369 9601      ADIW	R24,1
    036A 939000C7  STS	NMotorCurrent+1,R25
    036C 938000C6  STS	NMotorCurrent,R24
(0406) 	   ClockwiseCmd |=BIT(1); //SPEED invert
    036E 2D8C      MOV	R24,R12
    036F 6082      ORI	R24,2
    0370 2EC8      MOV	R12,R24
(0407) 	 }
    0371 C014      RJMP	0x0386
(0408) 	 else if (NMotorCurrent>NMotorSetting)
    0372 902000C8  LDS	R2,NMotorSetting
    0374 903000C9  LDS	R3,NMotorSetting+1
    0376 904000C6  LDS	R4,NMotorCurrent
    0378 905000C7  LDS	R5,NMotorCurrent+1
    037A 1424      CP	R2,R4
    037B 0435      CPC	R3,R5
    037C F44C      BGE	0x0386
(0409) 	 {
(0410) 	   NMotorCurrent--;
    037D 01C2      MOVW	R24,R4
    037E 9701      SBIW	R24,1
    037F 939000C7  STS	NMotorCurrent+1,R25
    0381 938000C6  STS	NMotorCurrent,R24
(0411) 	   AnticlockwiseCmd |= BIT(1); //SPEED invert
    0383 2D8A      MOV	R24,R10
    0384 6082      ORI	R24,2
    0385 2EA8      MOV	R10,R24
(0412) 	 }
(0413) 	 for(i=0;i<=5;i++)
    0386 24EE      CLR	R14
    0387 C04C      RJMP	0x03D4
(0414) 	 {
(0415) 	   if(VoltageMotorCurrent[i]<VoltageMotorSetting[i])
    0388 E082      LDI	R24,2
    0389 9D8E      MUL	R24,R14
    038A EC8A      LDI	R24,0xCA
    038B E090      LDI	R25,0
    038C 01F0      MOVW	R30,R0
    038D 0FE8      ADD	R30,R24
    038E 1FF9      ADC	R31,R25
    038F 8020      LDD	R2,Z+0
    0390 8031      LDD	R3,Z+1
    0391 ED86      LDI	R24,0xD6
    0392 E090      LDI	R25,0
    0393 01F0      MOVW	R30,R0
    0394 0FE8      ADD	R30,R24
    0395 1FF9      ADC	R31,R25
    0396 8040      LDD	R4,Z+0
    0397 8051      LDD	R5,Z+1
    0398 1442      CP	R4,R2
    0399 0453      CPC	R5,R3
    039A F498      BCC	0x03AE
(0416) 	   {
(0417) 	     VoltageMotorCurrent[i]++;
    039B E082      LDI	R24,2
    039C 9D8E      MUL	R24,R14
    039D 0110      MOVW	R2,R0
    039E ED86      LDI	R24,0xD6
    039F E090      LDI	R25,0
    03A0 0E28      ADD	R2,R24
    03A1 1E39      ADC	R3,R25
    03A2 01F1      MOVW	R30,R2
    03A3 8180      LDD	R24,Z+0
    03A4 8191      LDD	R25,Z+1
    03A5 9601      ADIW	R24,1
    03A6 8391      STD	Z+1,R25
    03A7 8380      STD	Z+0,R24
(0418) 		 ClockwiseCmd |=BIT((i+VoltageMotorBias));
    03A8 2D1E      MOV	R17,R14
    03A9 5F1E      SUBI	R17,0xFE
    03AA E001      LDI	R16,1
    03AB D692      RCALL	lsl8
    03AC 2AC0      OR	R12,R16
(0419) 	   }
    03AD C025      RJMP	0x03D3
(0420) 	   else if(VoltageMotorCurrent[i]>VoltageMotorSetting[i])
    03AE E082      LDI	R24,2
    03AF 9D8E      MUL	R24,R14
    03B0 EC8A      LDI	R24,0xCA
    03B1 E090      LDI	R25,0

⌨️ 快捷键说明

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