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

📄 discharger.s

📁 这是一个电池放电器
💻 S
📖 第 1 页 / 共 4 页
字号:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ID 20 c
	.dbend
	.dbfunc e discharge_speed _discharge_speed fV
;             ID -> R20
	.even
_discharge_speed::
	rcall push_gset1
	sbiw R28,9
	.dbline -1
	.dbline 426
; 			LCD_write_string(0,0,"Capacitance",0);
; 			LCD_write_number(0,1,0,mAh_set,"mAh",8);
; 			LCD_write_number(10,1,3,BT1_V,"V",15);
; 		  }
;   }
; void discharge_speed(void)
;   {
	.dbline 427
;       unsigned char ID=21; 
	ldi R20,21
	.dbline 428
;       if(RunTab==ID)
	lds R2,_RunTab
	cp R2,R20
	breq X33
	rjmp L223
X33:
	.dbline 429
; 		  { 
	.dbline 430
; 		    LCD_write_string(0,0,"speed",0);
	clr R2
	std y+2,R2
	ldi R24,<L225
	ldi R25,>L225
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	rcall _LCD_write_string
	.dbline 431
; 			LCD_write_number(9,0,0,6000/speed,"min",15);
	ldi R24,15
	std y+8,R24
	ldi R24,<L131
	ldi R25,>L131
	std y+7,R25
	std y+6,R24
	lds R18,_speed
	clr R19
	ldi R16,6000
	ldi R17,23
	rcall div16s
	movw R2,R16
	clr R4
	sbrc R3,7
	com R4
	clr R5
	sbrc R4,7
	com R5
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	clr R2
	std y+0,R2
	clr R18
	ldi R16,9
	rcall _LCD_write_number
	.dbline 432
; 			LCD_write_number(0,1,2,speed,"C",8);
	ldi R24,8
	std y+8,R24
	ldi R24,<L114
	ldi R25,>L114
	std y+7,R25
	std y+6,R24
	lds R2,_speed
	clr R3
	clr R4
	clr R5
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	ldi R24,2
	std y+0,R24
	ldi R18,1
	clr R16
	rcall _LCD_write_number
	.dbline 433
; 			LCD_write_number(9,1,3,mAh_set/100*speed,"A",15);
	ldi R24,15
	std y+8,R24
	ldi R24,<L100
	ldi R25,>L100
	std y+7,R25
	std y+6,R24
	ldi R18,100
	ldi R19,0
	lds R16,_mAh_set
	lds R17,_mAh_set+1
	rcall div16u
	lds R18,_speed
	clr R19
	rcall empy16s
	movw R2,R16
	clr R4
	clr R5
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	ldi R24,3
	std y+0,R24
	ldi R18,1
	ldi R16,9
	rcall _LCD_write_number
	.dbline 435
; 		     
; 		    if((keyboard==up)&&speed<120)
	lds R24,_keyboard
	cpi R24,1
	brne L226
	lds R24,_speed
	cpi R24,120
	brsh L226
	.dbline 436
; 		     {keyboard=0;speed+=5;}
	.dbline 436
	clr R2
	sts _keyboard,R2
	.dbline 436
	subi R24,251    ; addi 5
	sts _speed,R24
	.dbline 436
	rjmp L227
L226:
	.dbline 437
; 		    else if((keyboard==down)&&speed>5)
	lds R24,_keyboard
	cpi R24,2
	brne L228
	ldi R24,5
	lds R2,_speed
	cp R24,R2
	brsh L228
	.dbline 438
; 		     {keyboard=0;speed-=5;}
	.dbline 438
	clr R2
	sts _keyboard,R2
	.dbline 438
	lds R24,_speed
	subi R24,5
	sts _speed,R24
	.dbline 438
	rjmp L229
L228:
	.dbline 439
; 			else if(keyboard==back)
	lds R24,_keyboard
	cpi R24,8
	brne L230
	.dbline 440
; 	        {keyboard=0;RunTab--;}
	.dbline 440
	clr R2
	sts _keyboard,R2
	.dbline 440
	lds R24,_RunTab
	subi R24,1
	sts _RunTab,R24
	.dbline 440
	rjmp L231
L230:
	.dbline 441
; 			else if(keyboard==enter)
	lds R24,_keyboard
	cpi R24,4
	brne L232
	.dbline 442
; 			{keyboard=0;RunTab++;BT1_V_num=0;}
	.dbline 442
	clr R2
	sts _keyboard,R2
	.dbline 442
	lds R24,_RunTab
	subi R24,255    ; addi 1
	sts _RunTab,R24
	.dbline 442
	clr R3
	sts _BT1_V_num+1,R3
	sts _BT1_V_num,R2
	.dbline 442
L232:
L231:
L229:
L227:
	.dbline 443
L223:
	.dbline -2
L222:
	adiw R28,9
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ID 20 c
	.dbend
	.dbfunc e record_setting _record_setting fV
;             ID -> R20
	.even
_record_setting::
	rcall push_gset1
	sbiw R28,2
	.dbline -1
	.dbline 446
	.dbline 447
	ldi R20,22
	.dbline 448
	lds R2,_RunTab
	cp R2,R20
	breq X34
	rjmp L235
X34:
	.dbline 449
	.dbline 450
	ldi R24,2
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_mAh_set
	ldi R19,>_mAh_set
	ldi R16,508
	ldi R17,1
	rcall _EEPROMWriteBytes
	.dbline 451
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_speed
	ldi R19,>_speed
	ldi R16,510
	ldi R17,1
	rcall _EEPROMWriteBytes
	.dbline 452
	ldi R24,500
	ldi R25,1
	sts _PWM+1,R25
	sts _PWM,R24
	.dbline 452
	ldi R24,7500
	ldi R25,29
	sts _sc_bt1_record+1,R25
	sts _sc_bt1_record,R24
	.dbline 453
	ldi R24,1250
	ldi R25,4
	sts _sc_eeprom+1,R25
	sts _sc_eeprom,R24
	.dbline 453
	ldi R24,500
	ldi R25,1
	sts _sc_bt1_v_temp+1,R25
	sts _sc_bt1_v_temp,R24
	.dbline 454
	ldi R18,100
	ldi R19,0
	lds R16,_mAh_set
	lds R17,_mAh_set+1
	rcall div16u
	lds R18,_speed
	clr R19
	rcall empy16s
	sts _BT1_I_SET+1,R17
	sts _BT1_I_SET,R16
	.dbline 455
	sbi 0x17,1
	.dbline 455
	sbi 0x15,5
	.dbline 456
	lds R24,_BT1_state
	ori R24,2
	sts _BT1_state,R24
	.dbline 457
	ldi R24,1
	sts _RunTab,R24
	.dbline 458
L235:
	.dbline -2
L234:
	adiw R28,2
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ID 20 c
	.dbend
	.dbfunc e discharge _discharge fV
;         t_temp -> y+8
;         i_temp -> y+4
;         v_temp -> y+0
;              t -> R10
;              i -> R12
;              v -> R14
	.even
_discharge::
	rcall push_gset5
	sbiw R28,12
	.dbline -1
	.dbline 465
; 		  }
;   }
; void record_setting(void)
;   {
;       unsigned char ID=22; 
;       if(RunTab==ID)
; 		  {     
; 		    EEPROM_WRITE(0x01FC,mAh_set);
; 			EEPROM_WRITE(0x01FE,speed);
; 			PWM=500;sc_bt1_record=7500;
; 			sc_eeprom=1250;sc_bt1_v_temp=500;
; 	        BT1_I_SET=mAh_set/100*speed;
; 	        PWM_ON;R_N; 
; 			BT1_state|=(1<<1);
; 			RunTab=1;
; 		  }
;   }
; 
; /*---------------------------------------
;              放电程序
; ----------------------------------------*/
; void discharge (void)
;   {    
	rjmp L239
L238:
	.dbline 470
;       unsigned long v_temp,i_temp,t_temp;
; 	  unsigned char v,i,t;
; 	 
; 	  while(BT1_state&(1<<1))
; 	  {
	.dbline 471
; 		if(i<16)
	mov R24,R12
	cpi R24,16
	brsh L241
	.dbline 472
; 		 {i_temp+=T_BT1_I();i++;delay_nms(1);}
	.dbline 472
	rcall _T_BT1_I
	movw R2,R16
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+4
	ldd R7,z+5
	ldd R8,z+6
	ldd R9,z+7
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R28
	std z+4,R6
	std z+5,R7
	std z+6,R8
	std z+7,R9
	.dbline 472
	inc R12
	.dbline 472
	ldi R16,1
	ldi R17,0
	rcall _delay_nms
	.dbline 472
	rjmp L242
L241:
	.dbline 474
; 		else
; 		 {i=0;BT1_I=i_temp>>4;i_temp=0;}
	.dbline 474
	clr R12
	.dbline 474
	ldi R24,4
	ldi R25,0
	movw R30,R28
	ldd R2,z+4
	ldd R3,z+5
	ldd R4,z+6
	ldd R5,z+7
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsr32
	sts _BT1_I+1,R17
	sts _BT1_I,R16
	.dbline 474
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+4,R20
	std z+5,R21
	std z+6,R22
	std z+7,R23
	.dbline 474
L242:
	.dbline 476
; 		 
; 		if(v<64)
	mov R24,R14
	cpi R24,64
	brsh L243
	.dbline 477
; 		 {v_temp+=T_BT1_V()+(BT1_I>>1); v++;	
	.dbline 477
	rcall _T_BT1_V
	lds R2,_BT1_I
	lds R3,_BT1_I+1
	lsr R3
	ror R2
	movw R4,R16
	add R4,R2
	adc R5,R3
	movw R2,R4
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R28
	std z+0,R6
	std z+1,R7
	std z+2,R8
	std z+3,R9
	.dbline 477
	inc R14
	.dbline 478
; 		delay_nms(1);}
	ldi R16,1
	ldi R17,0
	rcall _delay_nms
	.dbline 478
	rjmp L244
L243:
	.dbline 480
; 		else 
; 		 {v=0;BT1_V=v_temp>>6;v_temp=0;}
	.dbline 480
	clr R14
	.dbline 480
	ldi R24,6
	ldi R25,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsr32
	sts _BT1_V+1,R17
	sts _BT1_V,R16
	.dbline 480
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	.dbline 480
L244:
	.dbline 482
; 		 
; 		if(t<16)
	mov R24,R10
	cpi R24,16
	brsh L245
	.dbline 483
; 		 {t_temp+=T_BT1_T(); t++;	
	.dbline 483
	rcall _T_BT1_T
	movw R2,R16
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+8
	ldd R7,z+9
	ldd R8,z+10
	ldd R9,z+11
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	movw R30,R28
	std z+8,R6
	std z+9,R7
	std z+10,R8
	std z+11,R9
	.dbline 483
	inc R10
	.dbline 484
; 		delay_nms(1);}
	ldi R16,1
	ldi R17,0
	rcall _delay_nms
	.dbline 484
	rjmp L246
L245:
	.dbline 486
; 		else 
; 		 {t=0;BT1_T=t_temp>>4;t_temp=0;}
	.dbline 486
	clr R10
	.dbline 486
	ldi R24,4
	ldi R25,0
	movw R30,R28
	ldd R2,z+8
	ldd R3,z+9
	ldd R4,z+10
	ldd R5,z+11
	st -y,R24
	movw R16,R2
	movw R18,R4
	rcall lsr32
	sts _BT1_T+1,R17
	sts _BT1_T,R16
	.dbline 486
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+8,R20
	std z+9,R21
	std z+10,R22
	std z+11,R23
	.dbline 486
L246:
	.dbline 487
	lds R2,_BT1_I
	lds R3,_BT1_I+1
	lsr R3
	ror R2
	lds R16,_BT1_V
	lds R17,_BT1_V+1
	sub R16,R2
	sbc R17,R3
	ldi R18,100
	ldi R19,0
	rcall div16u
	sts _D882_P+1,R17
	sts _D882_P,R16
	.dbline 488
	ldi R18,10
	ldi R19,0
	lds R16,_BT1_I
	lds R17,_BT1_I+1
	rcall div16u
	movw R18,R16
	lds R16,_D882_P
	lds R17,_D882_P+1
	rcall empy16s
	sts _D882_P+1,R17
	sts _D882_P,R16
	.dbline 489
L239:
	.dbline 469
	lds R2,_BT1_state
	sbrc R2,1
	rjmp L238
	.dbline -2
L237:
	adiw R28,12
	rcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym l t_temp 8 l
	.dbsym l i_temp 4 l
	.dbsym l v_temp 0 l
	.dbsym r t 10 c
	.dbsym r i 12 c
	.dbsym r v 14 c
	.dbend
	.dbfunc e BT1_I_Ctrl _BT1_I_Ctrl fV
	.even
_BT1_I_Ctrl::
	.dbline -1
	.dbline 493
; 		D882_P=(BT1_V-(BT1_I>>1))/100;
; 		D882_P*=(BT1_I/10);
; 		}
;   }
;     
; void BT1_I_Ctrl (void)
;   { 
	.dbline 494
;    if(BT1_I_SET!=0)
	lds R2,_BT1_I_SET
	lds R3,_BT1_I_SET+1
	tst R2
	brne X35
	tst R3
	brne X37
	rjmp L248
X37:
X35:
	.dbline 495
;    {
	.dbline 496
;      if(BT1_I>BT1_I_SET+1)
	lds R24,_BT1_I_SET
	lds R25,_BT1_I_SET+1
	adiw R24,1
	lds R2,_BT1_I
	lds R3,_BT1_I+1
	cp R24,R2
	cpc R25,R3
	brsh L250
	.dbline 497
; 	  {
	.dbline 498
; 	  if(PWM!=0)
	lds R2,_PWM
	lds R3,_PWM+1
	tst R2
	brne X36
	tst R3
	breq L252
X36:
	.dbline 499
; 	  PWM-=1;
	lds R24,_PWM
	lds R25,_PWM+1
	sbiw R24,1
	sts _PWM+1,R25
	sts _PWM,R24
L252:
	.dbline 500
; 	  OCR1A=PWM;
	lds R2,_PWM
	lds R3,_PWM+1
	out 0x2b,R3
	out 0x2a,R2
	.dbline 501
; 	  }
	rjmp L249
L250:
	.dbline 502
; 	  else if(BT1_I<BT1_I_SET-1)
	lds R24,_BT1_I_SET
	lds R25,_BT1_I_SET+1
	sbiw R24,1
	lds R2,_BT1_I
	lds R3,_BT1_I+1
	cp R2,R24
	cpc R3,R25
	brsh L249
	.dbline 503
; 	  {
	.dbline 504
; 	  if(PWM!=1900)
	lds R24,_PWM
	lds R25,_PWM+1
	cpi R24,108
	ldi R30,7
	cpc R25,R30
	breq L256
	.dbline 505
; 	  PWM+=1;
	adiw R24,1
	sts _PWM+1,R25
	sts _PWM,R24
L256:
	.dbline 506
; 	  OCR1A=PWM;
	lds R2,_PWM
	lds R3,_PWM+1
	out 0x2b,R3
	out 0x2a,R2
	.dbline 507
; 	  }
	.dbline 508
; 	  }
	rjmp L249
L248:
	.dbline 510
	.dbline 510
	ldi R24,300
	ldi R25,1
	sts _PWM+1,R25
	sts _PWM,R24
	.dbline 510
	out 0x2b,R25
	out 0x2a,R24
	.dbline 510
L249:
	.dbline -2
L247:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer _timer fV
	.even
_timer::
	.dbline -1
	.dbline 516
; 	  else
; 	   {PWM=300;OCR1A=PWM;}
;   }
; /*-------------------------
;         实时时钟
; --------------------------*/
; void timer(void)
; {
	.dbline 517
;      ++sec; 
	lds R24,_sec
	subi R24,255    ; addi 1
	sts _sec,R24
	.dbline 518
; 	 if(sec==60)
	cpi R24,60
	brne L259
	.dbline 519
; 	 {
	.dbline 520
; 	   sec=0;
	clr R2
	sts _sec,R2
	.dbline 521
; 	   min++;
	lds R24,_min
	subi R24,255    ; addi 1
	sts _min,R24
	.dbline 522
; 	   if(min==60)
	cpi R24,60
	brne L261
	.dbline 523
; 	   {
	.dbline 524
; 	     min=0;
	sts _min,R2
	.dbline 525
; 		 hour++;		
	lds R24,_hour
	subi R24,255    ; addi 1
	sts _hour,R24
	.dbline 526
; 		 if(hour==24)
	cpi R24,24
	brne L263
	.dbline 527
; 		 {
	.dbline 528
; 		   hour=0;		   
	sts _hour,R2
	.dbline 529
; 		 }
L263:
	.dbline 530
; 	   }
L261:
	.dbline 531
L259:
	.dbline -2
L258:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
_BT1_P::
	.blkb 2
	.dbsym e BT1_P _BT1_P i
_D882_P::
	.blkb 2
	.dbsym e D882_P _D882_P i
_mAh::
	.blkb 2
	.dbsym e mAh _mAh i
_BT1_time::
	.blkb 4
	.dbsym e BT1_time _BT1_time l
_BT1_mAh::
	.blkb 4
	.dbsym e BT1_mAh _BT1_mAh l
_PWM::
	.blkb 2
	.dbsym e PWM _PWM i
_BT1_I_SET::
	.blkb 2
	.dbsym e BT1_I_SET _BT1_I_SET i
_bt1_v_temp_1::
	.blkb 2
	.dbsym e bt1_v_temp_1 _bt1_v_temp_1 i
_bt1_v_temp::
	.blkb 2
	.dbsym e bt1_v_temp _bt1_v_temp i
_BT1_V_num_temp::
	.blkb 2
	.dbsym e BT1_V_num_temp _BT1_V_num_temp i
_BT1_V_num::
	.blkb 2
	.dbsym e BT1_V_num _BT1_V_num i
_BT1_T::
	.blkb 2
	.dbsym e BT1_T _BT1_T i
_BT1_I::
	.blkb 2
	.dbsym e BT1_I _BT1_I i
_BT1_V::
	.blkb 2
	.dbsym e BT1_V _BT1_V i
_BT1_state::
	.blkb 1
	.dbsym e BT1_state _BT1_state c
_sc_bt1_v_temp::
	.blkb 2
	.dbsym e sc_bt1_v_temp _sc_bt1_v_temp i
_sc_bt1_record::
	.blkb 2
	.dbsym e sc_bt1_record _sc_bt1_record i
_sc_discharge::
	.blkb 2
	.dbsym e sc_discharge _sc_discharge i
_sc_eeprom::
	.blkb 2
	.dbsym e sc_eeprom _sc_eeprom i
_sc_bt_ctrl::
	.blkb 2
	.dbsym e sc_bt_ctrl _sc_bt_ctrl i
_sc_bt1::
	.blkb 2
	.dbsym e sc_bt1 _sc_bt1 i
_sc_key_delay::
	.blkb 1
	.dbsym e sc_key_delay _sc_key_delay c
_sc_lcd_write::
	.blkb 1
	.dbsym e sc_lcd_write _sc_lcd_write c
_sc_keyboard_scan::
	.blkb 1
	.dbsym e sc_keyboard_scan _sc_keyboard_scan c
_sc_timer_dealy::
	.blkb 1
	.dbsym e sc_timer_dealy _sc_timer_dealy c
_RunTab_old::
	.blkb 1
	.dbsym e RunTab_old _RunTab_old c
_keyboard::
	.blkb 1
	.dbsym e keyboard _keyboard c
_path::
	.blkb 1
	.dbsym e path _path c
_path_top::
	.blkb 1
	.dbsym e path_top _path_top c
	.area lit(rom, con, rel)
L225:
	.byte 's,'p,'e,'e,'d,0
L221:
	.byte 'C,'a,'p,'a,'c,'i,'t,'a,'n,'c,'e,0
L205:
	.byte 0
L204:
	.byte 45,0
L155:
	.byte 'm,'A,32,32,32,32,0
L154:
	.byte 'm,'A,'h,32,64,0
L131:
	.byte 'm,'i,'n,0
L115:
	.byte 'm,'W,0
L114:
	.byte 'C,0
L113:
	.byte 's,'e,'c,0
L105:
	.byte 'm,'A,'h,0
L104:
	.byte 'P,'W,'M,0
L103:
	.byte 'F,'i,'n,'i,'s,'h,0
L100:
	.byte 'A,0
L99:
	.byte 'V,0
L91:
	.byte 'S,'t,'a,'r,'t,0
L79:
	.byte 32,'m,'V,0
L78:
	.byte 32,32,0
L7:
	.byte 35,0
L6:
	.byte 'U,'S,'A,'R,'T,0
L5:
	.byte 'C,'l,'e,'a,'r,0
L4:
	.byte 'R,'e,'c,'o,'r,'d,0
L3:
	.byte 'D,56,56,50,0
L2:
	.byte 'D,'i,'s,'c,'h,'a,'r,'g,'i,'n,'g,0
L1:
	.byte 'M,'e,'n,'u,0

⌨️ 快捷键说明

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