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