📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000000 00800100 00000480 00000514 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 00000480 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 00000013 00800100 00800100 00000514 2**0
ALLOC
3 .noinit 00000000 00800113 00800113 00000514 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000514 2**0
CONTENTS
5 .stab 0000036c 00000000 00000000 00000514 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 00000880 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 0000003c 00000000 00000000 00000904 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 000001a5 00000000 00000000 00000940 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 000004d0 00000000 00000000 00000ae5 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 00000212 00000000 00000000 00000fb5 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 00000596 00000000 00000000 000011c7 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 00000168 00000000 00000000 0000175d 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 19 c0 rjmp .+50 ; 0x34 <__ctors_end>
2: 32 c0 rjmp .+100 ; 0x68 <__bad_interrupt>
4: 31 c0 rjmp .+98 ; 0x68 <__bad_interrupt>
6: 30 c0 rjmp .+96 ; 0x68 <__bad_interrupt>
8: 2f c0 rjmp .+94 ; 0x68 <__bad_interrupt>
a: 2e c0 rjmp .+92 ; 0x68 <__bad_interrupt>
c: 2d c0 rjmp .+90 ; 0x68 <__bad_interrupt>
e: 2c c0 rjmp .+88 ; 0x68 <__bad_interrupt>
10: 2b c0 rjmp .+86 ; 0x68 <__bad_interrupt>
12: 2a c0 rjmp .+84 ; 0x68 <__bad_interrupt>
14: 29 c0 rjmp .+82 ; 0x68 <__bad_interrupt>
16: 28 c0 rjmp .+80 ; 0x68 <__bad_interrupt>
18: 27 c0 rjmp .+78 ; 0x68 <__bad_interrupt>
1a: ef c0 rjmp .+478 ; 0x1fa <__vector_13>
1c: 25 c0 rjmp .+74 ; 0x68 <__bad_interrupt>
1e: 24 c0 rjmp .+72 ; 0x68 <__bad_interrupt>
20: 23 c0 rjmp .+70 ; 0x68 <__bad_interrupt>
22: 22 c0 rjmp .+68 ; 0x68 <__bad_interrupt>
24: 21 c0 rjmp .+66 ; 0x68 <__bad_interrupt>
26: 20 c0 rjmp .+64 ; 0x68 <__bad_interrupt>
28: 1f c0 rjmp .+62 ; 0x68 <__bad_interrupt>
2a: 1e c0 rjmp .+60 ; 0x68 <__bad_interrupt>
2c: 1d c0 rjmp .+58 ; 0x68 <__bad_interrupt>
2e: 1c c0 rjmp .+56 ; 0x68 <__bad_interrupt>
30: 1b c0 rjmp .+54 ; 0x68 <__bad_interrupt>
32: 1a c0 rjmp .+52 ; 0x68 <__bad_interrupt>
00000034 <__ctors_end>:
34: 11 24 eor r1, r1
36: 1f be out 0x3f, r1 ; 63
38: cf ef ldi r28, 0xFF ; 255
3a: d2 e0 ldi r29, 0x02 ; 2
3c: de bf out 0x3e, r29 ; 62
3e: cd bf out 0x3d, r28 ; 61
00000040 <__do_copy_data>:
40: 11 e0 ldi r17, 0x01 ; 1
42: a0 e0 ldi r26, 0x00 ; 0
44: b1 e0 ldi r27, 0x01 ; 1
46: e0 e8 ldi r30, 0x80 ; 128
48: f4 e0 ldi r31, 0x04 ; 4
4a: 02 c0 rjmp .+4 ; 0x50 <.do_copy_data_start>
0000004c <.do_copy_data_loop>:
4c: 05 90 lpm r0, Z+
4e: 0d 92 st X+, r0
00000050 <.do_copy_data_start>:
50: a0 30 cpi r26, 0x00 ; 0
52: b1 07 cpc r27, r17
54: d9 f7 brne .-10 ; 0x4c <.do_copy_data_loop>
00000056 <__do_clear_bss>:
56: 11 e0 ldi r17, 0x01 ; 1
58: a0 e0 ldi r26, 0x00 ; 0
5a: b1 e0 ldi r27, 0x01 ; 1
5c: 01 c0 rjmp .+2 ; 0x60 <.do_clear_bss_start>
0000005e <.do_clear_bss_loop>:
5e: 1d 92 st X+, r1
00000060 <.do_clear_bss_start>:
60: a3 31 cpi r26, 0x13 ; 19
62: b1 07 cpc r27, r17
64: e1 f7 brne .-8 ; 0x5e <.do_clear_bss_loop>
66: 67 c1 rjmp .+718 ; 0x336 <main>
00000068 <__bad_interrupt>:
68: cb cf rjmp .-106 ; 0x0 <__vectors>
0000006a <timer1_init>:
----------------------------------------------------------------*/
void timer1_init(void)
{
TCCR1B = 0x00; //stop
6a: 10 92 81 00 sts 0x0081, r1
TCNT1H = 0x63; //setup
6e: 83 e6 ldi r24, 0x63 ; 99
70: 80 93 85 00 sts 0x0085, r24
TCNT1L = 0xC0;
74: 80 ec ldi r24, 0xC0 ; 192
76: 80 93 84 00 sts 0x0084, r24
TCCR1A = 0x00;
7a: 10 92 80 00 sts 0x0080, r1
TCCR1B = 0x01; //start Timer
7e: 81 e0 ldi r24, 0x01 ; 1
80: 80 93 81 00 sts 0x0081, r24
84: 08 95 ret
00000086 <timer2_init>:
}
void timer2_init(void) // PWM
{
TCCR2B = 0x00; //stop
86: 10 92 b1 00 sts 0x00B1, r1
ASSR = 0x00; //set async mode
8a: 10 92 b6 00 sts 0x00B6, r1
TCNT2 = 0x01; //setup
8e: 81 e0 ldi r24, 0x01 ; 1
90: 80 93 b2 00 sts 0x00B2, r24
OCR2A = 0x7F;
94: 8f e7 ldi r24, 0x7F ; 127
96: 80 93 b3 00 sts 0x00B3, r24
OCR2B = 0x00;
9a: 10 92 b4 00 sts 0x00B4, r1
TCCR2A = 0xC3;
9e: 83 ec ldi r24, 0xC3 ; 195
a0: 80 93 b0 00 sts 0x00B0, r24
a4: 08 95 ret
000000a6 <init_devices>:
}
void init_devices(void)
{
asm("cli");
a6: f8 94 cli
DDRB = 0xFF;
a8: 8f ef ldi r24, 0xFF ; 255
aa: 84 b9 out 0x04, r24 ; 4
PORTB = 0x30;
ac: 80 e3 ldi r24, 0x30 ; 48
ae: 85 b9 out 0x05, r24 ; 5
DDRC = 0x00;
b0: 17 b8 out 0x07, r1 ; 7
PORTC = 0x00;
b2: 18 b8 out 0x08, r1 ; 8
DDRD = 0x3F;
b4: 8f e3 ldi r24, 0x3F ; 63
b6: 8a b9 out 0x0a, r24 ; 10
PORTD = 0xC0;
b8: 80 ec ldi r24, 0xC0 ; 192
ba: 8b b9 out 0x0b, r24 ; 11
adc_int();
bc: 7c d1 rcall .+760 ; 0x3b6 <adc_int>
timer0_init();
be: cf d1 rcall .+926 ; 0x45e <timer0_init>
timer1_init();
c0: d4 df rcall .-88 ; 0x6a <timer1_init>
timer2_init();
c2: e1 df rcall .-62 ; 0x86 <timer2_init>
MCUCR = 0x00;
c4: 15 be out 0x35, r1 ; 53
EICRA = 0x00; //extended ext ints
c6: 10 92 69 00 sts 0x0069, r1
EIMSK = 0x00;
ca: 1d ba out 0x1d, r1 ; 29
TIMSK0 = 0x00; //timer 0 interrupt sources
cc: 10 92 6e 00 sts 0x006E, r1
TIMSK1 = 0x01; //timer 1 interrupt sources
d0: 81 e0 ldi r24, 0x01 ; 1
d2: 80 93 6f 00 sts 0x006F, r24
TIMSK2 = 0x00; //timer 2 interrupt sources
d6: 10 92 70 00 sts 0x0070, r1
asm("sei");
da: 78 94 sei
dc: 08 95 ret
000000de <delay>:
}
void delay(uint t)
{
uint i,j,k;
for(i=0;i<t;i++)
de: 60 e0 ldi r22, 0x00 ; 0
e0: 70 e0 ldi r23, 0x00 ; 0
e2: 68 17 cp r22, r24
e4: 79 07 cpc r23, r25
e6: 88 f4 brcc .+34 ; 0x10a <delay+0x2c>
{
for(j=0;j<2000;j++)
e8: 40 e0 ldi r20, 0x00 ; 0
ea: 50 e0 ldi r21, 0x00 ; 0
ec: 23 ef ldi r18, 0xF3 ; 243
ee: 31 e0 ldi r19, 0x01 ; 1
{
for(k=0;k<500;k++);;
f0: 22 53 subi r18, 0x32 ; 50
f2: 30 40 sbci r19, 0x00 ; 0
f4: 37 ff sbrs r19, 7
f6: fc cf rjmp .-8 ; 0xf0 <delay+0x12>
f8: 4f 5f subi r20, 0xFF ; 255
fa: 5f 4f sbci r21, 0xFF ; 255
fc: 27 e0 ldi r18, 0x07 ; 7
fe: 40 3d cpi r20, 0xD0 ; 208
100: 52 07 cpc r21, r18
102: a0 f3 brcs .-24 ; 0xec <delay+0xe>
104: 6f 5f subi r22, 0xFF ; 255
106: 7f 4f sbci r23, 0xFF ; 255
108: ec cf rjmp .-40 ; 0xe2 <delay+0x4>
10a: 08 95 ret
0000010c <buz_set>:
}
}
}
/*---------------------------------------------------------------
BUZ 控制
----------------------------------------------------------------*/
void buz_set(uchar i)
{
TCCR2B = 0x02; //start
10c: 92 e0 ldi r25, 0x02 ; 2
10e: 90 93 b1 00 sts 0x00B1, r25
buz_t = 0;
112: 10 92 0a 01 sts 0x010A, r1
buz = i;
116: 80 93 02 01 sts 0x0102, r24
11a: 08 95 ret
0000011c <I_auto_set>:
}
/*---------------------------------------------------------------
恒流控制
----------------------------------------------------------------*/
void I_auto_set(void)
{
uint I_data;
if(power)
11c: 80 91 03 01 lds r24, 0x0103
120: 88 23 and r24, r24
122: 11 f1 breq .+68 ; 0x168 <I_auto_set+0x4c>
{
SET_LED1;
124: 2e 9a sbi 0x05, 6 ; 5
I_data = adc_colect(2); // 读电流值
126: 82 e0 ldi r24, 0x02 ; 2
128: 90 e0 ldi r25, 0x00 ; 0
12a: 4c d1 rcall .+664 ; 0x3c4 <adc_colect>
if(I_data<IREF)
12c: 20 91 0d 01 lds r18, 0x010D
130: 30 91 0e 01 lds r19, 0x010E
134: 82 17 cp r24, r18
136: 93 07 cpc r25, r19
138: 30 f4 brcc .+12 ; 0x146 <I_auto_set+0x2a>
{
if(pwm_data<254) pwm_data ++;
13a: 80 91 12 01 lds r24, 0x0112
13e: 8e 3f cpi r24, 0xFE ; 254
140: 70 f4 brcc .+28 ; 0x15e <I_auto_set+0x42>
142: 8f 5f subi r24, 0xFF ; 255
144: 0a c0 rjmp .+20 ; 0x15a <I_auto_set+0x3e>
}
else if(I_data>(IREF+5))
146: 2b 5f subi r18, 0xFB ; 251
148: 3f 4f sbci r19, 0xFF ; 255
14a: 28 17 cp r18, r24
14c: 39 07 cpc r19, r25
14e: 38 f4 brcc .+14 ; 0x15e <I_auto_set+0x42>
{
if(pwm_data>2) pwm_data --;
150: 80 91 12 01 lds r24, 0x0112
154: 83 30 cpi r24, 0x03 ; 3
156: 18 f0 brcs .+6 ; 0x15e <I_auto_set+0x42>
158: 81 50 subi r24, 0x01 ; 1
15a: 80 93 12 01 sts 0x0112, r24
}
Pwm_set(pwm_data); // 设置占空比
15e: 80 91 12 01 lds r24, 0x0112
162: 99 27 eor r25, r25
164: 84 d1 rcall .+776 ; 0x46e <Pwm_set>
166: 08 95 ret
}
else
{
TCCR0B = 0x00; //start timer
168: 85 bd out 0x25, r24 ; 37
TCCR0A = 0x00;
16a: 84 bd out 0x24, r24 ; 36
CLR_PWM;
16c: 5d 98 cbi 0x0b, 5 ; 11
CLR_LED1;
16e: 2e 98 cbi 0x05, 6 ; 5
170: 08 95 ret
00000172 <V_auto_set>:
}
}
/*---------------------------------------------------------------
电压检测
----------------------------------------------------------------*/
void V_auto_set(void)
{
172: cf 93 push r28
174: df 93 push r29
uint temp;
temp = adc_colect(2); // 读电流值
176: 82 e0 ldi r24, 0x02 ; 2
178: 90 e0 ldi r25, 0x00 ; 0
17a: 24 d1 rcall .+584 ; 0x3c4 <adc_colect>
if(temp>10)
17c: 0b 97 sbiw r24, 0x0b ; 11
17e: c0 f1 brcs .+112 ; 0x1f0 <V_auto_set+0x7e>
{
TCCR0A = 0x00; //0x23;
180: 14 bc out 0x24, r1 ; 36
TCCR0B = 0x00; //start timer
182: 15 bc out 0x25, r1 ; 37
delay(120);
184: 88 e7 ldi r24, 0x78 ; 120
186: 90 e0 ldi r25, 0x00 ; 0
188: aa df rcall .-172 ; 0xde <delay>
temp = adc_colect(4); // 读电流值
18a: 84 e0 ldi r24, 0x04 ; 4
18c: 90 e0 ldi r25, 0x00 ; 0
18e: 1a d1 rcall .+564 ; 0x3c4 <adc_colect>
temp = adc_colect(4); // 读电流值
190: 84 e0 ldi r24, 0x04 ; 4
192: 90 e0 ldi r25, 0x00 ; 0
194: 17 d1 rcall .+558 ; 0x3c4 <adc_colect>
196: ec 01 movw r28, r24
if(VREF>=temp) stop ++;
198: 80 91 00 01 lds r24, 0x0100
19c: 90 91 01 01 lds r25, 0x0101
1a0: 8c 17 cp r24, r28
1a2: 9d 07 cpc r25, r29
1a4: 30 f0 brcs .+12 ; 0x1b2 <V_auto_set+0x40>
1a6: 80 91 11 01 lds r24, 0x0111
1aa: 8f 5f subi r24, 0xFF ; 255
1ac: 80 93 11 01 sts 0x0111, r24
1b0: 02 c0 rjmp .+4 ; 0x1b6 <V_auto_set+0x44>
else stop = 0;
1b2: 10 92 11 01 sts 0x0111, r1
if(stop>stop_num) // 3分钟电压无变化电已充满
1b6: 90 91 11 01 lds r25, 0x0111
1ba: 80 91 0c 01 lds r24, 0x010C
1be: 89 17 cp r24, r25
1c0: 90 f4 brcc .+36 ; 0x1e6 <V_auto_set+0x74>
{
stop = 0;
1c2: 10 92 11 01 sts 0x0111, r1
power = 0;
1c6: 10 92 03 01 sts 0x0103, r1
CLR_LED1;
1ca: 2e 98 cbi 0x05, 6 ; 5
SET_LED2;
1cc: 2f 9a sbi 0x05, 7 ; 5
1ce: c2 e0 ldi r28, 0x02 ; 2
1d0: d0 e0 ldi r29, 0x00 ; 0
for(temp=0;temp<3;temp++)
{
buz_set(200);
1d2: 88 ec ldi r24, 0xC8 ; 200
1d4: 9b df rcall .-202 ; 0x10c <buz_set>
delay(180);
1d6: 84 eb ldi r24, 0xB4 ; 180
1d8: 90 e0 ldi r25, 0x00 ; 0
1da: 81 df rcall .-254 ; 0xde <delay>
1dc: 21 97 sbiw r28, 0x01 ; 1
1de: d7 ff sbrs r29, 7
1e0: f8 cf rjmp .-16 ; 0x1d2 <V_auto_set+0x60>
1e2: c3 e0 ldi r28, 0x03 ; 3
1e4: d0 e0 ldi r29, 0x00 ; 0
}
}
VREF = temp;
1e6: d0 93 01 01 sts 0x0101, r29
1ea: c0 93 00 01 sts 0x0100, r28
1ee: 02 c0 rjmp .+4 ; 0x1f4 <V_auto_set+0x82>
}
else power = 0; // 没接电池关机
1f0: 10 92 03 01 sts 0x0103, r1
1f4: df 91 pop r29
1f6: cf 91 pop r28
1f8: 08 95 ret
000001fa <__vector_13>:
}
/*---------------------------------------------------------------
T1 5ms 中断
----------------------------------------------------------------*/
SIGNAL(SIG_OVERFLOW1)
{
1fa: 1f 92 push r1
1fc: 0f 92 push r0
1fe: 0f b6 in r0, 0x3f ; 63
200: 0f 92 push r0
202: 11 24 eor r1, r1
204: 8f 93 push r24
206: 9f 93 push r25
TCNT1H = 0x63; //reload counter high value
208: 83 e6 ldi r24, 0x63 ; 99
20a: 80 93 85 00 sts 0x0085, r24
TCNT1L = 0xC0; //reload counter low value
20e: 80 ec ldi r24, 0xC0 ; 192
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -