charger.lst

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

LST
1,857
字号
    041C 9020011D  LDS	R2,adc_old
    041E 9030011E  LDS	R3,adc_old+1
    0420 1582      CP	R24,R2
    0421 0593      CPC	R25,R3
    0422 F430      BCC	0x0429
(0390) 		{
(0391) 		now_temp=-11;
    0423 EF85      LDI	R24,0xF5
    0424 EF9F      LDI	R25,0xFF
    0425 93900108  STS	now_temp+1,R25
    0427 93800107  STS	now_temp,R24
(0392) 		}				
    0429 9508      RET
(0393) }
(0394) /**********************A/D循环采样60次取平均值********************/
(0395) void ad_reulst(void)												  
(0396) 	{	
(0397) 		abc=61;
_ad_reulst:
    042A E38D      LDI	R24,0x3D
    042B E090      LDI	R25,0
    042C 93900104  STS	abc+1,R25
    042E 93800103  STS	abc,R24
(0398) 		adc_old=0;
    0430 2422      CLR	R2
    0431 2433      CLR	R3
    0432 9230011E  STS	adc_old+1,R3
    0434 9220011D  STS	adc_old,R2
    0436 C011      RJMP	0x0448
(0399) 	 	while(--abc)
(0400) 	 		 {Delay(0xff);
    0437 EF0F      LDI	R16,0xFF
    0438 E010      LDI	R17,0
    0439 DECB      RCALL	_Delay
(0401) 			  adc_old=(adc_old+adc_rel);
    043A 90200113  LDS	R2,adc_rel
    043C 90300114  LDS	R3,adc_rel+1
    043E 9040011D  LDS	R4,adc_old
    0440 9050011E  LDS	R5,adc_old+1
    0442 0C42      ADD	R4,R2
    0443 1C53      ADC	R5,R3
    0444 9250011E  STS	adc_old+1,R5
    0446 9240011D  STS	adc_old,R4
    0448 91800103  LDS	R24,abc
    044A 91900104  LDS	R25,abc+1
    044C 9701      SBIW	R24,1
    044D 93900104  STS	abc+1,R25
    044F 93800103  STS	abc,R24
    0451 3080      CPI	R24,0
    0452 0789      CPC	R24,R25
    0453 F719      BNE	0x0437
(0402) 	 		 }
(0403) 		adc_old=adc_old/60;	 
    0454 E32C      LDI	R18,0x3C
    0455 E030      LDI	R19,0
    0456 9100011D  LDS	R16,adc_old
    0458 9110011E  LDS	R17,adc_old+1
    045A D32D      RCALL	div16u
    045B 9310011E  STS	adc_old+1,R17
    045D 9300011D  STS	adc_old,R16
    045F 9508      RET
(0404) 	} 
(0405) /********************************************************************/
(0406) void alarm(void)
(0407) {
(0408)  	 	adc_mux=0X01;
_alarm:
    0460 E081      LDI	R24,1
    0461 9380010A  STS	adc_mux,R24
(0409) 		Delay(0xff);   						//A/D采样延时
    0463 EF0F      LDI	R16,0xFF
    0464 E010      LDI	R17,0
    0465 DE9F      RCALL	_Delay
(0410) 		ad_reulst();	
    0466 DFC3      RCALL	_ad_reulst
    0467 C01C      RJMP	0x0484
(0411) 	while(adc_old > 440)				//检测当前电压是不是大于16.5V
(0412) 		{
(0413) 		 temp |= (1<<LED_yes);
    0468 91800116  LDS	R24,temp
    046A 6088      ORI	R24,0x8
    046B 93800116  STS	temp,R24
(0414) 		 PORTD &= ~(1<<Green);			//绿色指示灯灭
    046D 985B      CBI	0x0B,3
(0415) 		 PORTB &= ~(1<<P0);				//关断P0   0.16A恒流充电
    046E 9829      CBI	0x05,1
(0416) 		 PORTD |= (1<<P1); 				//打开P1   0.16A恒流充电
    046F 9A5D      SBI	0x0B,5
(0417) 		 PORTB &= ~(1<<P2);				//关断P2   0.16A恒流充电
    0470 982F      CBI	0x05,7
(0418) 		 PORTB &= ~(1<<P3);				//关断P3   0.16A恒流充电			
    0471 982E      CBI	0x05,6
(0419) 		 TC1321_SET_1(999);	 			// D/A送电压10V
    0472 EE07      LDI	R16,0xE7
    0473 E013      LDI	R17,3
    0474 DE5D      RCALL	_TC1321_SET_1
(0420) 		
(0421) 		 adc_mux=0X01;
    0475 E081      LDI	R24,1
    0476 9380010A  STS	adc_mux,R24
(0422) 		 Delay(0xff);   				//A/D采样延时
    0478 EF0F      LDI	R16,0xFF
    0479 E010      LDI	R17,0
    047A DE8A      RCALL	_Delay
(0423) 		 ad_reulst();
    047B DFAE      RCALL	_ad_reulst
(0424) 		 adc_old=adc_rel;	
    047C 90200113  LDS	R2,adc_rel
    047E 90300114  LDS	R3,adc_rel+1
    0480 9230011E  STS	adc_old+1,R3
    0482 9220011D  STS	adc_old,R2
    0484 EB88      LDI	R24,0xB8
    0485 E091      LDI	R25,1
    0486 9020011D  LDS	R2,adc_old
    0488 9030011E  LDS	R3,adc_old+1
    048A 1582      CP	R24,R2
    048B 0593      CPC	R25,R3
    048C F2D8      BCS	0x0468
(0425) 		}		  
(0426) 		temp &= ~(1<<LED_yes);
    048D 91800116  LDS	R24,temp
    048F 7F87      ANDI	R24,0xF7
    0490 93800116  STS	temp,R24
(0427) 
(0428) 		
(0429) 		adc_mux=0X02;
    0492 E082      LDI	R24,2
    0493 9380010A  STS	adc_mux,R24
(0430) 		Delay(0x4ff);   			  		//A/D采样延时
    0495 EF0F      LDI	R16,0xFF
    0496 E014      LDI	R17,4
    0497 DE6D      RCALL	_Delay
(0431) 		ad_reulst();
    0498 DF91      RCALL	_ad_reulst
    0499 C018      RJMP	0x04B2
(0432) 	while(adc_old < 0x7A)	  	  		//检测温度有没有大于85摄氏度  0.42V
(0433) 		{
(0434) 		 PORTD &= ~(1<<Green);			//绿色指示灯灭
    049A 985B      CBI	0x0B,3
(0435) 		 PORTD |= (1<<Red);
    049B 9A5A      SBI	0x0B,2
(0436) 		 
(0437) 		 PORTB &= ~(1<<P0);				//关断P0   0.16A恒流充电
    049C 9829      CBI	0x05,1
(0438) 		 PORTD |= (1<<P1); 				//打开P1   0.16A恒流充电
    049D 9A5D      SBI	0x0B,5
(0439) 		 PORTB &= ~(1<<P2);				//关断P2   0.16A恒流充电
    049E 982F      CBI	0x05,7
(0440) 		 PORTB &= ~(1<<P3);				//关断P3   0.16A恒流充电			
    049F 982E      CBI	0x05,6
(0441) 		 TC1321_SET_1(999);	 	  		// D/A送电压10.0V 
    04A0 EE07      LDI	R16,0xE7
    04A1 E013      LDI	R17,3
    04A2 DE2F      RCALL	_TC1321_SET_1
(0442) 		 adc_mux=0X02;
    04A3 E082      LDI	R24,2
    04A4 9380010A  STS	adc_mux,R24
(0443) 		 Delay(0x4ff);   			  	//A/D采样延时
    04A6 EF0F      LDI	R16,0xFF
    04A7 E014      LDI	R17,4
    04A8 DE5C      RCALL	_Delay
(0444) 		 ad_reulst();
    04A9 DF80      RCALL	_ad_reulst
(0445) 		 adc_old=adc_rel;
    04AA 90200113  LDS	R2,adc_rel
    04AC 90300114  LDS	R3,adc_rel+1
    04AE 9230011E  STS	adc_old+1,R3
    04B0 9220011D  STS	adc_old,R2
    04B2 9180011D  LDS	R24,adc_old
    04B4 9190011E  LDS	R25,adc_old+1
    04B6 378A      CPI	R24,0x7A
    04B7 E0E0      LDI	R30,0
    04B8 079E      CPC	R25,R30
    04B9 F300      BCS	0x049A
(0446) 		}	
(0447) 
(0448) 		
(0449) 	if((temp&(1<<anther))==0x20)					 //0电流检测使能位
    04BA 91800116  LDS	R24,temp
    04BC 7280      ANDI	R24,0x20
    04BD 3280      CPI	R24,0x20
    04BE F009      BEQ	0x04C0
    04BF C06F      RJMP	0x052F
(0450) 	{
(0451)  	 adc_mux=0X07;
    04C0 E087      LDI	R24,7
    04C1 9380010A  STS	adc_mux,R24
(0452) 	 Delay(0xff);   				  				 //A/D采样延时
    04C3 EF0F      LDI	R16,0xFF
    04C4 E010      LDI	R17,0
    04C5 DE3F      RCALL	_Delay
(0453) 	 ad_reulst();
    04C6 DF63      RCALL	_ad_reulst
(0454) 	if(adc_old < 27){Second_count_3=00;}             //27
    04C7 9180011D  LDS	R24,adc_old
    04C9 9190011E  LDS	R25,adc_old+1
    04CB 318B      CPI	R24,0x1B
    04CC E0E0      LDI	R30,0
    04CD 079E      CPC	R25,R30
    04CE F008      BCS	0x04D0
    04CF C056      RJMP	0x0526
    04D0 2422      CLR	R2
    04D1 2433      CLR	R3
    04D2 9230010E  STS	Second_count_3+1,R3
    04D4 9220010D  STS	Second_count_3,R2
    04D6 C04F      RJMP	0x0526
(0455) 	while(adc_old < 27)		  						 //检测当前电流是不是为0
(0456) 		{
(0457) 		 temp |= (1<<LED_yes);
    04D7 91800116  LDS	R24,temp
    04D9 6088      ORI	R24,0x8
    04DA 93800116  STS	temp,R24
(0458) 		 PORTD &= ~(1<<Green);						 //绿色指示灯灭
    04DC 985B      CBI	0x0B,3
(0459) 		 PORTB &= ~(1<<P0);							 //关断P0   0.16A恒流充电
    04DD 9829      CBI	0x05,1
(0460) 		 PORTD |= (1<<P1); 							 //打开P1   0.16A恒流充电
    04DE 9A5D      SBI	0x0B,5
(0461) 		 PORTB &= ~(1<<P2);							 //关断P2   0.16A恒流充电
    04DF 982F      CBI	0x05,7
(0462) 		 PORTB &= ~(1<<P3);							 //关断P3   0.16A恒流充电
    04E0 982E      CBI	0x05,6
(0463) 		 TC1321_SET_1(999);							 // D/A送电压10.0V
    04E1 EE07      LDI	R16,0xE7
    04E2 E013      LDI	R17,3
    04E3 DDEE      RCALL	_TC1321_SET_1
(0464) 		 		if(Second_count_3>5)
    04E4 E085      LDI	R24,5
    04E5 E090      LDI	R25,0
    04E6 9020010D  LDS	R2,Second_count_3
    04E8 9030010E  LDS	R3,Second_count_3+1
    04EA 1582      CP	R24,R2
    04EB 0593      CPC	R25,R3
    04EC F550      BCC	0x0517
(0465) 		 		{
(0466) 		    	 Second_count_3=00;
    04ED 2422      CLR	R2
    04EE 2433      CLR	R3
    04EF 9230010E  STS	Second_count_3+1,R3
    04F1 9220010D  STS	Second_count_3,R2
(0467) 		  		 TC1321_SET_1(735);	 	   				 // D/A送电压15.8V 
    04F3 ED0F      LDI	R16,0xDF
    04F4 E012      LDI	R17,2
    04F5 DDDC      RCALL	_TC1321_SET_1
(0468) 		  		 Delay(0xff);
    04F6 EF0F      LDI	R16,0xFF
    04F7 E010      LDI	R17,0
    04F8 DE0C      RCALL	_Delay
(0469) 		 
(0470) 		  		 adc_mux=0X07;
    04F9 E087      LDI	R24,7
    04FA 9380010A  STS	adc_mux,R24
(0471) 		  		 Delay(0xff);   				  			 //A/D采样延时
    04FC EF0F      LDI	R16,0xFF
    04FD E010      LDI	R17,0
    04FE DE06      RCALL	_Delay
(0472) 		  		 ad_reulst();
    04FF DF2A      RCALL	_ad_reulst
(0473) 		  		 adc_old=adc_rel;
    0500 90200113  LDS	R2,adc_rel
    0502 90300114  LDS	R3,adc_rel+1
    0504 9230011E  STS	adc_old+1,R3
    0506 9220011D  STS	adc_old,R2
(0474) 
(0475) 		 				if(adc_old > 6)
    0508 E086      LDI	R24,6
    0509 E090      LDI	R25,0
    050A 9020011D  LDS	R2,adc_old
    050C 9030011E  LDS	R3,adc_old+1
    050E 1582      CP	R24,R2
    050F 0593      CPC	R25,R3
    0510 F430      BCC	0x0517
(0476) 		 	    		{
(0477) 		          	 	 TC1321_SET_1(735);	 	   		 // D/A送电压15.8V 
    0511 ED0F      LDI	R16,0xDF
    0512 E012      LDI	R17,2
    0513 DDBE      RCALL	_TC1321_SET_1
(0478) 		          	 	 Delay(0xff);
    0514 EF0F      LDI	R16,0xFF
    0515 E010      LDI	R17,0
    0516 DDEE      RCALL	_Delay
(0479) 		        	 	}
(0480) 		  		}
(0481) 		  
(0482) 		adc_mux=0X07;
    0517 E087      LDI	R24,7
    0518 9380010A  STS	adc_mux,R24
(0483) 		Delay(0xff);   				  				 //A/D采样延时
    051A EF0F      LDI	R16,0xFF
    051B E010      LDI	R17,0
    051C DDE8      RCALL	_Delay
(0484) 		ad_reulst();
    051D DF0C      RCALL	_ad_reulst
(0485) 		adc_old=adc_rel;
    051E 90200113  LDS	R2,adc_rel
    0520 90300114  LDS	R3,adc_rel+1
    0522 9230011E  STS	adc_old+1,R3
    0524 9220011D  STS	adc_old,R2
    0526 9180011D  LDS	R24,adc_old
    0528 9190011E  LDS	R25,adc_old+1
    052A 318B      CPI	R24,0x1B
    052B E0E0      LDI	R30,0
    052C 079E      CPC	R25,R30
    052D F408      BCC	0x052F
    052E CFA8      RJMP	0x04D7
(0486) 		}
(0487) 	}
(0488) 		temp &= ~(1<<LED_yes);
    052F 91800116  LDS	R24,temp
    0531 7F87      ANDI	R24,0xF7
    0532 93800116  STS	temp,R24
    0534 9508      RET
(0489) }
(0490) /******************************************************************/
(0491) //MAIN程序
(0492) void main(void)
(0493) {
(0494)  unsigned char i; 
(0495)  ADMUX=00;     	  			   //防止两个基准原短路 
_main:
  i                    --> Y+1
    0535 2422      CLR	R2
    0536 9220007C  STS	0x7C,R2
(0496)  PORTB = 0x00; 	  			   // I/O口初始化
    0538 B825      OUT	0x05,R2
(0497)  DDRB  = 0xFF; 	  			   // I/O口初始化  老版本是FB
    0539 EF8F      LDI	R24,0xFF
    053A B984      OUT	0x04,R24
(0498)  PORTC = 0x00; 	  			   // I/O口初始化  
    053B B828      OUT	0x08,R2
(0499)  DDRC = 0x70;  	  			   // I/O口初始化   老版本是F0
    053C E780      LDI	R24,0x70
    053D B987      OUT	0x07,R24
(0500)  PORTD = 0x00; 	 			   // I/O口初始化
    053E B82B      OUT	0x0B,R2
(0501)  DDRD  = 0x2C; 	  			   // I/O口初始化  老版本是FF
    053F E28C      LDI	R24,0x2C
    0540 B98A      OUT	0x0A,R24
(0502)  Second_count_3=0;
    0541 2433      CLR	R3
    0542 9230010E  STS	Second_count_3+1,R3
    0544 9220010D  STS	Second_count_3,R2
(0503)  TC1321_SET_1(780);	 		   // 14.78,不补偿
    0546 E00C      LDI	R16,0xC
    0547 E013      LDI	R17,3
    0548 DD89      RCALL	_TC1321_SET_1
(0504)  if(Second_count_3<6){;} 
    0549 9180010D  LDS	R24,Second_count_3
    054B 9190010E  LDS	R25,Second_count_3+1
    054D 3086      CPI	R24,6
    054E E0E0      LDI	R30,0
    054F 079E      CPC	R25,R30
    0550 F400      BCC	0x0551
(0505)  cycle=0x00;   				   //第五次到第一次之间循环次数清零
    0551 2422      CLR	R2
    0552 92200115  STS	cycle,R2
(0506)  temp &= ~(1<<plus_charge);    //上电后不允许进行脉冲充电
    0554 91800116  LDS	R24,temp
    0556 7E8F      ANDI	R24,0xEF
    0557 93800116  STS	temp,R24
(0507)  temp &= ~(1<<LED_yes);		   //开始不允许红灯闪烁
    0559 7F87      ANDI	R24,0xF7
    055A 93800116  STS	temp,R24
(0508)  	  
(0509)  temp &= ~(1<<anther);		   //测试用
    055C 7D8F      ANDI	R24,0xDF
    055D 93800116  STS	temp,R24
(0510)  //temp |= (1<<anther);
(0511)  //temp |= (1<<LED_yes); 	   //允许红灯闪烁
(0512)  temp |= (1<<Charge_Sel);	   //选择warmup_charger方式
    055F 6480      ORI	R24,0x40
    0560 93800116  STS	temp,R24

⌨️ 快捷键说明

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