charger.lst

来自「a good program for battery charge,only f」· LST 代码 · 共 1,857 行 · 第 1/5 页

LST
1,857
字号
    02C1 DF2A      RCALL	_SendByte
(0301) 	   if((temp&(1<<ack))==0)return(0);  
    02C2 90200116  LDS	R2,temp
    02C4 FC20      SBRC	R2,0
    02C5 C003      RJMP	0x02C9
    02C6 2700      CLR	R16
    02C7 2711      CLR	R17
    02C8 C006      RJMP	0x02CF
    02C9 9543      INC	R20
    02CA 3044      CPI	R20,4
    02CB F378      BCS	0x02BB
(0302)      } 
(0303)   Stop_I2c();               
    02CC DF11      RCALL	_Stop_I2c
(0304)   return(1);   
    02CD E001      LDI	R16,1
    02CE E010      LDI	R17,0
    02CF 9624      ADIW	R28,4
    02D0 D4EE      RCALL	pop_gset1
    02D1 9508      RET
_TC1321_SET_1:
  tem                  --> Y+0
  i                    --> R20
  DA_SET               --> R20
    02D2 D4E9      RCALL	push_gset1
    02D3 01A8      MOVW	R20,R16
    02D4 9724      SBIW	R28,4
(0305) }
(0306) /********************************************************************/
(0307) TC1321_SET_1(unsigned int DA_SET)
(0308) {
(0309)    unsigned char i;
(0310)    unsigned char tem[4];
(0311)    tem[0]=0x90;	 		
    02D5 E980      LDI	R24,0x90
    02D6 8388      STD	Y+0,R24
(0312)    tem[1]=0x00;			 
    02D7 2422      CLR	R2
    02D8 8229      STD	Y+1,R2
(0313)    tem[2]=DA_SET/4;		
    02D9 011A      MOVW	R2,R20
    02DA 9436      LSR	R3
    02DB 9427      ROR	R2
    02DC 9436      LSR	R3
    02DD 9427      ROR	R2
    02DE 822A      STD	Y+2,R2
(0314)    tem[3]=DA_SET%4;		
    02DF 01CA      MOVW	R24,R20
    02E0 7083      ANDI	R24,3
    02E1 7090      ANDI	R25,0
    02E2 838B      STD	Y+3,R24
(0315)    tem[3]=tem[3]<<6;	
    02E3 2E28      MOV	R2,R24
    02E4 0C22      LSL	R2
    02E5 0C22      LSL	R2
    02E6 0C22      LSL	R2
    02E7 0C22      LSL	R2
    02E8 0C22      LSL	R2
    02E9 0C22      LSL	R2
    02EA 822B      STD	Y+3,R2
(0316) 
(0317)    Start_I2c();             
    02EB DEE0      RCALL	_Start_I2c
(0318)      for(i=0;i<4;i++)
    02EC 2744      CLR	R20
    02ED C00F      RJMP	0x02FD
(0319)     {   
(0320)      SendByte(tem[i]);            
    02EE 01CE      MOVW	R24,R28
    02EF 2FE4      MOV	R30,R20
    02F0 27FF      CLR	R31
    02F1 0FE8      ADD	R30,R24
    02F2 1FF9      ADC	R31,R25
    02F3 8100      LDD	R16,Z+0
    02F4 DEF7      RCALL	_SendByte
(0321) 	   if((temp&(1<<ack))==0)return(0);  
    02F5 90200116  LDS	R2,temp
    02F7 FC20      SBRC	R2,0
    02F8 C003      RJMP	0x02FC
    02F9 2700      CLR	R16
    02FA 2711      CLR	R17
    02FB C006      RJMP	0x0302
    02FC 9543      INC	R20
    02FD 3044      CPI	R20,4
    02FE F378      BCS	0x02EE
(0322)      } 
(0323)   Stop_I2c();               
    02FF DEDE      RCALL	_Stop_I2c
(0324)   return(1);   
    0300 E001      LDI	R16,1
    0301 E010      LDI	R17,0
    0302 9624      ADIW	R28,4
    0303 D4BB      RCALL	pop_gset1
    0304 9508      RET
(0325) }
(0326) /********************************************************************/
(0327) void Delay(unsigned int ddd)   				//Delay50Ms() i=0xF8F;
(0328) {
(0329)  //ddd=100;
(0330)  while(--ddd){;}
_Delay:
  ddd                  --> R16
    0305 01C8      MOVW	R24,R16
    0306 9701      SBIW	R24,1
    0307 018C      MOVW	R16,R24
    0308 3000      CPI	R16,0
    0309 0701      CPC	R16,R17
    030A F7D1      BNE	0x0305
    030B 9508      RET
(0331) }
(0332) /********************************************************************/
(0333) void temp_det(void)
(0334) {
(0335) 	adc_mux=0X02;
_temp_det:
    030C E082      LDI	R24,2
    030D 9380010A  STS	adc_mux,R24
(0336) 	Delay(0xff);   			  				//A/D采样延时
    030F EF0F      LDI	R16,0xFF
    0310 E010      LDI	R17,0
    0311 DFF3      RCALL	_Delay
(0337) 	ad_reulst();
    0312 D117      RCALL	_ad_reulst
(0338) 	if(adc_old <=139 )	  	  			   	//当前温度为80-90
    0313 E88B      LDI	R24,0x8B
    0314 E090      LDI	R25,0
    0315 9020011D  LDS	R2,adc_old
    0317 9030011E  LDS	R3,adc_old+1
    0319 1582      CP	R24,R2
    031A 0593      CPC	R25,R3
    031B F058      BCS	0x0327
(0339) 		{temp_step=80;
    031C E580      LDI	R24,0x50
    031D 93800118  STS	temp_step,R24
(0340) 		temp_start=139;
    031F E88B      LDI	R24,0x8B
    0320 9390011A  STS	temp_start+1,R25
    0322 93800119  STS	temp_start,R24
(0341) 		temp_dange=3;
    0324 E083      LDI	R24,3
    0325 93800117  STS	temp_dange,R24
(0342) 		}
(0343) 	if(adc_old > 139 && adc_old <=178 )	  	//当前温度为70-80
    0327 E88B      LDI	R24,0x8B
    0328 E090      LDI	R25,0
    0329 9020011D  LDS	R2,adc_old
    032B 9030011E  LDS	R3,adc_old+1
    032D 1582      CP	R24,R2
    032E 0593      CPC	R25,R3
    032F F478      BCC	0x033F
    0330 EB82      LDI	R24,0xB2
    0331 1582      CP	R24,R2
    0332 0593      CPC	R25,R3
    0333 F058      BCS	0x033F
(0344) 		{temp_step=70;
    0334 E486      LDI	R24,0x46
    0335 93800118  STS	temp_step,R24
(0345) 		temp_start=178;
    0337 EB82      LDI	R24,0xB2
    0338 9390011A  STS	temp_start+1,R25
    033A 93800119  STS	temp_start,R24
(0346) 		temp_dange=4;
    033C E084      LDI	R24,4
    033D 93800117  STS	temp_dange,R24
(0347) 		}				
(0348) 	if(adc_old > 178 && adc_old <=230 )	  	//当前温度为60-70
    033F EB82      LDI	R24,0xB2
    0340 E090      LDI	R25,0
    0341 9020011D  LDS	R2,adc_old
    0343 9030011E  LDS	R3,adc_old+1
    0345 1582      CP	R24,R2
    0346 0593      CPC	R25,R3
    0347 F478      BCC	0x0357
    0348 EE86      LDI	R24,0xE6
    0349 1582      CP	R24,R2
    034A 0593      CPC	R25,R3
    034B F058      BCS	0x0357
(0349) 		{temp_step=60;
    034C E38C      LDI	R24,0x3C
    034D 93800118  STS	temp_step,R24
(0350) 		temp_start=230;
    034F EE86      LDI	R24,0xE6
    0350 9390011A  STS	temp_start+1,R25
    0352 93800119  STS	temp_start,R24
(0351) 		temp_dange=5;
    0354 E085      LDI	R24,5
    0355 93800117  STS	temp_dange,R24
(0352) 		}
(0353) 	if(adc_old > 230 && adc_old <=293 )	  	//当前温度为50-60
    0357 EE86      LDI	R24,0xE6
    0358 E090      LDI	R25,0
    0359 9020011D  LDS	R2,adc_old
    035B 9030011E  LDS	R3,adc_old+1
    035D 1582      CP	R24,R2
    035E 0593      CPC	R25,R3
    035F F480      BCC	0x0370
    0360 E285      LDI	R24,0x25
    0361 E091      LDI	R25,1
    0362 1582      CP	R24,R2
    0363 0593      CPC	R25,R3
    0364 F058      BCS	0x0370
(0354) 		{temp_step=50;
    0365 E382      LDI	R24,0x32
    0366 93800118  STS	temp_step,R24
(0355) 		temp_start=293;
    0368 E285      LDI	R24,0x25
    0369 9390011A  STS	temp_start+1,R25
    036B 93800119  STS	temp_start,R24
(0356) 		temp_dange=6;	
    036D E086      LDI	R24,6
    036E 93800117  STS	temp_dange,R24
(0357) 		}		
(0358) 	if(adc_old > 293 && adc_old <=371 )	  	//当前温度为40-50
    0370 E285      LDI	R24,0x25
    0371 E091      LDI	R25,1
    0372 9020011D  LDS	R2,adc_old
    0374 9030011E  LDS	R3,adc_old+1
    0376 1582      CP	R24,R2
    0377 0593      CPC	R25,R3
    0378 F478      BCC	0x0388
    0379 E783      LDI	R24,0x73
    037A 1582      CP	R24,R2
    037B 0593      CPC	R25,R3
    037C F058      BCS	0x0388
(0359) 		{temp_step=40;
    037D E288      LDI	R24,0x28
    037E 93800118  STS	temp_step,R24
(0360) 		temp_start=371;
    0380 E783      LDI	R24,0x73
    0381 9390011A  STS	temp_start+1,R25
    0383 93800119  STS	temp_start,R24
(0361) 		temp_dange=8;	
    0385 E088      LDI	R24,0x8
    0386 93800117  STS	temp_dange,R24
(0362) 		}					
(0363) 	if(adc_old > 371 && adc_old <=462 )	  	//当前温度为30-40
    0388 E783      LDI	R24,0x73
    0389 E091      LDI	R25,1
    038A 9020011D  LDS	R2,adc_old
    038C 9030011E  LDS	R3,adc_old+1
    038E 1582      CP	R24,R2
    038F 0593      CPC	R25,R3
    0390 F478      BCC	0x03A0
    0391 EC8E      LDI	R24,0xCE
    0392 1582      CP	R24,R2
    0393 0593      CPC	R25,R3
    0394 F058      BCS	0x03A0
(0364) 		{temp_step=30;
    0395 E18E      LDI	R24,0x1E
    0396 93800118  STS	temp_step,R24
(0365) 		temp_start=462;
    0398 EC8E      LDI	R24,0xCE
    0399 9390011A  STS	temp_start+1,R25
    039B 93800119  STS	temp_start,R24
(0366) 		temp_dange=9;
    039D E089      LDI	R24,0x9
    039E 93800117  STS	temp_dange,R24
(0367) 		}				
(0368) 	if(adc_old > 462 && adc_old <=562 )	  	//当前温度为20-30
    03A0 EC8E      LDI	R24,0xCE
    03A1 E091      LDI	R25,1
    03A2 9020011D  LDS	R2,adc_old
    03A4 9030011E  LDS	R3,adc_old+1
    03A6 1582      CP	R24,R2
    03A7 0593      CPC	R25,R3
    03A8 F480      BCC	0x03B9
    03A9 E382      LDI	R24,0x32
    03AA E092      LDI	R25,2
    03AB 1582      CP	R24,R2
    03AC 0593      CPC	R25,R3
    03AD F058      BCS	0x03B9
(0369) 		{temp_step=20;
    03AE E184      LDI	R24,0x14
    03AF 93800118  STS	temp_step,R24
(0370) 		temp_start=562;
    03B1 E382      LDI	R24,0x32
    03B2 9390011A  STS	temp_start+1,R25
    03B4 93800119  STS	temp_start,R24
(0371) 		temp_dange=10;	
    03B6 E08A      LDI	R24,0xA
    03B7 93800117  STS	temp_dange,R24
(0372) 		}			
(0373) 	if(adc_old > 562 && adc_old <=663 )	  	//当前温度为10-20
    03B9 E382      LDI	R24,0x32
    03BA E092      LDI	R25,2
    03BB 9020011D  LDS	R2,adc_old
    03BD 9030011E  LDS	R3,adc_old+1
    03BF 1582      CP	R24,R2
    03C0 0593      CPC	R25,R3
    03C1 F478      BCC	0x03D1
    03C2 E987      LDI	R24,0x97
    03C3 1582      CP	R24,R2
    03C4 0593      CPC	R25,R3
    03C5 F058      BCS	0x03D1
(0374) 		{temp_step=10;
    03C6 E08A      LDI	R24,0xA
    03C7 93800118  STS	temp_step,R24
(0375) 		temp_start=663;
    03C9 E987      LDI	R24,0x97
    03CA 9390011A  STS	temp_start+1,R25
    03CC 93800119  STS	temp_start,R24
(0376) 		temp_dange=10;	
    03CE E08A      LDI	R24,0xA
    03CF 93800117  STS	temp_dange,R24
(0377) 		}			
(0378) 	if(adc_old > 663 && adc_old <=758 )	  	//当前温度为0-10
    03D1 E987      LDI	R24,0x97
    03D2 E092      LDI	R25,2
    03D3 9020011D  LDS	R2,adc_old
    03D5 9030011E  LDS	R3,adc_old+1
    03D7 1582      CP	R24,R2
    03D8 0593      CPC	R25,R3
    03D9 F470      BCC	0x03E8
    03DA EF86      LDI	R24,0xF6
    03DB 1582      CP	R24,R2
    03DC 0593      CPC	R25,R3
    03DD F050      BCS	0x03E8
(0379) 		{temp_step=0;
    03DE 2422      CLR	R2
    03DF 92200118  STS	temp_step,R2
(0380) 		temp_start=758;
    03E1 9390011A  STS	temp_start+1,R25
    03E3 93800119  STS	temp_start,R24
(0381) 		temp_dange=9;
    03E5 E089      LDI	R24,0x9
    03E6 93800117  STS	temp_dange,R24
(0382) 		}					
(0383) 	if(adc_old > 758 && adc_old <=839 )	  	//当前温度为-10~0
    03E8 EF86      LDI	R24,0xF6
    03E9 E092      LDI	R25,2
    03EA 9020011D  LDS	R2,adc_old
    03EC 9030011E  LDS	R3,adc_old+1
    03EE 1582      CP	R24,R2
    03EF 0593      CPC	R25,R3
    03F0 F480      BCC	0x0401
    03F1 E487      LDI	R24,0x47
    03F2 E093      LDI	R25,3
    03F3 1582      CP	R24,R2
    03F4 0593      CPC	R25,R3
    03F5 F058      BCS	0x0401
(0384) 		{temp_step=-10;
    03F6 EF86      LDI	R24,0xF6
    03F7 93800118  STS	temp_step,R24
(0385) 		temp_start=839;
    03F9 E487      LDI	R24,0x47
    03FA 9390011A  STS	temp_start+1,R25
    03FC 93800119  STS	temp_start,R24
(0386) 		temp_dange=8;
    03FE E088      LDI	R24,0x8
    03FF 93800117  STS	temp_dange,R24
(0387) 		}			
(0388) 		now_temp=(temp_step+(temp_start-adc_old)/temp_dange);
    0401 9020011D  LDS	R2,adc_old
    0403 9030011E  LDS	R3,adc_old+1
    0405 91000119  LDS	R16,temp_start
    0407 9110011A  LDS	R17,temp_start+1
    0409 1902      SUB	R16,R2
    040A 0913      SBC	R17,R3
    040B 91200117  LDS	R18,temp_dange
    040D 2733      CLR	R19
    040E D379      RCALL	div16u
    040F 90200118  LDS	R2,temp_step
    0411 2433      CLR	R3
    0412 FC27      SBRC	R2,7
    0413 9430      COM	R3
    0414 0E20      ADD	R2,R16
    0415 1E31      ADC	R3,R17
    0416 92300108  STS	now_temp+1,R3
    0418 92200107  STS	now_temp,R2
(0389) 	if(adc_old > 839 )	  									 
    041A E487      LDI	R24,0x47
    041B E093      LDI	R25,3

⌨️ 快捷键说明

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