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

📄 test.s

📁 a good program for battery charge,only for reference
💻 S
📖 第 1 页 / 共 5 页
字号:
;            ddd -> R16,R17
	.even
_Delay::
	.dbline -1
	.dbline 328
; }
; /********************************************************************/
; void Delay(unsigned int ddd)   				//Delay50Ms() i=0xF8F;
; {
L68:
	.dbline 330
	.dbline 330
	.dbline 330
L69:
	.dbline 330
;  //ddd=100;
;  while(--ddd){;}
	movw R24,R16
	sbiw R24,1
	movw R16,R24
	cpi R16,0
	cpc R16,R17
	brne L68
X0:
	.dbline -2
L67:
	.dbline 0 ; func end
	ret
	.dbsym r ddd 16 i
	.dbend
	.dbfunc e temp_det _temp_det fV
	.even
_temp_det::
	.dbline -1
	.dbline 334
; }
; /********************************************************************/
; void temp_det(void)
; {
	.dbline 335
; 	adc_mux=0X02;
	ldi R24,2
	sts _adc_mux,R24
	.dbline 336
; 	Delay(0xff);   			  				//A/D采样延时
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 337
; 	ad_reulst();
	rcall _ad_reulst
	.dbline 338
; 	if(adc_old <=139 )	  	  			   	//当前温度为80-90
	ldi R24,139
	ldi R25,0
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brlo L72
	.dbline 339
; 		{temp_step=80;
	.dbline 339
	ldi R24,80
	sts _temp_step,R24
	.dbline 340
; 		temp_start=139;
	ldi R24,139
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 341
; 		temp_dange=3;
	ldi R24,3
	sts _temp_dange,R24
	.dbline 342
; 		}
L72:
	.dbline 343
; 	if(adc_old > 139 && adc_old <=178 )	  	//当前温度为70-80
	ldi R24,139
	ldi R25,0
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L74
	ldi R24,178
	cp R24,R2
	cpc R25,R3
	brlo L74
	.dbline 344
; 		{temp_step=70;
	.dbline 344
	ldi R24,70
	sts _temp_step,R24
	.dbline 345
; 		temp_start=178;
	ldi R24,178
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 346
; 		temp_dange=4;
	ldi R24,4
	sts _temp_dange,R24
	.dbline 347
; 		}				
L74:
	.dbline 348
; 	if(adc_old > 178 && adc_old <=230 )	  	//当前温度为60-70
	ldi R24,178
	ldi R25,0
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L76
	ldi R24,230
	cp R24,R2
	cpc R25,R3
	brlo L76
	.dbline 349
; 		{temp_step=60;
	.dbline 349
	ldi R24,60
	sts _temp_step,R24
	.dbline 350
; 		temp_start=230;
	ldi R24,230
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 351
; 		temp_dange=5;
	ldi R24,5
	sts _temp_dange,R24
	.dbline 352
; 		}
L76:
	.dbline 353
; 	if(adc_old > 230 && adc_old <=293 )	  	//当前温度为50-60
	ldi R24,230
	ldi R25,0
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L78
	ldi R24,293
	ldi R25,1
	cp R24,R2
	cpc R25,R3
	brlo L78
	.dbline 354
; 		{temp_step=50;
	.dbline 354
	ldi R24,50
	sts _temp_step,R24
	.dbline 355
; 		temp_start=293;
	ldi R24,37
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 356
; 		temp_dange=6;	
	ldi R24,6
	sts _temp_dange,R24
	.dbline 357
; 		}		
L78:
	.dbline 358
; 	if(adc_old > 293 && adc_old <=371 )	  	//当前温度为40-50
	ldi R24,293
	ldi R25,1
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L80
	ldi R24,115
	cp R24,R2
	cpc R25,R3
	brlo L80
	.dbline 359
; 		{temp_step=40;
	.dbline 359
	ldi R24,40
	sts _temp_step,R24
	.dbline 360
; 		temp_start=371;
	ldi R24,115
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 361
; 		temp_dange=8;	
	ldi R24,8
	sts _temp_dange,R24
	.dbline 362
; 		}					
L80:
	.dbline 363
; 	if(adc_old > 371 && adc_old <=462 )	  	//当前温度为30-40
	ldi R24,371
	ldi R25,1
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L82
	ldi R24,206
	cp R24,R2
	cpc R25,R3
	brlo L82
	.dbline 364
; 		{temp_step=30;
	.dbline 364
	ldi R24,30
	sts _temp_step,R24
	.dbline 365
; 		temp_start=462;
	ldi R24,206
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 366
; 		temp_dange=9;
	ldi R24,9
	sts _temp_dange,R24
	.dbline 367
; 		}				
L82:
	.dbline 368
; 	if(adc_old > 462 && adc_old <=562 )	  	//当前温度为20-30
	ldi R24,462
	ldi R25,1
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L84
	ldi R24,562
	ldi R25,2
	cp R24,R2
	cpc R25,R3
	brlo L84
	.dbline 369
; 		{temp_step=20;
	.dbline 369
	ldi R24,20
	sts _temp_step,R24
	.dbline 370
; 		temp_start=562;
	ldi R24,50
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 371
; 		temp_dange=10;	
	ldi R24,10
	sts _temp_dange,R24
	.dbline 372
; 		}			
L84:
	.dbline 373
; 	if(adc_old > 562 && adc_old <=663 )	  	//当前温度为10-20
	ldi R24,562
	ldi R25,2
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L86
	ldi R24,151
	cp R24,R2
	cpc R25,R3
	brlo L86
	.dbline 374
; 		{temp_step=10;
	.dbline 374
	ldi R24,10
	sts _temp_step,R24
	.dbline 375
; 		temp_start=663;
	ldi R24,151
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 376
; 		temp_dange=10;	
	ldi R24,10
	sts _temp_dange,R24
	.dbline 377
; 		}			
L86:
	.dbline 378
; 	if(adc_old > 663 && adc_old <=758 )	  	//当前温度为0-10
	ldi R24,663
	ldi R25,2
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L88
	ldi R24,246
	cp R24,R2
	cpc R25,R3
	brlo L88
	.dbline 379
; 		{temp_step=0;
	.dbline 379
	clr R2
	sts _temp_step,R2
	.dbline 380
; 		temp_start=758;
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 381
; 		temp_dange=9;
	ldi R24,9
	sts _temp_dange,R24
	.dbline 382
; 		}					
L88:
	.dbline 383
; 	if(adc_old > 758 && adc_old <=839 )	  	//当前温度为-10~0
	ldi R24,758
	ldi R25,2
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L90
	ldi R24,839
	ldi R25,3
	cp R24,R2
	cpc R25,R3
	brlo L90
	.dbline 384
; 		{temp_step=-10;
	.dbline 384
	ldi R24,246
	sts _temp_step,R24
	.dbline 385
; 		temp_start=839;
	ldi R24,71
	sts _temp_start+1,R25
	sts _temp_start,R24
	.dbline 386
; 		temp_dange=8;
	ldi R24,8
	sts _temp_dange,R24
	.dbline 387
; 		}			
L90:
	.dbline 388
	lds R2,_adc_old
	lds R3,_adc_old+1
	lds R16,_temp_start
	lds R17,_temp_start+1
	sub R16,R2
	sbc R17,R3
	lds R18,_temp_dange
	clr R19
	rcall div16u
	lds R2,_temp_step
	clr R3
	sbrc R2,7
	com R3
	add R2,R16
	adc R3,R17
	sts _now_temp+1,R3
	sts _now_temp,R2
	.dbline 389
	ldi R24,839
	ldi R25,3
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brsh L92
	.dbline 390
	.dbline 391
	ldi R24,-11
	ldi R25,-1
	sts _now_temp+1,R25
	sts _now_temp,R24
	.dbline 392
L92:
	.dbline -2
L71:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ad_reulst _ad_reulst fV
	.even
_ad_reulst::
	.dbline -1
	.dbline 396
; 		now_temp=(temp_step+(temp_start-adc_old)/temp_dange);
; 	if(adc_old > 839 )	  									 
; 		{
; 		now_temp=-11;
; 		}				
; }
; /**********************A/D循环采样60次取平均值********************/
; void ad_reulst(void)												  
; 	{	
	.dbline 397
; 		abc=61;
	ldi R24,61
	ldi R25,0
	sts _abc+1,R25
	sts _abc,R24
	.dbline 398
; 		adc_old=0;
	clr R2
	clr R3
	sts _adc_old+1,R3
	sts _adc_old,R2
	rjmp L96
L95:
	.dbline 400
	.dbline 400
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 401
	lds R2,_adc_rel
	lds R3,_adc_rel+1
	lds R4,_adc_old
	lds R5,_adc_old+1
	add R4,R2
	adc R5,R3
	sts _adc_old+1,R5
	sts _adc_old,R4
	.dbline 402
L96:
	.dbline 399
; 	 	while(--abc)
	lds R24,_abc
	lds R25,_abc+1
	sbiw R24,1
	sts _abc+1,R25
	sts _abc,R24
	cpi R24,0
	cpc R24,R25
	brne L95
X1:
	.dbline 403
; 	 		 {Delay(0xff);
; 			  adc_old=(adc_old+adc_rel);
; 	 		 }
; 		adc_old=adc_old/60;	 
	ldi R18,60
	ldi R19,0
	lds R16,_adc_old
	lds R17,_adc_old+1
	rcall div16u
	sts _adc_old+1,R17
	sts _adc_old,R16
	.dbline -2
L94:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e alarm _alarm fV
	.even
_alarm::
	.dbline -1
	.dbline 407
; 	} 
; /********************************************************************/
; void alarm(void)
; {
	.dbline 408
;  	 	adc_mux=0X01;
	ldi R24,1
	sts _adc_mux,R24
	.dbline 409
; 		Delay(0xff);   						//A/D采样延时
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 410
; 		ad_reulst();	
	rcall _ad_reulst
	rjmp L100
L99:
	.dbline 412
	.dbline 413
	lds R24,_temp
	ori R24,8
	sts _temp,R24
	.dbline 414
	cbi 0xb,3
	.dbline 415
	cbi 0x5,1
	.dbline 416
	sbi 0xb,5
	.dbline 417
	cbi 0x5,7
	.dbline 418
	cbi 0x5,6
	.dbline 419
	ldi R16,999
	ldi R17,3
	rcall _TC1321_SET_1
	.dbline 421
	ldi R24,1
	sts _adc_mux,R24
	.dbline 422
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 423
	rcall _ad_reulst
	.dbline 424
	lds R2,_adc_rel
	lds R3,_adc_rel+1
	sts _adc_old+1,R3
	sts _adc_old,R2
	.dbline 425
L100:
	.dbline 411
; 	while(adc_old > 440)				//检测当前电压是不是大于16.5V
	ldi R24,440
	ldi R25,1
	lds R2,_adc_old
	lds R3,_adc_old+1
	cp R24,R2
	cpc R25,R3
	brlo L99
	.dbline 426
; 		{
; 		 temp |= (1<<LED_yes);
; 		 PORTD &= ~(1<<Green);			//绿色指示灯灭
; 		 PORTB &= ~(1<<P0);				//关断P0   0.16A恒流充电
; 		 PORTD |= (1<<P1); 				//打开P1   0.16A恒流充电
; 		 PORTB &= ~(1<<P2);				//关断P2   0.16A恒流充电
; 		 PORTB &= ~(1<<P3);				//关断P3   0.16A恒流充电			
; 		 TC1321_SET_1(999);	 			// D/A送电压10V
; 		
; 		 adc_mux=0X01;
; 		 Delay(0xff);   				//A/D采样延时
; 		 ad_reulst();
; 		 adc_old=adc_rel;	
; 		}		  
; 		temp &= ~(1<<LED_yes);
	lds R24,_temp
	andi R24,247
	sts _temp,R24
	.dbline 429
; 
; 		
; 		adc_mux=0X02;
	ldi R24,2
	sts _adc_mux,R24
	.dbline 430
; 		Delay(0x4ff);   			  		//A/D采样延时
	ldi R16,1279
	ldi R17,4
	rcall _Delay
	.dbline 431
; 		ad_reulst();
	rcall _ad_reulst
	rjmp L103
L102:
	.dbline 433
	.dbline 434
	cbi 0xb,3
	.dbline 435
	sbi 0xb,2
	.dbline 437
	cbi 0x5,1
	.dbline 438
	sbi 0xb,5
	.dbline 439
	cbi 0x5,7
	.dbline 440
	cbi 0x5,6
	.dbline 441
	ldi R16,999
	ldi R17,3
	rcall _TC1321_SET_1
	.dbline 442
	ldi R24,2
	sts _adc_mux,R24
	.dbline 443
	ldi R16,1279
	ldi R17,4
	rcall _Delay
	.dbline 444
	rcall _ad_reulst
	.dbline 445
	lds R2,_adc_rel
	lds R3,_adc_rel+1
	sts _adc_old+1,R3
	sts _adc_old,R2
	.dbline 446
L103:
	.dbline 432
; 	while(adc_old < 0x7A)	  	  		//检测温度有没有大于85摄氏度  0.42V
	lds R24,_adc_old
	lds R25,_adc_old+1
	cpi R24,122
	ldi R30,0
	cpc R25,R30
	brlo L102
	.dbline 449
; 		{
; 		 PORTD &= ~(1<<Green);			//绿色指示灯灭
; 		 PORTD |= (1<<Red);
; 		 
; 		 PORTB &= ~(1<<P0);				//关断P0   0.16A恒流充电
; 		 PORTD |= (1<<P1); 				//打开P1   0.16A恒流充电
; 		 PORTB &= ~(1<<P2);				//关断P2   0.16A恒流充电
; 		 PORTB &= ~(1<<P3);				//关断P3   0.16A恒流充电			
; 		 TC1321_SET_1(999);	 	  		// D/A送电压10.0V 
; 		 adc_mux=0X02;
; 		 Delay(0x4ff);   			  	//A/D采样延时
; 		 ad_reulst();
; 		 adc_old=adc_rel;
; 		}	
; 
; 		
; 	if((temp&(1<<anther))==0x20)					 //0电流检测使能位
	lds R24,_temp
	andi R24,32
	cpi R24,32
	breq X2
	rjmp L105
X2:
	.dbline 450
; 	{
	.dbline 451
;  	 adc_mux=0X07;
	ldi R24,7
	sts _adc_mux,R24
	.dbline 452
; 	 Delay(0xff);   				  				 //A/D采样延时
	ldi R16,255
	ldi R17,0
	rcall _Delay
	.dbline 453
; 	 ad_reulst();
	rcall _ad_reulst
	.dbline 454
; 	if(adc_old < 27){Second_count_3=00;}             //27
	lds R24,_adc_old
	lds R25,_adc_old+1
	cpi R24,27
	ldi R30,0
	cpc R25,R30
	brlo X3
	rjmp L110
X3:
	.dbline 454
	.dbline 454
	clr R2
	clr R3
	sts _Second_count_3+1,R3
	sts _Second_count_3,R2
	.dbline 454
	rjmp L110
L109:
	.dbline 456
; 	while(adc_old < 27)		  						 //检测当前电流是不是为0
; 		{
	.dbline 457
; 		 temp |= (1<<LED_yes);
	lds R24,_temp

⌨️ 快捷键说明

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