📄 discharger.s
字号:
.module discharger.c
.area data(ram, con, rel)
_Menu::
.blkw 1
.area idata
.word L1
.area data(ram, con, rel)
.blkw 1
.area idata
.word L2
.area data(ram, con, rel)
.blkw 1
.area idata
.word L3
.area data(ram, con, rel)
.blkw 1
.area idata
.word L4
.area data(ram, con, rel)
.blkw 1
.area idata
.word L5
.area data(ram, con, rel)
.blkw 1
.area idata
.word L6
.area data(ram, con, rel)
.blkw 1
.area idata
.word L7
.area data(ram, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
.dbsym e Menu _Menu A[14:7]pkc
_sec::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
.dbsym e sec _sec c
_min::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
.dbsym e min _min c
_hour::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
.dbsym e hour _hour c
_RunTab::
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
.dbsym e RunTab _RunTab c
_mAh_set::
.blkb 2
.area idata
.word 1000
.area data(ram, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
.dbsym e mAh_set _mAh_set i
_speed::
.blkb 1
.area idata
.byte 10
.area data(ram, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
.dbsym e speed _speed c
.area vector(rom, abs)
.org 8
rjmp _timer2_ovf_isr
.area data(ram, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
.area text(rom, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
.even
_timer2_ovf_isr::
rcall push_lset
.dbline -1
.dbline 63
.dbline 64
ldi R24,6
out 0x24,R24
.dbline 65
rcall _system_clock
.dbline 66
rcall _system
.dbline 68
lds R2,_RunTab
lds R3,_RunTab_old
cp R3,R2
breq L9
.dbline 69
.dbline 69
rcall _LCD_clear
.dbline 69
lds R2,_RunTab
sts _RunTab_old,R2
.dbline 69
L9:
.dbline -2
L8:
rcall pop_lset
.dbline 0 ; func end
reti
.dbend
.dbfunc e system _system fV
.even
_system::
rcall push_gset2
sbiw R28,2
.dbline -1
.dbline 75
; //项目名称:电池容量测试器V2.0
; //功能描述:通过对电池放电,测量出电池的容量
; //外部模块:1602LCD
; //开发人员:李卓生
; //开发日期:2006年2月16日
; //最后修正: 2006年2月27日
; //*********************************************************
; #include <iom8v.h>
; #include <macros.h>
; #include "discharge.h"
; #include "LCD_1602.h"
; #include "eeprom.h"
;
; #define key_delay 64
; #define keyboard_scan 16
; #define lcd_write 32
; #define timer_dealy 125
;
; const char *Menu[]=//系统菜单
; {"Menu","Discharging","D882","Record","Clear","USART","#"};
;
; unsigned char path_top,path;
; //系统参数
; unsigned char sec=0;
; unsigned char min=0;
; unsigned char hour=0;
; unsigned char keyboard;
; unsigned char RunTab=1;
; unsigned char RunTab_old;
;
; unsigned char sc_timer_dealy,sc_keyboard_scan,sc_lcd_write,sc_key_delay;//定时小于255*31.25ms的
; unsigned int sc_bt1,sc_bt_ctrl,sc_eeprom,sc_discharge,sc_bt1_record,sc_bt1_v_temp;
; /*//LED灯控制参数
; unsigned int G_led,G_led_cy,G_led_ht;
; unsigned int sc_G_cy,sc_G_ht;
;
; unsigned int R_led,R_led_cy,R_led_ht;
; unsigned int sc_R_cy,sc_R_ht;
; */
; // discharge
; unsigned char BT1_state;
; unsigned int BT1_V;
; unsigned int BT1_I;
; unsigned int BT1_T;
; unsigned int BT1_V_num;
; unsigned int BT1_V_num_temp;
; unsigned int bt1_v_temp;
; unsigned int bt1_v_temp_1;
;
; unsigned int BT1_I_SET;
; unsigned int PWM;
; unsigned long BT1_mAh;
; unsigned long BT1_time;
; unsigned int mAh;
; unsigned int D882_P;
;
; unsigned int mAh_set=1000;
; unsigned char speed=10;
; unsigned int BT1_P;
; //T2溢出中断服务程序 8ms
; #pragma interrupt_handler timer2_ovf_isr:5
; void timer2_ovf_isr(void)
; {
; TCNT2 = 0x06;//重装计时值0xFF=32us 0x00=8.192ms
; system_clock();//系统定时器
; system();//系统后台服务程序
; //Green_led(); Red_led();
; if(RunTab_old!=RunTab)
; {LCD_clear();RunTab_old=RunTab;}
; }
; /*----------------------------------
; 系统后台服务程序
; -----------------------------------*/
; void system(void)
; {
.dbline 76
; if(sc_timer_dealy==0){timer(); sc_timer_dealy=timer_dealy;}
lds R2,_sc_timer_dealy
tst R2
brne L12
.dbline 76
.dbline 76
rcall _timer
.dbline 76
ldi R24,125
sts _sc_timer_dealy,R24
.dbline 76
L12:
.dbline 77
; if((sc_key_delay==0)&&(keyboard!=0)){sc_key_delay=key_delay;}
lds R2,_sc_key_delay
tst R2
brne L14
lds R2,_keyboard
tst R2
breq L14
.dbline 77
.dbline 77
ldi R24,64
sts _sc_key_delay,R24
.dbline 77
L14:
.dbline 78
; if(sc_key_delay==1){keyboard=0;}
lds R24,_sc_key_delay
cpi R24,1
brne L16
.dbline 78
.dbline 78
clr R2
sts _keyboard,R2
.dbline 78
L16:
.dbline 79
; if(sc_keyboard_scan==0)
lds R2,_sc_keyboard_scan
tst R2
brne L18
.dbline 80
; {keyboard=key(keyboard);sc_keyboard_scan=keyboard_scan;}
.dbline 80
lds R16,_keyboard
rcall _key
sts _keyboard,R16
.dbline 80
ldi R24,16
sts _sc_keyboard_scan,R24
.dbline 80
L18:
.dbline 81
; if(sc_lcd_write==0)
lds R2,_sc_lcd_write
tst R2
brne L20
.dbline 82
; {Run_Turn();LCD_write_new();sc_lcd_write=lcd_write;}
.dbline 82
rcall _Run_Turn
.dbline 82
rcall _LCD_write_new
.dbline 82
ldi R24,32
sts _sc_lcd_write,R24
.dbline 82
L20:
.dbline 84
;
; if((BT1_I_SET)/*&&(sc_bt1_record==0)*/)
lds R2,_BT1_I_SET
lds R3,_BT1_I_SET+1
tst R2
brne X0
tst R3
brne X7
rjmp L22
X7:
X0:
.dbline 85
; {
.dbline 86
; if(sc_bt1==0)
lds R2,_sc_bt1
lds R3,_sc_bt1+1
tst R2
brne L24
tst R3
brne L24
X1:
.dbline 87
; {BT1_mAh+=BT1_I;sc_bt1=450;}//容量统计,每3.6秒计一次
.dbline 87
lds R2,_BT1_I
lds R3,_BT1_I+1
clr R4
clr R5
lds R8,_BT1_mAh+2
lds R9,_BT1_mAh+2+1
lds R6,_BT1_mAh
lds R7,_BT1_mAh+1
add R6,R2
adc R7,R3
adc R8,R4
adc R9,R5
sts _BT1_mAh+1,R7
sts _BT1_mAh,R6
sts _BT1_mAh+2+1,R9
sts _BT1_mAh+2,R8
.dbline 87
ldi R24,450
ldi R25,1
sts _sc_bt1+1,R25
sts _sc_bt1,R24
.dbline 87
L24:
.dbline 88
; if(sc_discharge==0)
lds R2,_sc_discharge
lds R3,_sc_discharge+1
tst R2
brne L26
tst R3
brne L26
X2:
.dbline 89
; {BT1_time++;sc_discharge=125;}//放电时间统计
.dbline 89
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
lds R4,_BT1_time+2
lds R5,_BT1_time+2+1
lds R2,_BT1_time
lds R3,_BT1_time+1
add R2,R20
adc R3,R21
adc R4,R22
adc R5,R23
sts _BT1_time+1,R3
sts _BT1_time,R2
sts _BT1_time+2+1,R5
sts _BT1_time+2,R4
.dbline 89
ldi R24,125
ldi R25,0
sts _sc_discharge+1,R25
sts _sc_discharge,R24
.dbline 89
L26:
.dbline 90
; if(sc_bt1_v_temp==0)
lds R2,_sc_bt1_v_temp
lds R3,_sc_bt1_v_temp+1
tst R2
brne L28
tst R3
brne L28
X3:
.dbline 91
; {bt1_v_temp+=BT1_V;sc_bt1_v_temp=500;}
.dbline 91
lds R2,_BT1_V
lds R3,_BT1_V+1
lds R4,_bt1_v_temp
lds R5,_bt1_v_temp+1
add R4,R2
adc R5,R3
sts _bt1_v_temp+1,R5
sts _bt1_v_temp,R4
.dbline 91
ldi R24,500
ldi R25,1
sts _sc_bt1_v_temp+1,R25
sts _sc_bt1_v_temp,R24
.dbline 91
L28:
.dbline 92
; if(sc_bt1_record==0)
lds R2,_sc_bt1_record
lds R3,_sc_bt1_record+1
tst R2
brne L30
tst R3
brne L30
X4:
.dbline 93
; {bt1_v_record();sc_bt1_record=7500;}//每分钟记录一次电压
.dbline 93
rcall _bt1_v_record
.dbline 93
ldi R24,7500
ldi R25,29
sts _sc_bt1_record+1,R25
sts _sc_bt1_record,R24
.dbline 93
L30:
.dbline 94
; if(sc_eeprom==0)
lds R2,_sc_eeprom
lds R3,_sc_eeprom+1
tst R2
brne L32
tst R3
brne L32
X5:
.dbline 95
; {
.dbline 96
; if(BT1_V<2000)
lds R24,_BT1_V
lds R25,_BT1_V+1
cpi R24,208
ldi R30,7
cpc R25,R30
brsh L34
.dbline 97
; {discharge_stop();}
.dbline 97
rcall _discharge_stop
.dbline 97
L34:
.dbline 98
; EEPROM_WRITE(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 _EEPROMWriteBytes
.dbline 99
; EEPROM_WRITE(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 _EEPROMWriteBytes
.dbline 100
; sc_eeprom=1250;//每10秒保存一次
ldi R24,1250
ldi R25,4
sts _sc_eeprom+1,R25
sts _sc_eeprom,R24
.dbline 101
; }
L32:
.dbline 102
; }
L22:
.dbline 103
; if(sc_bt_ctrl==0)
lds R2,_sc_bt_ctrl
lds R3,_sc_bt_ctrl+1
tst R2
brne L36
tst R3
brne L36
X6:
.dbline 104
; {
.dbline 105
; BT1_I_Ctrl();
rcall _BT1_I_Ctrl
.dbline 106
; if((BT1_I>BT1_I_SET+5)||(BT1_I<BT1_I_SET-5))
lds R24,_BT1_I_SET
lds R25,_BT1_I_SET+1
adiw R24,5
lds R2,_BT1_I
lds R3,_BT1_I+1
cp R24,R2
cpc R25,R3
brlo L40
lds R24,_BT1_I_SET
lds R25,_BT1_I_SET+1
sbiw R24,5
cp R2,R24
cpc R3,R25
brsh L38
L40:
.dbline 107
; sc_bt_ctrl=2;//PWM高速调节
ldi R24,2
ldi R25,0
sts _sc_bt_ctrl+1,R25
sts _sc_bt_ctrl,R24
rjmp L39
L38:
.dbline 108
; else sc_bt_ctrl=48;//PWM低速调节
ldi R24,48
ldi R25,0
sts _sc_bt_ctrl+1,R25
sts _sc_bt_ctrl,R24
L39:
.dbline 109
L36:
.dbline -2
L11:
adiw R28,2
rcall pop_gset2
.dbline 0 ; func end
ret
.dbend
.dbfunc e system_clock _system_clock fV
.even
_system_clock::
.dbline -1
.dbline 113
; }
; }
;
; void system_clock(void)
; { //每个节拍为8ms
.dbline 114
; if(sc_timer_dealy!=0) sc_timer_dealy--;
lds R2,_sc_timer_dealy
tst R2
breq L42
.dbline 114
mov R24,R2
subi R24,1
sts _sc_timer_dealy,R24
L42:
.dbline 115
; if(sc_keyboard_scan!=0) sc_keyboard_scan--;
lds R2,_sc_keyboard_scan
tst R2
breq L44
.dbline 115
mov R24,R2
subi R24,1
sts _sc_keyboard_scan,R24
L44:
.dbline 116
; if(sc_key_delay!=0) sc_key_delay--;
lds R2,_sc_key_delay
tst R2
breq L46
.dbline 116
mov R24,R2
subi R24,1
sts _sc_key_delay,R24
L46:
.dbline 117
; if(sc_lcd_write!=0) sc_lcd_write--;
lds R2,_sc_lcd_write
tst R2
breq L48
.dbline 117
mov R24,R2
subi R24,1
sts _sc_lcd_write,R24
L48:
.dbline 124
; /*
; if(sc_G_ht!=0) sc_G_ht--;
; if(sc_G_cy!=0) sc_G_cy--;
; if(sc_R_ht!=0) sc_R_ht--;
; if(sc_R_cy!=0) sc_R_cy--;
; */
; if(sc_bt1!=0) sc_bt1--;
lds R2,_sc_bt1
lds R3,_sc_bt1+1
tst R2
brne X8
tst R3
breq L50
X8:
.dbline 124
lds R24,_sc_bt1
lds R25,_sc_bt1+1
sbiw R24,1
sts _sc_bt1+1,R25
sts _sc_bt1,R24
L50:
.dbline 125
; if(sc_discharge!=0) sc_discharge--;
lds R2,_sc_discharge
lds R3,_sc_discharge+1
tst R2
brne X9
tst R3
breq L52
X9:
.dbline 125
lds R24,_sc_discharge
lds R25,_sc_discharge+1
sbiw R24,1
sts _sc_discharge+1,R25
sts _sc_discharge,R24
L52:
.dbline 126
; if(sc_eeprom!=0) sc_eeprom--;
lds R2,_sc_eeprom
lds R3,_sc_eeprom+1
tst R2
brne X10
tst R3
breq L54
X10:
.dbline 126
lds R24,_sc_eeprom
lds R25,_sc_eeprom+1
sbiw R24,1
sts _sc_eeprom+1,R25
sts _sc_eeprom,R24
L54:
.dbline 127
; if(sc_bt1_record!=0) sc_bt1_record--;
lds R2,_sc_bt1_record
lds R3,_sc_bt1_record+1
tst R2
brne X11
tst R3
breq L56
X11:
.dbline 127
lds R24,_sc_bt1_record
lds R25,_sc_bt1_record+1
sbiw R24,1
sts _sc_bt1_record+1,R25
sts _sc_bt1_record,R24
L56:
.dbline 128
; if(sc_bt1_v_temp!=0) sc_bt1_v_temp--;
lds R2,_sc_bt1_v_temp
lds R3,_sc_bt1_v_temp+1
tst R2
brne X12
tst R3
breq L58
X12:
.dbline 128
lds R24,_sc_bt1_v_temp
lds R25,_sc_bt1_v_temp+1
sbiw R24,1
sts _sc_bt1_v_temp+1,R25
sts _sc_bt1_v_temp,R24
L58:
.dbline 129
lds R2,_sc_bt_ctrl
lds R3,_sc_bt_ctrl+1
tst R2
brne X13
tst R3
breq L60
X13:
.dbline 129
lds R24,_sc_bt_ctrl
lds R25,_sc_bt_ctrl+1
sbiw R24,1
sts _sc_bt_ctrl+1,R25
sts _sc_bt_ctrl,R24
L60:
.dbline -2
L41:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Run_Turn _Run_Turn fV
.even
_Run_Turn::
rcall push_gset1
.dbline -1
.dbline 136
; if(sc_bt_ctrl!=0) sc_bt_ctrl--;
; }
;
; /*----------------------------------
; 任务调度程序
; ----------------------------------*/
; void Run_Turn(void)
; {
.dbline 138
;
; switch(RunTab)
lds R20,_RunTab
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L66
cpi R20,2
ldi R30,0
cpc R21,R30
breq L67
cpi R20,1
ldi R30,0
cpc R21,R30
brge X15
rjmp L63
X15:
L76:
cpi R20,11
ldi R30,0
cpc R21,R30
breq L68
cpi R20,12
ldi R30,0
cpc R21,R30
breq L69
cpi R20,13
ldi R30,0
cpc R21,R30
breq L70
cpi R20,14
ldi R30,0
cpc R21,R30
breq L71
cpi R20,15
ldi R30,0
cpc R21,R30
breq L72
cpi R20,20
ldi R30,0
cpc R21,R30
breq L73
cpi R20,21
ldi R30,0
cpc R21,R30
breq L74
cpi R20,22
ldi R30,0
cpc R21,R30
breq L75
rjmp L63
X14:
.dbline 139
; {
L66:
.dbline 140
; case 1:desktop();break;
rcall _desktop
.dbline 140
rjmp L64
L67:
.dbline 141
; case 2:system_menu();break;
rcall _system_menu
.dbline 141
rjmp L64
L68:
.dbline 142
; case 11:Discharging();break;
rcall _Discharging
.dbline 142
rjmp L64
L69:
.dbline 143
; case 12:D882();break;
rcall _D882
.dbline 143
rjmp L64
L70:
.dbline 144
; case 13:Record();break;
rcall _Record
.dbline 144
rjmp L64
L71:
.dbline 145
; case 14:Clear();break;
rcall _Clear
.dbline 145
rjmp L64
L72:
.dbline 146
; case 15:usart();break;
rcall _usart
.dbline 146
rjmp L64
L73:
.dbline 147
; case 20:Capacitance_setting();break;
rcall _Capacitance_setting
.dbline 147
rjmp L64
L74:
.dbline 148
; case 21:discharge_speed();break;
rcall _discharge_speed
.dbline 148
rjmp L64
L75:
.dbline 149
; case 22:record_setting();break;
rcall _record_setting
.dbline 149
L63:
L64:
.dbline -2
L62:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbend
.dbfunc e bt1_v_record _bt1_v_record fV
.even
_bt1_v_record::
sbiw R28,2
.dbline -1
.dbline 154
; }
; }
;
; void bt1_v_record(void)
; {
.dbline 155
; bt1_v_temp/=15;
ldi R18,15
ldi R19,0
lds R16,_bt1_v_temp
lds R17,_bt1_v_temp+1
rcall div16u
sts _bt1_v_temp+1,R17
sts _bt1_v_temp,R16
.dbline 156
; EEPROM_READ(0x01F8,BT1_V_num);
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_BT1_V_num
ldi R19,>_BT1_V_num
ldi R16,504
ldi R17,1
rcall _EEPROMReadBytes
.dbline 157
; EEPROM_WRITE(BT1_V_num*2,bt1_v_temp);
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_bt1_v_temp
ldi R19,>_bt1_v_temp
lds R2,_BT1_V_num
lds R3,_BT1_V_num+1
ldi R16,2
ldi R17,0
push R18
push R19
movw R18,R2
rcall empy16s
pop R19
pop R18
rcall _EEPROMWriteBytes
.dbline 158
; put_number(BT1_V_num," ",' ');
ldi R24,32
std y+0,R24
ldi R18,<L78
ldi R19,>L78
lds R16,_BT1_V_num
lds R17,_BT1_V_num+1
rcall _put_number
.dbline 159
; put_number(bt1_v_temp," mV",'\n');
ldi R24,10
std y+0,R24
ldi R18,<L79
ldi R19,>L79
lds R16,_bt1_v_temp
lds R17,_bt1_v_temp+1
rcall _put_number
.dbline 160
; if(BT1_V_num<249)
lds R24,_BT1_V_num
lds R25,_BT1_V_num+1
cpi R24,249
ldi R30,0
cpc R25,R30
brsh L80
.dbline 161
; {BT1_V_num++;EEPROM_WRITE(0x01F8,BT1_V_num);}
.dbline 161
adiw R24,1
sts _BT1_V_num+1,R25
sts _BT1_V_num,R24
.dbline 161
ldi R24,2
ldi R25,0
std y+1,R25
std y+0,R24
ldi R18,<_BT1_V_num
ldi R19,>_BT1_V_num
ldi R16,504
ldi R17,1
rcall _EEPROMWriteBytes
.dbline 161
L80:
.dbline 163
;
; bt1_v_temp=0;
clr R2
clr R3
sts _bt1_v_temp+1,R3
sts _bt1_v_temp,R2
.dbline -2
L77:
adiw R28,2
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 169
; }
; /*------------------------------------
; 主程序
; -------------------------------------*/
; void main(void)
; {
.dbline 170
; init_devices();
rcall _init_devices
.dbline 171
; system_menu_init();
rcall _system_menu_init
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -