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

📄 test.s

📁 a good program for battery charge,only for reference
💻 S
📖 第 1 页 / 共 5 页
字号:
	ori R24,8
	sts _temp,R24
	.dbline 458
; 		 PORTD &= ~(1<<Green);						 //绿色指示灯灭
	cbi 0xb,3
	.dbline 459
; 		 PORTB &= ~(1<<P0);							 //关断P0   0.16A恒流充电
	cbi 0x5,1
	.dbline 460
; 		 PORTD |= (1<<P1); 							 //打开P1   0.16A恒流充电
	sbi 0xb,5
	.dbline 461
; 		 PORTB &= ~(1<<P2);							 //关断P2   0.16A恒流充电
	cbi 0x5,7
	.dbline 462
; 		 PORTB &= ~(1<<P3);							 //关断P3   0.16A恒流充电
	cbi 0x5,6
	.dbline 463
; 		 TC1321_SET_1(999);							 // D/A送电压10.0V
	ldi R16,999
	ldi R17,3
	rcall _TC1321_SET_1
	.dbline 464
; 		 		if(Second_count_3>5)
	ldi R24,5
	ldi R25,0
	lds R2,_Second_count_3
	lds R3,_Second_count_3+1
	cp R24,R2
	cpc R25,R3
	brsh L112
	.dbline 465
; 		 		{
	.dbline 466
; 		    	 Second_count_3=00;
	clr R2
	clr R3
	sts _Second_count_3+1,R3
	sts _Second_count_3,R2
	.dbline 467
; 		  		 TC1321_SET_1(735);	 	   				 // D/A送电压15.8V 
	ldi R16,735
	ldi R17,2
	rcall _TC1321_SET_1
	.dbline 468
; 		  		 Delay(0xff);
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 470
; 		 
; 		  		 adc_mux=0X07;
	ldi R24,7
	sts _adc_mux,R24
	.dbline 471
; 		  		 Delay(0xff);   				  			 //A/D采样延时
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 472
; 		  		 ad_reulst();
	rcall _ad_reulst
	.dbline 473
; 		  		 adc_old=adc_rel;
	lds R2,_adc_rel
	lds R3,_adc_rel+1
	sts _adc_old+1,R3
	sts _adc_old,R2
	.dbline 475
; 
; 		 				if(adc_old > 6)
	ldi R24,6
	ldi R25,0
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L114
	.dbline 476
; 		 	    		{
	.dbline 477
; 		          	 	 TC1321_SET_1(735);	 	   		 // D/A送电压15.8V 
	ldi R16,735
	ldi R17,2
	rcall _TC1321_SET_1
	.dbline 478
; 		          	 	 Delay(0xff);
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 479
; 		        	 	}
L114:
	.dbline 480
; 		  		}
L112:
	.dbline 482
	ldi R24,7
	sts _adc_mux,R24
	.dbline 483
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 484
	rcall _ad_reulst
	.dbline 485
	lds R2,_adc_rel
	lds R3,_adc_rel+1
	sts _adc_old+1,R3
	sts _adc_old,R2
	.dbline 486
L110:
	.dbline 455
	lds R24,_adc_old
	lds R25,_adc_old+1
	cpi R24,27
	ldi R30,0
	cpc R25,R30
	brsh X4
	rjmp L109
X4:
	.dbline 487
; 		  
; 		adc_mux=0X07;
; 		Delay(0xff);   				  				 //A/D采样延时
; 		ad_reulst();
; 		adc_old=adc_rel;
; 		}
; 	}
L105:
	.dbline 488
; 		temp &= ~(1<<LED_yes);
	lds R24,_temp
	andi R24,247
	sts _temp,R24
	.dbline -2
L98:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;              i -> <dead>
	.even
_main::
	.dbline -1
	.dbline 493
; }
; /******************************************************************/
; //MAIN程序
; void main(void)
; {
	.dbline 495
;  unsigned char i; 
;  ADMUX=00;     	  			   //防止两个基准原短路 
	clr R2
	sts 124,R2
	.dbline 496
;  PORTB = 0x00; 	  			   // I/O口初始化
	out 0x5,R2
	.dbline 497
;  DDRB  = 0xFF; 	  			   // I/O口初始化  老版本是FB
	ldi R24,255
	out 0x4,R24
	.dbline 498
;  PORTC = 0x00; 	  			   // I/O口初始化  
	out 0x8,R2
	.dbline 499
;  DDRC = 0x70;  	  			   // I/O口初始化   老版本是F0
	ldi R24,112
	out 0x7,R24
	.dbline 500
;  PORTD = 0x00; 	 			   // I/O口初始化
	out 0xb,R2
	.dbline 501
;  DDRD  = 0x2C; 	  			   // I/O口初始化  老版本是FF
	ldi R24,44
	out 0xa,R24
	.dbline 502
;  Second_count_3=0;
	clr R3
	sts _Second_count_3+1,R3
	sts _Second_count_3,R2
	.dbline 503
;  TC1321_SET_1(780);	 		   // 14.78,不补偿
	ldi R16,780
	ldi R17,3
	rcall _TC1321_SET_1
	.dbline 504
;  if(Second_count_3<6){;} 
	lds R24,_Second_count_3
	lds R25,_Second_count_3+1
	cpi R24,6
	ldi R30,0
	cpc R25,R30
	brsh L117
	.dbline 504
	.dbline 504
	.dbline 504
L117:
	.dbline 505
;  cycle=0x00;   				   //第五次到第一次之间循环次数清零
	clr R2
	sts _cycle,R2
	.dbline 506
;  temp &= ~(1<<plus_charge);    //上电后不允许进行脉冲充电
	lds R24,_temp
	andi R24,239
	sts _temp,R24
	.dbline 507
;  temp &= ~(1<<LED_yes);		   //开始不允许红灯闪烁
	andi R24,247
	sts _temp,R24
	.dbline 509
;  	  
;  temp &= ~(1<<anther);		   //测试用
	andi R24,223
	sts _temp,R24
	.dbline 512
;  //temp |= (1<<anther);
;  //temp |= (1<<LED_yes); 	   //允许红灯闪烁
;  temp |= (1<<Charge_Sel);	   //选择warmup_charger方式
	ori R24,64
	sts _temp,R24
	.dbline 513
;  SEI();						   //使能全局中断
	sei
	.dbline 514
;  timer1_init(); 			   //timer 1 interrupt sources
	rcall _timer1_init
	.dbline 515
;  TIMSK1 = 0x01; 			   //timer 1 interrupt sources
	ldi R24,1
	sts 111,R24
	.dbline 516
;  TCNT1H = 0xFE; 			   //reload counter high value
	ldi R24,254
	sts 133,R24
	.dbline 517
;  TCNT1L = 0xAA; 			   //reload counter low value
	ldi R24,170
	sts 132,R24
	.dbline 518
;  PORTD &= ~(1<<Red);		   //关闭红色指示灯
	cbi 0xb,2
	.dbline 519
;  PORTD &= ~(1<<Green);		   //关闭绿色指示灯
	cbi 0xb,3
	.dbline 520
;  adc_init();
	rcall _adc_init
	.dbline 521
;  adc_old=0;
	clr R2
	clr R3
	sts _adc_old+1,R3
	sts _adc_old,R2
	.dbline 522
;  adc_rel=0;  
	sts _adc_rel+1,R3
	sts _adc_rel,R2
	.dbline 524
; 	  
; 		PORTB &= ~(1<<P0);	   //关断P0   0.8A恒流充电
	cbi 0x5,1
	.dbline 525
; 		PORTD &= ~(1<<P1);	   //关断P1   0.8A恒流充电
	cbi 0xb,5
	.dbline 526
; 		PORTB &= ~(1<<P2);	   //关断P2   0.8A恒流充电
	cbi 0x5,7
	.dbline 527
; 		PORTB |= (1<<P3);      //打开P3   0.8A恒流充电
	sbi 0x5,6
	.dbline 529
; 
;  temp |= (1<<anther);
	lds R24,_temp
	ori R24,32
	sts _temp,R24
	.dbline 530
;  alarm();  					   //检测过流、低压、过温 
	rcall _alarm
	rjmp L120
X5:
	.dbline 567
;  //------------------ 开始进入主流层 --------------------/ 	
;   //------------------在2A负载情况下,-------------------/
;  // 电池电压15.55V  ADC1=421  充电器输出15.8V 电池电压15.55V
;  // 电池电压14.4V   ADC1=390   
;  // 电池电压13.8V   ADC1=374
;  // 电池电压13.2V   ADC1=358
;  // 电池电压13.0V   ADC1=353  
;  // 电池电压12.6V   ADC1=342  
;  // 电池电压12.0V   ADC1=326
;  // 电池电压11.5V   ADC1=313
;  // 电池电压10V     ADC1=273
;  // 2A     ADC7=229
;  //-----------------在0.16A负载情况下,------------------//
;  // 电池电压15.55V  ADC1=411
;  // 电池电压14.4V   ADC1=380  
;  // 电池电压13.8V   ADC1=364
;  // 电池电压13.2V   ADC1=348
;  // 电池电压13.0V   ADC1=343
;  // 电池电压12.6V   ADC1=332
;  // 电池电压12.0V   ADC1=316
;  // 电池电压11.5V   ADC1=303
;  // 电池电压10.0V   ADC1=263
;  // 0.16A     ADC7=31
; //------------------------------------------------------/
; // 电流2A情况下,充电输出电压      15.8 V  ;TC132=2.820 V 000  00000000
; // 电流2A情况下,充电输出电压      14.4 V  ;TC132=2.978 V 878  00000000		
; // 电流2A情况下,充电输出电压      13.8 V  ;TC132=3.015 V 892  00000000
; // 电流2A情况下,充电输出电压      13.2 V  ;TC132=3.047 V 903  00000000 
; // 电流2A情况下,充电输出电压      13.0 V  ;TC132=3.056 V 893
; // 电流2A情况下,充电输出电压      12.6 V  ;TC132=3.075 V 899
; // 电流0.16A情况下,充电输出电压   12.6 V  ;TC132=3.100 V 906
; // 电流0.16A情况下,充电输出电压   12.0 V  ;TC132=3.127 V 921  00000000
; // 电流0.16A情况下,充电输出电压   11.5 V  ;TC132=3.148 V 930  00000000
; // 电流0.16A情况下,充电输出电压   10.0 V  ;TC132=3.211 V 950  00000000
; //------------------------------------------------------/
;  while(1)					 
;  {  		 
	.dbline 568
; 	goto	 step_3;	 	        //开始应该  goto	 step_3进入恒流充电	
	.dbline 571
; /***** 第一步 去硫化、脉冲、14.4V&13.8V 0.8A 1Hz 脉冲充电 红色指示灯*****/ 
; step_1:
; goto	 step_3;
	.dbline 574
; /****************** 第二步 软启动、14.4V/0.8A 红色指示灯***********************/
; step_2:		
; goto	 step_3;
L122:
	.dbline 577
; /********************* 第三步 恒流4A、红色灯**************************/ 
; step_3: 
;     Second_count_1=00; 		  		//延时24小时,等于86400秒
	clr R2
	clr R3
	sts _Second_count_1+1,R3
	sts _Second_count_1,R2
	.dbline 578
;  	Second_count_2=00; 				//Second_count_1*Second_count_2=60*1660
	sts _Second_count_2+1,R3
	sts _Second_count_2,R2
	rjmp L126
L125:
	.dbline 580
; 	while(1)
; 		{
	.dbline 581
; 		temp |= (1<<anther);
	lds R24,_temp
	ori R24,32
	sts _temp,R24
	.dbline 582
; 		alarm();	   				//报警扫描			
	rcall _alarm
	.dbline 583
; 		Delay(0x7ff);  
	ldi R16,2047
	ldi R17,7
	rcall _Delay
	.dbline 584
; 		Delay(0x7ff);  		
	ldi R16,2047
	ldi R17,7
	rcall _Delay
	.dbline 586
; 		
; 		PORTD |= (1<<Red);			//指示灯显示红色		
	sbi 0xb,2
	.dbline 587
; 		PORTD &= ~(1<<Green);		//绿色指示灯灭
	cbi 0xb,3
	.dbline 589
; 										  
; 		PORTB &= ~(1<<P0);			//关断P0   4A恒流充电
	cbi 0x5,1
	.dbline 590
; 		PORTD &= ~(1<<P1);			//关断P1   4A恒流充电
	cbi 0xb,5
	.dbline 591
; 		PORTB &= ~(1<<P2);			//关断P2   4A恒流充电
	cbi 0x5,7
	.dbline 592
; 		PORTB |= (1<<P3);   		//打开P3   4A恒流充电
	sbi 0x5,6
	.dbline 593
; 		TC1321_SET(878);			// D/A送电压14.4V	
	ldi R16,878
	ldi R17,3
	rcall _TC1321_SET
	.dbline 595
	.dbline 596
L129:
	.dbline 594
; 	 		while(Second_count_2>1459) 	//24小时到 1459
	ldi R24,1459
	ldi R25,5
	lds R2,_Second_count_2
	lds R3,_Second_count_2+1
	cp R24,R2
	cpc R25,R3
	brsh X12
	rjmp L131
X12:
	.dbline 600
; 			{						   	//则跳到第七步					  
; 			goto	step_7;
; 			}	
; 				
; 				
; 			 adc_mux=0X07;
	ldi R24,7
	sts _adc_mux,R24
	.dbline 601
; 			 Delay(0xff);   				  		  //A/D采样延时
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 602
; 			 ad_reulst();
	rcall _ad_reulst
	.dbline 603
; 			 Second_count_3=00;
	clr R2
	clr R3
	sts _Second_count_3+1,R3
	sts _Second_count_3,R2
	.dbline 604
; 			 if(adc_old > 0x33 && adc_old < 390 )     //电流
	ldi R24,51
	ldi R25,0
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L132
	movw R24,R2
	cpi R24,134
	ldi R30,1
	cpc R25,R30
	brsh L132
	.dbline 605
; 			 {	
L134:
	.dbline 607
	.dbline 614
	.dbline 615
L135:
	.dbline 606
; 			 	  while(Second_count_3<2) 			  //等待2秒,因为拔掉电池,电流下降也会满足此条件,但是应该进入
	lds R24,_Second_count_3
	lds R25,_Second_count_3+1
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	brlo L134
	.dbline 616
; 				  {	  								  //0电流报警,而不该进入第四步,所以等待2秒															   
; 			//	    temp |= (1<<anther);
; 			//	  	alarm();
; 			//		PORTB &= ~(1<<P0);				  //关断P0   4A恒流充电
; 			//		PORTD &= ~(1<<P1);				  //关断P1   4A恒流充电
; 			//		PORTB &= ~(1<<P2);				  //关断P2   4A恒流充电
; 			//		PORTB |= (1<<P3);   			  //打开P3   4A恒流充电				  
; 				;
; 				  }	  
; 					 adc_mux=0X07;
	ldi R24,7
	sts _adc_mux,R24
	.dbline 617
; 			         Delay(0xff);   				  //A/D采样延时
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 618
; 			 		 ad_reulst();
	rcall _ad_reulst
	.dbline 619
; 					 if(adc_old > 0x33 && adc_old < 390 )
	ldi R24,51
	ldi R25,0
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L137
	movw R24,R2
	cpi R24,134
	ldi R30,1
	cpc R25,R30
	brsh L137
	.dbline 620
; 					 {
	.dbline 621
; 			 		 goto	step_4;  
	rjmp L139
L137:
	.dbline 623
; 					 }
; 			 }	
L132:
	.dbline 626
; 			 
; 			 
; 				adc_mux=0X01;  		   	  		  		//采样当前电池电压大小		
	ldi R24,1
	sts _adc_mux,R24
	.dbline 627
; 			    Delay(0xff);   		//A/D采样延时
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 628
; 			    ad_reulst();	    //刷新A/D采样值
	rcall _ad_reulst
	.dbline 629
; 				if(adc_old > 390 )  //检测当前电压是不是大于14.4V  A/D电压1.31 
	ldi R24,390
	ldi R25,1
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L140
	.dbline 630
; 				{	
	.dbline 631
; 				goto	step_4;     //则跳到第四步
	rjmp L139
L140:
	.dbline 633
L126:
	.dbline 579
	rjmp L125
L139:
	.dbline 636
; 				}
; 		}
; /************************ 第四步 恒压、14.4V、橙色灯***************************/		
; step_4:		
;     		Second_count_1=00; 	  		 		//延时10小时,等于36000秒
	clr R2
	clr R3
	sts _Second_count_1+1,R3
	sts _Second_count_1,R2
	.dbline 637
;  			Second_count_2=00; 	  		 		//Second_count_1*Second_count_2=60*600
	sts _Second_count_2+1,R3
	sts _Second_count_2,R2
	rjmp L143
L142:
	.dbline 639
; 	while(1)
; 		{
	.dbline 640
; 		temp |= (1<<anther);			 		//允许0电流检测		 
	lds R24,_temp
	ori R24,32
	sts _temp,R24
	.dbline 641
; 		alarm();	   		    		 		//报警扫描			
	rcall _alarm
	.dbline 642
; 		PORTB &= ~(1<<P0);				 		//关断P0   4A恒流充电
	cbi 0x5,1
	.dbline 643
; 		PORTD &= ~(1<<P1);				 		//关断P1   4A恒流充电
	cbi 0xb,5
	.dbline 644
; 		PORTB &= ~(1<<P2);				 		//关断P2   4A恒流充电
	cbi 0x5,7
	.dbline 645
; 		PORTB |= (1<<P3);   			 		//打开P3   4A恒流充电		
	sbi 0x5,6
	.dbline 646
; 		PORTD |= (1<<Green);			 		//指示灯显示绿色		
	sbi 0xb,3
	.dbline 647
; 		PORTD |= (1<<Red);				 		//红色指示亮
	sbi 0xb,2
	.dbline 648
; 		TC1321_SET(878);	 			 		// D/A送电压14.4V ,同时进行温度补偿	
	ldi R16,878
	ldi R17,3
	rcall _TC1321_SET
	rjmp L146
L145:
	.dbline 651
; 		
; 	 		while(Second_count_2>600)  			//10小时到  600
; 			{						   			//则跳到第七步					  
	.dbline 652
; 				Second_count_1=00; 				//延时55秒
	clr R2
	clr R3
	sts _Second_count_1+1,R3
	sts _Second_count_1,R2
	rjmp L149
L148:
	.dbline 654
; 				while(1)		   				//延时3分钟,防止电流反灌
; 				{
	.dbline 655
; 				 	TC1321_SET_138(892);	 	// D/A送电压13.8V ,同时进行温度补偿	
	ldi R16,892
	ldi R17,3
	rcall _TC1321_SET_138
	.dbline 656
; 				    if(Second_count_1>55)
	ldi R24,55
	ldi R25,0
	lds R2,_Second_count_1
	lds R3,_Second_count_1+1
	cp R24,R2
	cpc R25,R3
	brsh L151
	.dbline 657
; 				    {goto	step_7;}
	.dbline 657
	rjmp L131
L151:
	.dbline 658
L149:
	.dbline 653
	rjmp L148
X6:
	.dbline 659
L146:
	.dbline 650
	ldi R24,600
	ldi R25,2
	lds R2,_Second_count_2
	lds R3,_Second_count_2+1
	cp R24,R2
	cpc R25,R3
	brlo L145
	.dbline 662
; 				}	
; 			}	
; 			
; 			
; 			adc_mux=0X01;  		   		 		//采样当前电池电压大小		
	ldi R24,1
	sts _adc_mux,R24
	.dbline 663
; 			Delay(0xff);   		   				//A/D采样延时
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 664
; 			ad_reulst();	  	   				//刷新A/D采样值
	rcall _ad_reulst
	.dbline 665
; 			if(adc_old < 353) 	   				//检测当前电压是不是小于13V 
	lds R24,_adc_old
	lds R25,_adc_old+1
	cpi R24,97
	ldi R30,1
	cpc R25,R30
	brsh L153
	.dbline 666
; 			{			  		   				//小于13V则跳到第3步
	.dbline 667

⌨️ 快捷键说明

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