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

📄 main.s

📁 单片机 mega16L 电池放电器源码
💻 S
字号:
	.module main.c
	.area data(ram, con, rel)
_RunTab::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c
	.dbsym e RunTab _RunTab c
_sec::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c
	.dbsym e sec _sec c
_min::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c
	.dbsym e min _min c
_hour::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c
	.dbsym e hour _hour c
_mAh_set::
	.blkb 2
	.area idata
	.word 1000
	.area data(ram, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c
	.dbsym e mAh_set _mAh_set i
_speed::
	.blkb 1
	.area idata
	.byte 10
	.area data(ram, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.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\main.c
	.area text(rom, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.c
	.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
	.even
_timer2_ovf_isr::
	rcall push_lset
	.dbline -1
	.dbline 48
; //项目名称:电池放电器
; //功能描述:
; //外部模块:1602LCD    LM35
; //开发人员:书生
; //开发日期:2006年1月20日
; //*********************************************************
; #include <iom8v.h>
; #include <macros.h>
; #include "discharge.h"
; #include "eeprom.h"
; #include "LCD_1602.h"
;   unsigned char keyboard;
;   unsigned char RunTab=0;
;   unsigned char RunTab_old;
;   
;   unsigned char time;
;   unsigned char sec=0;
;   unsigned char min=0;
;   unsigned char hour=0;
;   
;   unsigned int sc_key,sc_bt1,sc_bt_ctrl,
;   sc_discharge,sc_eeprom,sc_lcd_write,
;   sc_bt1_record,sc_key_delay,sc_bt1_v_temp;
;  
;  // 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)
; {
	.dbline 49
;   TCNT2 = 0x06;//重装计时值0xFF=32us  0x00=8.192ms
	ldi R24,6
	out 0x24,R24
	.dbline 50
;   timer();//实时时钟
	rcall _timer
	.dbline 54
; /*----------------------------------
;     以下是任务管理器 
; ----------------------------------*/
;   system();//系统后台服务程序
	rcall _system
	.dbline 55
;   taskmgr();//任务管理程序
	rcall _taskmgr
	.dbline 56
;   system_clock();
	rcall _system_clock
	.dbline -2
L1:
	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 63
; }
; 
; /*----------------------------------
;     系统后台服务程序
; -----------------------------------*/
; void system(void)
; { 
	.dbline 64
;   if((sc_key_delay==0)&&(keyboard!=0)){sc_key_delay=50;}
	lds R2,_sc_key_delay
	lds R3,_sc_key_delay+1
	tst R2
	brne L3
	tst R3
	brne L3
X0:
	lds R2,_keyboard
	tst R2
	breq L3
	.dbline 64
	.dbline 64
	ldi R24,50
	ldi R25,0
	sts _sc_key_delay+1,R25
	sts _sc_key_delay,R24
	.dbline 64
L3:
	.dbline 65
;   if(sc_key_delay==1){keyboard=0;}
	lds R24,_sc_key_delay
	lds R25,_sc_key_delay+1
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	brne L5
	.dbline 65
	.dbline 65
	clr R2
	sts _keyboard,R2
	.dbline 65
L5:
	.dbline 66
;   if(sc_key==0)
	lds R2,_sc_key
	lds R3,_sc_key+1
	tst R2
	brne L7
	tst R3
	brne L7
X1:
	.dbline 67
;     {keyboard=key(keyboard);sc_key=16;}//键盘扫描间隔为32*8ms
	.dbline 67
	lds R16,_keyboard
	rcall _key
	sts _keyboard,R16
	.dbline 67
	ldi R24,16
	ldi R25,0
	sts _sc_key+1,R25
	sts _sc_key,R24
	.dbline 67
L7:
	.dbline 69
;  
;   if(sc_lcd_write==0)
	lds R2,_sc_lcd_write
	lds R3,_sc_lcd_write+1
	tst R2
	brne L9
	tst R3
	brne L9
X2:
	.dbline 70
;    {
	.dbline 71
;     desktop1();desktop2();desktop3();desktop4();
	rcall _desktop1
	.dbline 71
	rcall _desktop2
	.dbline 71
	rcall _desktop3
	.dbline 71
	rcall _desktop4
	.dbline 72
; 	Capacitance_setting();discharge_speed();
	rcall _Capacitance_setting
	.dbline 72
	rcall _discharge_speed
	.dbline 73
; 	record_setting();welcome();
	rcall _record_setting
	.dbline 73
	rcall _welcome
	.dbline 74
; 	LCD_write_new();
	rcall _LCD_write_new
	.dbline 75
; 	sc_lcd_write=32;
	ldi R24,32
	ldi R25,0
	sts _sc_lcd_write+1,R25
	sts _sc_lcd_write,R24
	.dbline 76
; 	}
L9:
	.dbline 77
; 	if(BT1_I_SET)
	lds R2,_BT1_I_SET
	lds R3,_BT1_I_SET+1
	tst R2
	brne X3
	tst R3
	brne X10
	rjmp L11
X10:
X3:
	.dbline 78
; 	{
	.dbline 79
;  if(sc_bt1==0)
	lds R2,_sc_bt1
	lds R3,_sc_bt1+1
	tst R2
	brne L13
	tst R3
	brne L13
X4:
	.dbline 80
;   {BT1_mAh+=BT1_I;sc_bt1=450;}//容量统计,每3.6秒计一次
	.dbline 80
	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 80
	ldi R24,450
	ldi R25,1
	sts _sc_bt1+1,R25
	sts _sc_bt1,R24
	.dbline 80
L13:
	.dbline 81
;  if(sc_discharge==0)
	lds R2,_sc_discharge
	lds R3,_sc_discharge+1
	tst R2
	brne L15
	tst R3
	brne L15
X5:
	.dbline 82
;   {BT1_time++;sc_discharge=125;}//放电时间统计
	.dbline 82
	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 82
	ldi R24,125
	ldi R25,0
	sts _sc_discharge+1,R25
	sts _sc_discharge,R24
	.dbline 82
L15:
	.dbline 83
;  if(sc_eeprom==0) 
	lds R2,_sc_eeprom
	lds R3,_sc_eeprom+1
	tst R2
	brne L17
	tst R3
	brne L17
X6:
	.dbline 84
;   {
	.dbline 85
;    if(BT1_V<2000)
	lds R24,_BT1_V
	lds R25,_BT1_V+1
	cpi R24,208
	ldi R30,7
	cpc R25,R30
	brsh L19
	.dbline 86
; 	{discharge_stop();} 
	.dbline 86
	rcall _discharge_stop
	.dbline 86
L19:
	.dbline 87
;     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 88
;     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 89
;     sc_eeprom=1250;
	ldi R24,1250
	ldi R25,4
	sts _sc_eeprom+1,R25
	sts _sc_eeprom,R24
	.dbline 90
; 	}
L17:
	.dbline 91
;   if(sc_bt_ctrl==0)
	lds R2,_sc_bt_ctrl
	lds R3,_sc_bt_ctrl+1
	tst R2
	brne L21
	tst R3
	brne L21
X7:
	.dbline 92
;     {
	.dbline 93
; 	 BT1_I_Ctrl();
	rcall _BT1_I_Ctrl
	.dbline 94
;       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 L25
	lds R24,_BT1_I_SET
	lds R25,_BT1_I_SET+1
	sbiw R24,5
	cp R2,R24
	cpc R3,R25
	brsh L23
L25:
	.dbline 95
; 	    sc_bt_ctrl=2;
	ldi R24,2
	ldi R25,0
	sts _sc_bt_ctrl+1,R25
	sts _sc_bt_ctrl,R24
	rjmp L24
L23:
	.dbline 96
; 		else sc_bt_ctrl=48;
	ldi R24,48
	ldi R25,0
	sts _sc_bt_ctrl+1,R25
	sts _sc_bt_ctrl,R24
L24:
	.dbline 97
; 	 }
L21:
	.dbline 98
;   }
L11:
	.dbline 99
;   if(sc_bt1_v_temp==0)
	lds R2,_sc_bt1_v_temp
	lds R3,_sc_bt1_v_temp+1
	tst R2
	brne L26
	tst R3
	brne L26
X8:
	.dbline 100
;     {bt1_v_temp+=BT1_V;sc_bt1_v_temp=500;}
	.dbline 100
	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 100
	ldi R24,500
	ldi R25,1
	sts _sc_bt1_v_temp+1,R25
	sts _sc_bt1_v_temp,R24
	.dbline 100
L26:
	.dbline 101
	lds R2,_sc_bt1_record
	lds R3,_sc_bt1_record+1
	tst R2
	brne L28
	tst R3
	brne L28
X9:
	.dbline 102
	.dbline 102
	rcall _bt1_v_record
	.dbline 102
	ldi R24,7500
	ldi R25,29
	sts _sc_bt1_record+1,R25
	sts _sc_bt1_record,R24
	.dbline 102
L28:
	.dbline -2
L2:
	adiw R28,2
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e taskmgr _taskmgr fV
	.even
_taskmgr::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e system_clock _system_clock fV
	.even
_system_clock::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e bt1_v_record _bt1_v_record fV
	.even
_bt1_v_record::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e welcome _welcome fV
	.even
_welcome::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e discharge_stop _discharge_stop fV
	.even
_discharge_stop::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e discharge_init _discharge_init fV
	.even
_discharge_init::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Capacitance_setting _Capacitance_setting fV
	.even
_Capacitance_setting::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e discharge_speed _discharge_speed fV
	.even
_discharge_speed::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e record_setting _record_setting fV
	.even
_record_setting::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e discharge _discharge fV
	.even
_discharge::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e desktop2 _desktop2 fV
	.even
_desktop2::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e desktop1 _desktop1 fV
	.even
_desktop1::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e desktop3 _desktop3 fV
	.even
_desktop3::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e desktop4 _desktop4 fV
	.even
_desktop4::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e BT1_I_Ctrl _BT1_I_Ctrl fV
	.even
_BT1_I_Ctrl::
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer _timer fV
	.even
_timer::
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\main.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_key_delay::
	.blkb 2
	.dbsym e sc_key_delay _sc_key_delay i
_sc_bt1_record::
	.blkb 2
	.dbsym e sc_bt1_record _sc_bt1_record i
_sc_lcd_write::
	.blkb 2
	.dbsym e sc_lcd_write _sc_lcd_write i
_sc_eeprom::
	.blkb 2
	.dbsym e sc_eeprom _sc_eeprom i
_sc_discharge::
	.blkb 2
	.dbsym e sc_discharge _sc_discharge 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::
	.blkb 2
	.dbsym e sc_key _sc_key i
_time::
	.blkb 1
	.dbsym e time _time c
_RunTab_old::
	.blkb 1
	.dbsym e RunTab_old _RunTab_old c
_keyboard::
	.blkb 1
	.dbsym e keyboard _keyboard c
	.area lit(rom, con, rel)
L129:
	.byte 'P,'W,'M,0
L128:
	.byte 'F,'i,'n,'i,'s,'h,0
L116:
	.byte 'm,'W,0
L115:
	.byte 's,'e,'c,0
L94:
	.byte 'A,0
L93:
	.byte 'C,0
L92:
	.byte 'm,'i,'n,0
L91:
	.byte 's,'p,'e,'e,'d,0
L87:
	.byte 'V,0
L86:
	.byte 'm,'A,'h,0
L85:
	.byte 'C,'a,'p,'a,'c,'i,'t,'a,'n,'c,'e,0
L71:
	.byte 'D,'i,'s,'c,'h,'a,'r,'g,'e,'r,32,'x,'p,0
L70:
	.byte 'W,'e,'l,'c,'o,'m,'e,0

⌨️ 快捷键说明

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