📄 discharger.s
字号:
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 + -