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

📄 discharger.s

📁 这是一个电池放电器
💻 S
📖 第 1 页 / 共 4 页
字号:
	ori R24,128
	sts _BT1_state,R24
	.dbline 301
; 				  BT1_V_num_temp=0;
	clr R2
	clr R3
	sts _BT1_V_num_temp+1,R3
	sts _BT1_V_num_temp,R2
	.dbline 302
; 				 }
L148:
	.dbline 304
; 			   
; 			   keyboard=0;
	clr R2
	sts _keyboard,R2
	.dbline 305
; 			 } 
L144:
	.dbline 306
; 			if(BT1_state&(1<<7))
	lds R2,_BT1_state
	sbrs R2,7
	rjmp L150
	.dbline 307
; 			     {
	.dbline 308
; 				   EEPROM_READ(BT1_V_num_temp*2,bt1_v_temp_1);
	ldi R24,2
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_bt1_v_temp_1
	ldi R19,>_bt1_v_temp_1
	lds R2,_BT1_V_num_temp
	lds R3,_BT1_V_num_temp+1
	ldi R16,2
	ldi R17,0
	push R18
	push R19
	movw R18,R2
	rcall empy16s
	pop R19
	pop R18
	rcall _EEPROMReadBytes
	.dbline 309
; 	               put_number(BT1_V_num_temp,"  ",' '); 
	ldi R24,32
	std y+0,R24
	ldi R18,<L78
	ldi R19,>L78
	lds R16,_BT1_V_num_temp
	lds R17,_BT1_V_num_temp+1
	rcall _put_number
	.dbline 310
; 	               put_number(bt1_v_temp_1," mV",'\n');
	ldi R24,10
	std y+0,R24
	ldi R18,<L79
	ldi R19,>L79
	lds R16,_bt1_v_temp_1
	lds R17,_bt1_v_temp_1+1
	rcall _put_number
	.dbline 311
; 				   BT1_V_num_temp++; 
	lds R24,_BT1_V_num_temp
	lds R25,_BT1_V_num_temp+1
	adiw R24,1
	sts _BT1_V_num_temp+1,R25
	sts _BT1_V_num_temp,R24
	.dbline 312
; 				 if(BT1_V_num_temp>BT1_V_num-1)
	lds R24,_BT1_V_num
	lds R25,_BT1_V_num+1
	sbiw R24,1
	lds R2,_BT1_V_num_temp
	lds R3,_BT1_V_num_temp+1
	cp R24,R2
	cpc R25,R3
	brlo X28
	rjmp L152
X28:
	.dbline 313
; 		           {
	.dbline 314
; 				    put_number(mAh_set,"mAh @",' ');
	ldi R24,32
	std y+0,R24
	ldi R18,<L154
	ldi R19,>L154
	lds R16,_mAh_set
	lds R17,_mAh_set+1
	rcall _put_number
	.dbline 315
; 					put_number(mAh_set/100*speed,"mA    ",' ');
	ldi R24,32
	std y+0,R24
	ldi R18,<L155
	ldi R19,>L155
	ldi R24,100
	ldi R25,0
	lds R16,_mAh_set
	lds R17,_mAh_set+1
	push R18
	push R19
	movw R18,R24
	rcall div16u
	lds R2,_speed
	clr R3
	movw R18,R2
	rcall empy16s
	pop R19
	pop R18
	rcall _put_number
	.dbline 316
; 				    put_number(BT1_mAh/1000,"mAh",'\n');
	ldi R24,10
	std y+0,R24
	ldi R18,<L105
	ldi R19,>L105
	ldi R20,232
	ldi R21,3
	ldi R22,0
	ldi R23,0
	lds R4,_BT1_mAh+2
	lds R5,_BT1_mAh+2+1
	lds R2,_BT1_mAh
	lds R3,_BT1_mAh+1
	push R18
	push R19
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	movw R16,R2
	movw R18,R4
	rcall div32u
	pop R19
	pop R18
	rcall _put_number
	.dbline 317
; 					BT1_state&=~(1<<7);}        
	lds R24,_BT1_state
	andi R24,127
	sts _BT1_state,R24
	.dbline 317
L152:
	.dbline 318
; 				 }
L150:
	.dbline 319
	ldi R24,15
	std y+2,R24
	lds R2,_path
	ldi R24,2
	mul R24,R2
	movw R30,R0
	ldi R24,<_Menu
	ldi R25,>_Menu
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	std y+1,R3
	std y+0,R2
	clr R18
	clr R16
	rcall _LCD_write_string
	.dbline 320
L142:
	.dbline -2
L141:
	adiw R28,3
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r ID 10 c
	.dbend
	.area lit(rom, con, rel)
L157:
	.byte 0
	.byte 0,0,0,0
	.area text(rom, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
	.dbfunc e put_number _put_number fV
;              b -> R10
;           uart -> y+0
;              i -> R10
;              n -> R20
;              s -> R22,R23
;            dat -> R12,R13
	.even
_put_number::
	rcall push_gset4
	movw R22,R18
	movw R12,R16
	sbiw R28,5
	ldd R20,y+13
	.dbline -1
	.dbline 324
; 		  LCD_write_string(0,0,Menu[path],15);
; 		}
;  }
;  
; void put_number(unsigned int dat,const unsigned char *s,signed char n)
;   {
	.dbline 326
;     signed char  i;
; 	unsigned char b=0;
	clr R10
	.dbline 327
; 	unsigned char uart[5]={0};
	ldi R24,<L157
	ldi R25,>L157
	movw R30,R28
	ldi R16,5
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 328
; 	G_N;
	sbi 0x15,4
	.dbline 329
; 	for (i=0;i<=4;i++) 
	rjmp L161
L158:
	.dbline 330
	.dbline 331
	ldi R18,10
	ldi R19,0
	movw R16,R12
	rcall mod16u
	movw R24,R16
	adiw R24,48
	movw R30,R28
	mov R26,R10
	clr R27
	sbrc R26,7
	com R27
	add R26,R30
	adc R27,R31
	st x,R24
	.dbline 332
	ldi R18,10
	ldi R19,0
	movw R16,R12
	rcall div16u
	movw R12,R16
	.dbline 333
L159:
	.dbline 329
	inc R10
L161:
	.dbline 329
	ldi R24,4
	cp R24,R10
	brge L158
	.dbline 334
;       {
;         uart[i]=dat%10+48;
; 		dat=dat/10;
;       }
; 	i=4;
	mov R10,R24
	rjmp L163
L162:
	.dbline 335
	.dbline 335
	dec R10
	.dbline 335
L163:
	.dbline 335
;   while((uart[i]==48)&&i!=0){i--;}
	movw R24,R28
	mov R30,R10
	clr R31
	sbrc R30,7
	com R31
	add R30,R24
	adc R31,R25
	ldd R24,z+0
	cpi R24,48
	brne L165
	tst R10
	brne L162
L165:
	.dbline 336
; 	for(;i>=0;i--)
	rjmp L169
X29:
	.dbline 337
; 	  { 
L170:
	.dbline 338
L171:
	.dbline 338
	sbis 0xb,5
	rjmp L170
	.dbline 339
	movw R24,R28
	mov R30,R10
	clr R31
	sbrc R30,7
	com R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0xc,R2
	.dbline 340
L167:
	.dbline 336
	dec R10
L169:
	.dbline 336
	mov R24,R10
	cpi R24,0
	brge L171
	rjmp L174
X30:
	.dbline 342
; 	    while(!(UCSRA&(1<<UDRE)));
; 	     UDR=uart[i];
; 	   }
; 	while (*s) 
;       {
L176:
	.dbline 343
L177:
	.dbline 343
	sbis 0xb,5
	rjmp L176
	.dbline 344
	movw R30,R22
	lpm R30,Z
	out 0xc,R30
	.dbline 345
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 346
L174:
	.dbline 341
	movw R30,R22
	lpm R30,Z
	tst R30
	brne L177
L179:
	.dbline 347
L180:
	.dbline 347
;         while(!(UCSRA&(1<<UDRE)));
; 	     UDR=*s;//要显示的数据存入显存
; 	       s ++;//指针加1
;       } 
; 	   while(!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L179
	.dbline 348
; 	     UDR=n;
	out 0xc,R20
	.dbline 349
; 		 G_F;
	cbi 0x15,4
	.dbline -2
L156:
	adiw R28,5
	rcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r b 10 c
	.dbsym l uart 0 A[5:5]c
	.dbsym r i 10 C
	.dbsym r n 20 C
	.dbsym r s 22 pkc
	.dbsym r dat 12 i
	.dbend
	.dbfunc e system_menu_init _system_menu_init fV
	.even
_system_menu_init::
	.dbline -1
	.dbline 353
;   }
; 
; void system_menu_init(void)
;  {
	.dbline 354
;    path=1;
	ldi R24,1
	sts _path,R24
	.dbline 355
	clr R2
	sts _path_top,R2
	rjmp L186
L183:
	.dbline 355
	.dbline 355
	.dbline 355
L184:
	.dbline 355
	lds R24,_path_top
	subi R24,255    ; addi 1
	sts _path_top,R24
L186:
	.dbline 355
;    for(path_top=0;Menu[path_top]!="#";path_top++){;}
	lds R2,_path_top
	ldi R24,2
	mul R24,R2
	movw R30,R0
	ldi R24,<_Menu
	ldi R25,>_Menu
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldi R24,<L7
	ldi R25,>L7
	cp R2,R24
	cpc R3,R25
	brne L183
	.dbline 356
; 	path_top--; //计算当前菜单的项目数
	lds R24,_path_top
	subi R24,1
	sts _path_top,R24
	.dbline -2
L182:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e system_menu _system_menu fV
;             ID -> R20
	.even
_system_menu::
	rcall push_gset1
	sbiw R28,9
	.dbline -1
	.dbline 360
;  }
;  
; void system_menu(void)
;  {
	.dbline 361
;    unsigned char ID=2;
	ldi R20,2
	.dbline 362
;      if(RunTab==ID)
	lds R2,_RunTab
	cp R2,R20
	breq X31
	rjmp L188
X31:
	.dbline 363
; 	   {
	.dbline 364
; 	    if(keyboard!=0)
	lds R2,_keyboard
	tst R2
	breq L190
	.dbline 365
; 		 {
	.dbline 366
; 	     if(keyboard==back){RunTab=1;path=1;}
	mov R24,R2
	cpi R24,8
	brne L192
	.dbline 366
	.dbline 366
	ldi R24,1
	sts _RunTab,R24
	.dbline 366
	sts _path,R24
	.dbline 366
L192:
	.dbline 367
	lds R24,_keyboard
	cpi R24,2
	brne L194
	.dbline 367
	.dbline 367
	lds R2,_path_top
	lds R3,_path
	cp R3,R2
	brsh L196
	.dbline 367
	.dbline 367
	mov R24,R3
	subi R24,255    ; addi 1
	sts _path,R24
	.dbline 367
	rjmp L197
L196:
	.dbline 367
	ldi R24,1
	sts _path,R24
L197:
	.dbline 367
; 		 if(keyboard==down){if(path<path_top){path++;}else path=1;}
L194:
	.dbline 368
	lds R24,_keyboard
	cpi R24,1
	brne L198
	.dbline 368
	.dbline 368
	ldi R24,1
	lds R2,_path
	cp R24,R2
	brsh L200
	.dbline 368
	.dbline 368
	mov R24,R2
	subi R24,1
	sts _path,R24
	.dbline 368
	rjmp L201
L200:
	.dbline 368
	lds R2,_path_top
	sts _path,R2
L201:
	.dbline 368
; 		 if(keyboard==up){if(path>1){path--;}else path=path_top;}
L198:
	.dbline 369
; 		 if(keyboard==enter){RunTab=path+10;}
	lds R24,_keyboard
	cpi R24,4
	brne L202
	.dbline 369
	.dbline 369
	lds R24,_path
	subi R24,246    ; addi 10
	sts _RunTab,R24
	.dbline 369
L202:
	.dbline 370
; 			keyboard=0;
	clr R2
	sts _keyboard,R2
	.dbline 371
; 		  }
L190:
	.dbline 372
	ldi R24,10
	std y+2,R24
	lds R2,_Menu
	lds R3,_Menu+1
	std y+1,R3
	std y+0,R2
	clr R18
	clr R16
	rcall _LCD_write_string
	.dbline 373
	ldi R24,15
	std y+2,R24
	lds R2,_path
	ldi R24,2
	mul R24,R2
	movw R30,R0
	ldi R24,<_Menu
	ldi R25,>_Menu
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	std y+1,R3
	std y+0,R2
	ldi R18,1
	clr R16
	rcall _LCD_write_string
	.dbline 374
	ldi R24,10
	std y+8,R24
	ldi R24,<L204
	ldi R25,>L204
	std y+7,R25
	std y+6,R24
	lds R2,_path_top
	clr R3
	clr R4
	clr 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,12
	rcall _LCD_write_number
	.dbline 375
	ldi R24,15
	std y+8,R24
	ldi R24,<L205
	ldi R25,>L205
	std y+7,R25
	std y+6,R24
	lds R2,_path
	clr R3
	clr R4
	clr R5
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	clr R2
	std y+0,R2
	ldi R18,2
	ldi R16,13
	rcall _LCD_write_number
	.dbline 376
L188:
	.dbline -2
L187:
	adiw R28,9
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ID 20 c
	.dbend
	.dbfunc e discharge_stop _discharge_stop fV
	.even
_discharge_stop::
	.dbline -1
	.dbline 380
; 		  LCD_write_string(0,0,Menu[0],10); 
; 		  LCD_write_string(0,1,Menu[path],15);
; 		  LCD_write_number(12,0,0,path_top,"-",10);
; 		  LCD_write_number(13,2,0,path,"",15);
; 	   }
;  }
; 
; void discharge_stop(void)
;   {
	.dbline 381
;      BT1_I_SET=0;BT1_I=0;
	clr R2
	clr R3
	sts _BT1_I_SET+1,R3
	sts _BT1_I_SET,R2
	.dbline 381
	sts _BT1_I+1,R3
	sts _BT1_I,R2
	.dbline 382
; 	 BT1_state&=~(1<<1);//已停止放电
	lds R24,_BT1_state
	andi R24,253
	sts _BT1_state,R24
	.dbline 383
; 	 BT1_state|=(1<<2);//已放完电
	ori R24,4
	sts _BT1_state,R24
	.dbline 384
; 	 PWM_OFF;R_F;
	cbi 0x17,1
	.dbline 384
	cbi 0x15,5
	.dbline 385
; 	 PWM=100;
	ldi R24,100
	ldi R25,0
	sts _PWM+1,R25
	sts _PWM,R24
	.dbline -2
L206:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e discharge_init _discharge_init fV
	.even
_discharge_init::
	.dbline -1
	.dbline 389
	.dbline 394
	rcall _T_BT1_V
	sts _BT1_V+1,R17
	sts _BT1_V,R16
	.dbline 395
	ldi R24,2000
	ldi R25,7
	cp R24,R16
	cpc R25,R17
	brsh L208
	lds R2,_BT1_state
	tst R2
	brne L208
	.dbline 396
	.dbline 397
	mov R24,R2
	ori R24,1
	sts _BT1_state,R24
	.dbline 398
	ldi R24,20
	sts _RunTab,R24
	.dbline 399
L208:
	.dbline -2
L207:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Capacitance_setting _Capacitance_setting fV
;             ID -> R20
	.even
_Capacitance_setting::
	rcall push_gset1
	sbiw R28,9
	.dbline -1
	.dbline 402
;   }
;   
; void discharge_init(void)
;   {   
;      /* PWM_ON;
;       OCR1A=700;
; 	  delay_nms(100);
; 	  PWM_OFF;*/
;       BT1_V=T_BT1_V();
; 	  if((BT1_V>2000)&&BT1_state==0)//
; 	    {
; 		  BT1_state|=(1<<0);
; 		  RunTab=20;
; 		}
;   }
; void Capacitance_setting(void)
;   {
	.dbline 403
;     unsigned char ID=20; 
	ldi R20,20
	.dbline 404
;     if(RunTab==ID)
	lds R2,_RunTab
	cp R2,R20
	breq X32
	rjmp L211
X32:
	.dbline 405
; 		  {     
	.dbline 406
; 		    if((keyboard==up)&&mAh_set<4000)
	lds R24,_keyboard
	cpi R24,1
	brne L213
	lds R24,_mAh_set
	lds R25,_mAh_set+1
	cpi R24,160
	ldi R30,15
	cpc R25,R30
	brsh L213
	.dbline 407
; 		     {keyboard=0;mAh_set+=100;}
	.dbline 407
	clr R2
	sts _keyboard,R2
	.dbline 407
	subi R24,156  ; offset = 100
	sbci R25,255
	sts _mAh_set+1,R25
	sts _mAh_set,R24
	.dbline 407
	rjmp L214
L213:
	.dbline 408
; 		    else if((keyboard==down)&&mAh_set>100)
	lds R24,_keyboard
	cpi R24,2
	brne L215
	ldi R24,100
	ldi R25,0
	lds R2,_mAh_set
	lds R3,_mAh_set+1
	cp R24,R2
	cpc R25,R3
	brsh L215
	.dbline 409
; 		     {keyboard=0;mAh_set-=100;}
	.dbline 409
	clr R2
	sts _keyboard,R2
	.dbline 409
	lds R24,_mAh_set
	lds R25,_mAh_set+1
	subi R24,100
	sbci R25,0
	sts _mAh_set+1,R25
	sts _mAh_set,R24
	.dbline 409
	rjmp L216
L215:
	.dbline 410
; 			else if(keyboard==back)
	lds R24,_keyboard
	cpi R24,8
	brne L217
	.dbline 411
; 	        { 
	.dbline 412
; 			 keyboard=0;
	clr R2
	sts _keyboard,R2
	.dbline 413
;              EEPROM_READ(0x01F0,BT1_mAh);	
	ldi R24,4
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_BT1_mAh
	ldi R19,>_BT1_mAh
	ldi R16,496
	ldi R17,1
	rcall _EEPROMReadBytes
	.dbline 414
; 	         EEPROM_READ(0x01F4,BT1_time);
	ldi R24,4
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_BT1_time
	ldi R19,>_BT1_time
	ldi R16,500
	ldi R17,1
	rcall _EEPROMReadBytes
	.dbline 415
; 			 EEPROM_READ(0x01FC,mAh_set);
	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 _EEPROMReadBytes
	.dbline 416
; 			 EEPROM_READ(0x01FE,speed);
	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 _EEPROMReadBytes
	.dbline 417
; 			 RunTab=22;
	ldi R24,22
	sts _RunTab,R24
	.dbline 418
; 	        }
	rjmp L218
L217:
	.dbline 419
; 			else if(keyboard==enter){keyboard=0;RunTab++;}
	lds R24,_keyboard
	cpi R24,4
	brne L219
	.dbline 419
	.dbline 419
	clr R2
	sts _keyboard,R2
	.dbline 419
	lds R24,_RunTab
	subi R24,255    ; addi 1
	sts _RunTab,R24
	.dbline 419
L219:
L218:
L216:
L214:
	.dbline 420
	clr R2
	std y+2,R2
	ldi R24,<L221
	ldi R25,>L221
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	rcall _LCD_write_string
	.dbline 421
	ldi R24,8
	std y+8,R24
	ldi R24,<L105
	ldi R25,>L105
	std y+7,R25
	std y+6,R24
	lds R2,_mAh_set
	lds R3,_mAh_set+1
	clr R4
	clr R5
	std y+2,R2
	std y+3,R3
	std y+4,R4
	std y+5,R5
	clr R2
	std y+0,R2
	ldi R18,1
	clr R16
	rcall _LCD_write_number
	.dbline 422
	ldi R24,15
	std y+8,R24
	ldi R24,<L99
	ldi R25,>L99
	std y+7,R25
	std y+6,R24
	lds R2,_BT1_V
	lds R3,_BT1_V+1
	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,10
	rcall _LCD_write_number
	.dbline 423
L211:
	.dbline -2
L210:
	adiw R28,9

⌨️ 快捷键说明

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