2
7135x8v26.elf: file format elf32-avr
5
Idx Name Size VMA LMA File off Algn
6
0 .text 000003e2 00000000 00000000 00000094 2**1
7
CONTENTS, ALLOC, LOAD, READONLY, CODE
8
1 .data 00000016 00800060 000003e2 00000476 2**0
9
CONTENTS, ALLOC, LOAD, DATA
10
2 .bss 00000001 00800076 00800076 0000048c 2**0
12
3 .stab 000006b4 00000000 00000000 0000048c 2**2
13
CONTENTS, READONLY, DEBUGGING
14
4 .stabstr 00000085 00000000 00000000 00000b40 2**0
15
CONTENTS, READONLY, DEBUGGING
16
5 .debug_aranges 00000090 00000000 00000000 00000bc8 2**3
17
CONTENTS, READONLY, DEBUGGING
18
6 .debug_info 00000a65 00000000 00000000 00000c58 2**0
19
CONTENTS, READONLY, DEBUGGING
20
7 .debug_abbrev 00000338 00000000 00000000 000016bd 2**0
21
CONTENTS, READONLY, DEBUGGING
22
8 .debug_line 00000467 00000000 00000000 000019f5 2**0
23
CONTENTS, READONLY, DEBUGGING
24
9 .debug_frame 00000114 00000000 00000000 00001e5c 2**2
25
CONTENTS, READONLY, DEBUGGING
26
10 .debug_str 000002ec 00000000 00000000 00001f70 2**0
27
CONTENTS, READONLY, DEBUGGING
28
11 .debug_loc 0000028c 00000000 00000000 0000225c 2**0
29
CONTENTS, READONLY, DEBUGGING
30
12 .debug_ranges 000000c0 00000000 00000000 000024e8 2**0
31
CONTENTS, READONLY, DEBUGGING
33
Disassembly of section .text:
36
0: 09 c0 rjmp .+18 ; 0x14 <__ctors_end>
37
2: 21 c0 rjmp .+66 ; 0x46 <__bad_interrupt>
38
4: 20 c0 rjmp .+64 ; 0x46 <__bad_interrupt>
39
6: 1f c0 rjmp .+62 ; 0x46 <__bad_interrupt>
40
8: 1e c0 rjmp .+60 ; 0x46 <__bad_interrupt>
41
a: 1d c0 rjmp .+58 ; 0x46 <__bad_interrupt>
42
c: 1c c0 rjmp .+56 ; 0x46 <__bad_interrupt>
43
e: 1b c0 rjmp .+54 ; 0x46 <__bad_interrupt>
44
10: 93 c0 rjmp .+294 ; 0x138 <__vector_8>
45
12: 9e c0 rjmp .+316 ; 0x150 <__vector_9>
47
00000014 <__ctors_end>:
49
16: 1f be out 0x3f, r1 ; 63
50
18: cf e9 ldi r28, 0x9F ; 159
51
1a: cd bf out 0x3d, r28 ; 61
53
0000001c <__do_copy_data>:
54
1c: 10 e0 ldi r17, 0x00 ; 0
55
1e: a0 e6 ldi r26, 0x60 ; 96
56
20: b0 e0 ldi r27, 0x00 ; 0
57
22: e2 ee ldi r30, 0xE2 ; 226
58
24: f3 e0 ldi r31, 0x03 ; 3
59
26: 02 c0 rjmp .+4 ; 0x2c <__do_copy_data+0x10>
62
2c: a6 37 cpi r26, 0x76 ; 118
63
2e: b1 07 cpc r27, r17
64
30: d9 f7 brne .-10 ; 0x28 <__do_copy_data+0xc>
66
00000032 <__do_clear_bss>:
67
32: 10 e0 ldi r17, 0x00 ; 0
68
34: a6 e7 ldi r26, 0x76 ; 118
69
36: b0 e0 ldi r27, 0x00 ; 0
70
38: 01 c0 rjmp .+2 ; 0x3c <.do_clear_bss_start>
72
0000003a <.do_clear_bss_loop>:
75
0000003c <.do_clear_bss_start>:
76
3c: a7 37 cpi r26, 0x77 ; 119
77
3e: b1 07 cpc r27, r17
78
40: e1 f7 brne .-8 ; 0x3a <.do_clear_bss_loop>
79
42: cb d0 rcall .+406 ; 0x1da <main>
80
44: cc c1 rjmp .+920 ; 0x3de <_exit>
82
00000046 <__bad_interrupt>:
83
46: dc cf rjmp .-72 ; 0x0 <__vectors>
85
00000048 <WriteEEPROMByte>:
89
static NOINLINE void WriteEEPROMByte(uint8_t adress, uint8_t byte)
91
while(EECR & _BV(EEPE));
92
48: e1 99 sbic 0x1c, 1 ; 28
93
4a: fe cf rjmp .-4 ; 0x48 <WriteEEPROMByte>
94
EEAR = adress; // set address
95
4c: 8e bb out 0x1e, r24 ; 30
96
EEDR = byte; // set data
97
4e: 6d bb out 0x1d, r22 ; 29
98
cli(); // disable interrupts
100
EECR |= _BV(EEMWE); // set "write enable" bit
101
52: e2 9a sbi 0x1c, 2 ; 28
102
EECR |= _BV(EEWE); // set "write" bit
103
54: e1 9a sbi 0x1c, 1 ; 28
109
0000005a <ReadEEPROMByte>:
111
static NOINLINE uint8_t ReadEEPROMByte(uint8_t adress)
114
5a: e1 99 sbic 0x1c, 1 ; 28
115
5c: fe cf rjmp .-4 ; 0x5a <ReadEEPROMByte>
116
EEAR = adress; // set address
117
5e: 8e bb out 0x1e, r24 ; 30
118
EECR |= _BV(EERE); // set "read enable" bit
119
60: e0 9a sbi 0x1c, 0 ; 28
121
62: 8d b3 in r24, 0x1d ; 29
129
static NOINLINE void all_off(void) // ��������� ������ ���
131
LED_PORT = PB_CONFIG;
132
66: 80 e3 ldi r24, 0x30 ; 48
133
68: 88 bb out 0x18, r24 ; 24
135
6a: 16 be out 0x36, r1 ; 54
142
static NOINLINE void cpu_div(void) // ������������� �������� �������� �������
145
6e: 80 e8 ldi r24, 0x80 ; 128
146
70: 86 bd out 0x26, r24 ; 38
148
72: 82 e0 ldi r24, 0x02 ; 2
149
74: 86 bd out 0x26, r24 ; 38
157
static NOINLINE void pwr_down(void)
161
ADCSRA = 0x00; // ��������� ADC
162
7a: 16 b8 out 0x06, r1 ; 6
163
TCCR0A = 0x00; // ��������� ������
164
7c: 1f bc out 0x2f, r1 ; 47
165
TCCR0B = 0x00; // ��������� ������
166
7e: 13 be out 0x33, r1 ; 51
167
PRR = 0x03; // 0000 0011
168
80: 83 e0 ldi r24, 0x03 ; 3
169
82: 85 bd out 0x25, r24 ; 37
170
DDRB = 0x00; // �������� ����
171
84: 17 ba out 0x17, r1 ; 23
173
86: 18 ba out 0x18, r1 ; 24
174
MCUCR = 0x30; // PwrDown
175
88: 80 e3 ldi r24, 0x30 ; 48
176
8a: 85 bf out 0x35, r24 ; 53
186
static NOINLINE void set_mode(uint8_t mode) // ������ ����� ��� ������ ���� ��������� SetMod3();
189
90: 81 30 cpi r24, 0x01 ; 1
190
92: 59 f0 breq .+22 ; 0xaa <__stack+0xb>
191
94: 81 30 cpi r24, 0x01 ; 1
192
96: 28 f0 brcs .+10 ; 0xa2 <__stack+0x3>
193
98: 82 30 cpi r24, 0x02 ; 2
194
9a: 49 f0 breq .+18 ; 0xae <__stack+0xf>
195
9c: 83 30 cpi r24, 0x03 ; 3
196
9e: 71 f4 brne .+28 ; 0xbc <__stack+0x1d>
197
a0: 08 c0 rjmp .+16 ; 0xb2 <__stack+0x13>
201
a2: 80 e3 ldi r24, 0x30 ; 48
202
a4: 88 bb out 0x18, r24 ; 24
203
a6: 85 e5 ldi r24, 0x55 ; 85
204
a8: 07 c0 rjmp .+14 ; 0xb8 <__stack+0x19>
208
aa: 80 e3 ldi r24, 0x30 ; 48
209
ac: 03 c0 rjmp .+6 ; 0xb4 <__stack+0x15>
213
ae: 88 e3 ldi r24, 0x38 ; 56
214
b0: 01 c0 rjmp .+2 ; 0xb4 <__stack+0x15>
219
b2: 8a e3 ldi r24, 0x3A ; 58
220
b4: 88 bb out 0x18, r24 ; 24
221
b6: 8f ef ldi r24, 0xFF ; 255
222
b8: 86 bf out 0x36, r24 ; 54
231
bc: dd df rcall .-70 ; 0x78 <pwr_down>
236
//round up by default
237
__ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
240
__builtin_avr_delay_cycles(__ticks_dc);
241
c0: ef ea ldi r30, 0xAF ; 175
242
c2: f4 e0 ldi r31, 0x04 ; 4
243
c4: 31 97 sbiw r30, 0x01 ; 1
244
c6: f1 f7 brne .-4 ; 0xc4 <delay_ms+0x4>
245
c8: 00 c0 rjmp .+0 ; 0xca <delay_ms+0xa>
249
static NOINLINE void delay_ms(uint8_t ms) // ��������� ���, ����� ������ ����� ��������
253
cc: 81 50 subi r24, 0x01 ; 1
254
ce: c1 f7 brne .-16 ; 0xc0 <delay_ms>
258
000000d2 <delay_sec.constprop.0>:
259
d2: 8f e3 ldi r24, 0x3F ; 63
260
d4: 90 e4 ldi r25, 0x40 ; 64
261
d6: a7 e0 ldi r26, 0x07 ; 7
262
d8: 81 50 subi r24, 0x01 ; 1
263
da: 90 40 sbci r25, 0x00 ; 0
264
dc: a0 40 sbci r26, 0x00 ; 0
265
de: e1 f7 brne .-8 ; 0xd8 <delay_sec.constprop.0+0x6>
266
e0: 00 c0 rjmp .+0 ; 0xe2 <delay_sec.constprop.0+0x10>
269
static NOINLINE void delay_sec(uint8_t ms)
271
do { _delay_ms(495); }
278
static NOINLINE void std_loop(void)
282
set_mode(current_mode);
283
e6: 85 2d mov r24, r5
284
e8: d3 df rcall .-90 ; 0x90 <set_mode>
286
ea: 01 ff sbrs r16, 1
287
ec: 0d c0 rjmp .+26 ; 0x108 <std_loop+0x22>
292
ee: f1 df rcall .-30 ; 0xd2 <delay_sec.constprop.0>
293
save_byte(CMODE_ADR, current_mode);
294
f0: 65 2d mov r22, r5
298
static INLINE void save_byte(uint8_t startadr, uint8_t data)
300
uint8_t old_eeprom_pos = eeprom_pos;
301
f2: c0 91 76 00 lds r28, 0x0076
302
eeprom_pos=(eeprom_pos + 1) & 0x1F;
303
f6: 8c 2f mov r24, r28
304
f8: 8f 5f subi r24, 0xFF ; 255
305
fa: 8f 71 andi r24, 0x1F ; 31
306
fc: 80 93 76 00 sts 0x0076, r24
307
WriteEEPROMByte((eeprom_pos + startadr), data);
308
100: a3 df rcall .-186 ; 0x48 <WriteEEPROMByte>
309
WriteEEPROMByte((old_eeprom_pos + startadr), 0xFF);
310
102: 8c 2f mov r24, r28
311
104: 6f ef ldi r22, 0xFF ; 255
312
106: a0 df rcall .-192 ; 0x48 <WriteEEPROMByte>
313
WriteEEPROMByte(CFG_CURRENTMODE, current_mode);
317
#ifdef THEMPERATURE_CONTROL
318
calibrator10 = adch_temp;
319
108: a8 2c mov r10, r8
320
calibrator11 = calibrator10;
321
10a: b8 2c mov r11, r8
324
10c: 83 e0 ldi r24, 0x03 ; 3
325
10e: d8 df rcall .-80 ; 0xc0 <delay_ms>
327
110: ea cf rjmp .-44 ; 0xe6 <std_loop>
329
00000112 <read_byte.constprop.1>:
330
static NOINLINE uint8_t read_byte(uint8_t startadr)
335
eepdata = ReadEEPROMByte(eeprom_pos + startadr);
336
112: 80 91 76 00 lds r24, 0x0076
337
116: a1 df rcall .-190 ; 0x5a <ReadEEPROMByte>
338
118: 90 91 76 00 lds r25, 0x0076
339
if((eepdata != 0xFF) || (eeprom_pos >= SIZE))
340
11c: 8f 3f cpi r24, 0xFF ; 255
341
11e: 31 f4 brne .+12 ; 0x12c <read_byte.constprop.1+0x1a>
342
120: 90 32 cpi r25, 0x20 ; 32
343
122: 20 f4 brcc .+8 ; 0x12c <read_byte.constprop.1+0x1a>
346
124: 9f 5f subi r25, 0xFF ; 255
347
126: 90 93 76 00 sts 0x0076, r25
348
12a: f3 cf rjmp .-26 ; 0x112 <read_byte.constprop.1>
350
if (eeprom_pos < SIZE)
351
12c: 90 32 cpi r25, 0x20 ; 32
352
12e: 18 f0 brcs .+6 ; 0x136 <read_byte.constprop.1+0x24>
356
130: 10 92 76 00 sts 0x0076, r1
358
134: 80 e0 ldi r24, 0x00 ; 0
362
00000138 <__vector_8>:
363
WDTCR = (_BV(WDCE) | _BV(WDE));
364
WDTCR = (_BV(WDTIE) | WDTO_250MS);
371
13c: 0f b6 in r0, 0x3f ; 63
373
140: 11 24 eor r1, r1
375
142: 0d 7f andi r16, 0xFD ; 253
376
short_off_counter = 0;
377
144: 22 24 eor r2, r2
378
if (current_mode == MAX_MODES) current_mode--;
380
if (current_mode == 0) current_mode++;
385
148: 0f be out 0x3f, r0 ; 63
390
00000150 <__vector_9>:
399
154: 0f b6 in r0, 0x3f ; 63
401
158: 11 24 eor r1, r1
404
uint8_t adch_val = ADCH;
405
15e: 85 b1 in r24, 0x05 ; 5
408
#ifdef THEMPERATURE_CONTROL
409
static INLINE void switch_adc_in(uint8_t is_temp)
411
if (is_temp) // ���� �����������
412
160: 00 ff sbrs r16, 0
413
162: 02 c0 rjmp .+4 ; 0x168 <__vector_9+0x18>
415
ADMUX = 0x62; // 0110 0010 PB4 Vref = 1.1V
417
ADMUX = 0x22; // 0010 0010 PB4 Vref = Vcc
418
164: 92 e2 ldi r25, 0x22 ; 34
419
166: 01 c0 rjmp .+2 ; 0x16a <__vector_9+0x1a>
422
ADMUX = 0x61; // 0110 0001 PB2 Vref = 1.1V
423
168: 91 e6 ldi r25, 0x61 ; 97
424
16a: 97 b9 out 0x07, r25 ; 7
425
uint8_t adch_val = ADCH;
427
#ifdef THEMPERATURE_CONTROL
428
switch_adc_in(IsMeasureThemp());//
431
16c: 00 ff sbrs r16, 0
432
16e: 0b c0 rjmp .+22 ; 0x186 <__vector_9+0x36>
434
if (MAX_THEMP) // ���� 0 - ��������� ����� ������
435
170: 9c 2d mov r25, r12
436
172: cc 20 and r12, r12
437
174: 31 f0 breq .+12 ; 0x182 <__vector_9+0x32>
440
if(adch_val < (uint8_t)(MAX_THEMP + current_mode)) // ������ 0 - ����� 3 - ������
441
176: 95 0d add r25, r5
442
178: 89 17 cp r24, r25
443
17a: 10 f4 brcc .+4 ; 0x180 <__vector_9+0x30>
445
if(adch_val < (uint8_t)(MAX_THEMP - current_mode)) // ������ 0 - ������ 3 - �����
447
tick_temp++; // ���� ����������� ������ - �������� �������, ����� ���������, ��� ��� �� ������
449
17e: 01 c0 rjmp .+2 ; 0x182 <__vector_9+0x32>
451
tick_temp = 0; // ���� ����������� ��������������� - �����
452
180: 99 24 eor r9, r9
454
adch_temp = adch_val;
455
182: 88 2e mov r8, r24
456
184: 06 c0 rjmp .+12 ; 0x192 <__vector_9+0x42>
461
if(adch_val < OFF_VOLTAGE)
462
186: 8d 37 cpi r24, 0x7D ; 125
463
188: 10 f4 brcc .+4 ; 0x18e <__vector_9+0x3e>
464
tick_volt++; // ���� ������� ���� - �������� �������, ����� ���������, ��� ��� �� ������
466
18c: 01 c0 rjmp .+2 ; 0x190 <__vector_9+0x40>
468
tick_volt = 0; // ���� ������� ��������������� - �����
469
18e: 44 24 eor r4, r4
471
adch_volt = adch_val;
472
190: 38 2e mov r3, r24
474
#ifdef THEMPERATURE_CONTROL
477
192: 81 e0 ldi r24, 0x01 ; 1
478
194: 80 27 eor r24, r16
479
196: 08 2f mov r16, r24
482
#ifdef THEMPERATURE_CONTROL
483
if((tick_volt > 0x40)|(tick_temp > 0x10)) // �������� ��� ������ � ��������
484
198: 90 e1 ldi r25, 0x10 ; 16
485
19a: 99 15 cp r25, r9
486
19c: 18 f0 brcs .+6 ; 0x1a4 <__vector_9+0x54>
487
19e: 90 e4 ldi r25, 0x40 ; 64
488
1a0: 94 15 cp r25, r4
489
1a2: 48 f4 brcc .+18 ; 0x1b6 <__vector_9+0x66>
494
tick_volt = 0; // ��������, ����� ���������� �� � ����� �������, � ���������
495
1a4: 44 24 eor r4, r4
496
#ifdef THEMPERATURE_CONTROL
498
1a6: 99 24 eor r9, r9
500
current_mode++; // ��������� �������
501
if (current_mode == (MAX_MODES+1))
504
current_mode--; // ����� �������� �������
505
1a8: 95 2d mov r25, r5
506
1aa: 91 50 subi r25, 0x01 ; 1
507
1ac: 59 2e mov r5, r25
508
if (current_mode == 0xFF)
509
1ae: 9f 3f cpi r25, 0xFF ; 255
510
1b0: 11 f4 brne .+4 ; 0x1b6 <__vector_9+0x66>
512
1b2: 08 2f mov r16, r24
513
1b4: 04 60 ori r16, 0x04 ; 4
520
1bc: 0f be out 0x3f, r0 ; 63
525
000001c4 <input_mode>:
529
static NOINLINE void input_mode(void)
532
1c4: 50 df rcall .-352 ; 0x66 <all_off>
534
1c6: 86 e9 ldi r24, 0x96 ; 150
535
1c8: 7b df rcall .-266 ; 0xc0 <delay_ms>
537
1ca: 8a ea ldi r24, 0xAA ; 170
538
1cc: 68 2e mov r6, r24
539
#ifdef MODE_SET_LEVEL
541
current_mode = ((current_mode - 1) & 0x03); // ������������ ������� �������
542
1ce: 85 2d mov r24, r5
543
1d0: 81 50 subi r24, 0x01 ; 1
544
1d2: 93 e0 ldi r25, 0x03 ; 3
545
1d4: 59 2e mov r5, r25
546
1d6: 58 22 and r5, r24
548
if (current_mode == 0xFF)
549
current_mode = MAX_MODES;
559
OS_MAIN int main(void)
561
cli(); //disable interrupts
564
1dc: 00 e0 ldi r16, 0x00 ; 0
566
if((MCUSR & (1<<EXTRF)) == 0) SetNewMode();
570
if (mode_switcher == 0xAA)
571
1de: 8a ea ldi r24, 0xAA ; 170
572
1e0: d8 16 cp r13, r24
573
1e2: 09 f4 brne .+2 ; 0x1e6 <main+0xc>
575
1e4: 02 e0 ldi r16, 0x02 ; 2
576
mode_switcher = 0xAA;
577
1e6: 5a ea ldi r21, 0xAA ; 170
578
1e8: d5 2e mov r13, r21
584
1ec: 44 24 eor r4, r4
585
#ifdef THEMPERATURE_CONTROL
587
1ee: 99 24 eor r9, r9
589
1f0: 0e 7f andi r16, 0xFE ; 254
593
static INLINE void initialize(void)
596
1f2: 90 e8 ldi r25, 0x80 ; 128
597
1f4: 96 bd out 0x26, r25 ; 38
598
CLKPR = 0x01; // ������������� �������� �������� �������
599
1f6: 81 e0 ldi r24, 0x01 ; 1
600
1f8: 86 bd out 0x26, r24 ; 38
602
// Port B initialization
603
PORTB = PB_CONFIG; // PB4, PB5 ����������� � +
604
1fa: 20 e3 ldi r18, 0x30 ; 48
605
1fc: 28 bb out 0x18, r18 ; 24
606
DDRB = DDRB_CONFIG; // PB0, PB1, PB3 - ������
607
1fe: 2b e0 ldi r18, 0x0B ; 11
608
200: 27 bb out 0x17, r18 ; 23
610
ACSR = 0x80; // 1000 0000 Analog Comparator Disable
611
202: 98 b9 out 0x08, r25 ; 8
613
204: 94 e1 ldi r25, 0x14 ; 20
614
206: 94 bb out 0x14, r25 ; 20
617
208: 15 bc out 0x25, r1 ; 37
619
ADMUX = 0x61; // 0110 0001 Internal Voltage Reference (1.1V) , ADC1 , 01 PB2 - ������� (��� 10 PB4 - �����������)
620
20a: 91 e6 ldi r25, 0x61 ; 97
621
20c: 97 b9 out 0x07, r25 ; 7
622
ADCSRA = 0xA7; // 0xA7 - 1010 1111 ��������, �� �� ����������, ADC Interrupt Enable, Division Factor = 128
623
20e: 97 ea ldi r25, 0xA7 ; 167
624
210: 96 b9 out 0x06, r25 ; 6
626
212: 13 b8 out 0x03, r1 ; 3
630
214: 12 be out 0x32, r1 ; 50
632
216: 16 be out 0x36, r1 ; 54
634
218: 83 bf out 0x33, r24 ; 51
636
21a: 83 e8 ldi r24, 0x83 ; 131
637
21c: 8f bd out 0x2f, r24 ; 47
639
MCUCR = 0x20; // IdleMode
640
21e: 80 e2 ldi r24, 0x20 ; 32
641
220: 85 bf out 0x35, r24 ; 53
642
TIMSK0 = 0x00; // timer interrupt sources
643
222: 19 be out 0x39, r1 ; 57
644
GIMSK = 0x00; // interrupt sources
645
224: 1b be out 0x3b, r1 ; 59
647
sei(); // enable interrupts
652
static INLINE void start_wdt(void)
656
WDTCR = (_BV(WDCE) | _BV(WDE));
657
22a: 88 e1 ldi r24, 0x18 ; 24
658
22c: 81 bd out 0x21, r24 ; 33
659
WDTCR = (_BV(WDTIE) | WDTO_250MS);
660
22e: 84 e4 ldi r24, 0x44 ; 68
661
230: 81 bd out 0x21, r24 ; 33
666
#ifdef THEMPERATURE_CONTROL
667
uint8_t temporary = ReadEEPROMByte(CFG_CALIBRATE);
668
232: 8d e3 ldi r24, 0x3D ; 61
669
234: 12 df rcall .-476 ; 0x5a <ReadEEPROMByte>
670
236: c8 2f mov r28, r24
672
238: 88 23 and r24, r24
673
23a: 69 f4 brne .+26 ; 0x256 <main+0x7c>
675
if(IsNewMode()) // ���� �������� ���� ���������� ����� �������� ��
676
23c: 01 ff sbrs r16, 1
677
23e: 08 c0 rjmp .+16 ; 0x250 <main+0x76>
679
if(calibrator11 == calibrator10) // � �����?
680
240: 6b 2d mov r22, r11
681
242: ba 14 cp r11, r10
682
244: 41 f4 brne .+16 ; 0x256 <main+0x7c>
685
WriteEEPROMByte(CFG_CALIBRATE, calibrator10 - MAX_MODES); //
686
246: 63 50 subi r22, 0x03 ; 3
687
248: 8d e3 ldi r24, 0x3D ; 61
688
24a: fe de rcall .-516 ; 0x48 <WriteEEPROMByte>
689
WriteEEPROMByte(CFG_CALIBRATE, calibrator10); //
695
24c: 15 df rcall .-470 ; 0x78 <pwr_down>
696
24e: 03 c0 rjmp .+6 ; 0x256 <main+0x7c>
700
WriteEEPROMByte(CFG_CALIBRATE, 0xFF); // � ���� ���������� ������� - ��������� ��
701
250: 8d e3 ldi r24, 0x3D ; 61
702
252: 6f ef ldi r22, 0xFF ; 255
703
254: f9 de rcall .-526 ; 0x48 <WriteEEPROMByte>
705
MAX_THEMP = temporary;
706
256: cc 2e mov r12, r28
707
if(MAX_THEMP == 0xFF) MAX_THEMP = 0; // �� ������, ����...
708
258: cf 3f cpi r28, 0xFF ; 255
709
25a: 09 f4 brne .+2 ; 0x25e <main+0x84>
710
25c: cc 24 eor r12, r12
714
uint8_t ramping = ReadEEPROMByte(CFG_RAMPING);
715
25e: 8f e3 ldi r24, 0x3F ; 63
716
260: fc de rcall .-520 ; 0x5a <ReadEEPROMByte>
718
262: 88 23 and r24, r24
719
264: 69 f4 brne .+26 ; 0x280 <main+0xa6>
721
if(IsNewMode()) // ���� �������� ���� ���������� ����� ��������
723
WriteEEPROMByte(CFG_RAMPING, ramping_reg);
724
266: 8f e3 ldi r24, 0x3F ; 63
727
uint8_t ramping = ReadEEPROMByte(CFG_RAMPING);
730
if(IsNewMode()) // ���� �������� ���� ���������� ����� ��������
731
268: 01 ff sbrs r16, 1
732
26a: 07 c0 rjmp .+14 ; 0x27a <main+0xa0>
734
WriteEEPROMByte(CFG_RAMPING, ramping_reg);
735
26c: 67 2d mov r22, r7
736
26e: ec de rcall .-552 ; 0x48 <WriteEEPROMByte>
737
WriteEEPROMByte(CFG_MOONMODE, 0x00);
738
270: 8b e3 ldi r24, 0x3B ; 59
739
272: 60 e0 ldi r22, 0x00 ; 0
740
274: e9 de rcall .-558 ; 0x48 <WriteEEPROMByte>
742
276: 0d 7f andi r16, 0xFD ; 253
743
278: 04 c0 rjmp .+8 ; 0x282 <main+0xa8>
746
WriteEEPROMByte(CFG_RAMPING, 0xFF);
747
27a: 6f ef ldi r22, 0xFF ; 255
748
27c: e5 de rcall .-566 ; 0x48 <WriteEEPROMByte>
749
27e: 01 c0 rjmp .+2 ; 0x282 <main+0xa8>
752
ramping_reg = ramping;
753
280: 78 2e mov r7, r24
755
if (ramping_reg == 0xFF)
756
282: 9f ef ldi r25, 0xFF ; 255
757
284: 79 16 cp r7, r25
758
286: 11 f4 brne .+4 ; 0x28c <main+0xb2>
763
288: 77 24 eor r7, r7
771
28c: 86 b1 in r24, 0x06 ; 6
772
28e: 88 64 ori r24, 0x48 ; 72
773
290: 86 b9 out 0x06, r24 ; 6
777
static INLINE void decode_mode(void)
779
if (IsNewMode()) // ���� �������� ����������,...
780
292: 01 ff sbrs r16, 1
781
294: 87 c0 rjmp .+270 ; 0x3a4 <main+0x1ca>
783
if(!short_off_counter)
784
296: 82 2d mov r24, r2
785
298: 22 20 and r2, r2
786
29a: 31 f4 brne .+12 ; 0x2a8 <main+0xce>
788
if(mode_saver == 0xAA)
789
29c: 9a ea ldi r25, 0xAA ; 170
790
29e: 69 16 cp r6, r25
791
2a0: 11 f4 brne .+4 ; 0x2a6 <main+0xcc>
794
2a2: 66 24 eor r6, r6
795
2a4: 01 c0 rjmp .+2 ; 0x2a8 <main+0xce>
805
2a8: 8f 5f subi r24, 0xFF ; 255
806
2aa: 28 2e mov r2, r24
807
if (short_off_counter == BATTERY_CLICKS) //... ��������� ������� ���� �������� ����������
808
2ac: 84 30 cpi r24, 0x04 ; 4
809
2ae: 31 f5 brne .+76 ; 0x2fc <main+0x122>
810
uint8_t switch_voltage [] = {U1, U2, U3, U4};
811
static INLINE void display_voltage(void)
816
2b0: 89 df rcall .-238 ; 0x1c4 <input_mode>
818
2b2: 66 24 eor r6, r6
820
2b4: e3 2c mov r14, r3
821
2b6: c2 e7 ldi r28, 0x72 ; 114
822
2b8: d0 e0 ldi r29, 0x00 ; 0
824
uint8_t switch_voltage [] = {U1, U2, U3, U4};
825
static INLINE void display_voltage(void)
829
2ba: 10 e0 ldi r17, 0x00 ; 0
836
2bc: 40 e8 ldi r20, 0x80 ; 128
837
2be: f4 2e mov r15, r20
838
2c0: f6 be out 0x36, r15 ; 54
840
2c2: 8b e4 ldi r24, 0x4B ; 75
841
2c4: fd de rcall .-518 ; 0xc0 <delay_ms>
843
2c6: 16 be out 0x36, r1 ; 54
845
2c8: 84 e6 ldi r24, 0x64 ; 100
846
2ca: fa de rcall .-524 ; 0xc0 <delay_ms>
847
if(v_batt < switch_voltage[i])
848
2cc: 89 91 ld r24, Y+
849
2ce: e8 16 cp r14, r24
850
2d0: 18 f0 brcs .+6 ; 0x2d8 <main+0xfe>
853
2d2: 1f 5f subi r17, 0xFF ; 255
854
2d4: 15 30 cpi r17, 0x05 ; 5
855
2d6: a1 f7 brne .-24 ; 0x2c0 <main+0xe6>
859
2d8: 84 e6 ldi r24, 0x64 ; 100
860
2da: f2 de rcall .-540 ; 0xc0 <delay_ms>
862
#ifdef THEMPERATURE_CONTROL
863
i = ReadEEPROMByte(CFG_CALIBRATE);
864
2dc: 8d e3 ldi r24, 0x3D ; 61
865
2de: bd de rcall .-646 ; 0x5a <ReadEEPROMByte>
866
if((!i) || (i == 0xFF)) // ���� ������������� �������� - ������
867
2e0: 81 50 subi r24, 0x01 ; 1
868
2e2: 8e 3f cpi r24, 0xFE ; 254
869
2e4: 08 f4 brcc .+2 ; 0x2e8 <main+0x10e>
870
2e6: 64 c0 rjmp .+200 ; 0x3b0 <main+0x1d6>
871
static INLINE void flash(uint8_t i)
873
static NOINLINE void flash(uint8_t i)
877
2e8: be de rcall .-644 ; 0x66 <all_off>
878
2ea: ca e0 ldi r28, 0x0A ; 10
880
2ec: 84 e1 ldi r24, 0x14 ; 20
881
2ee: e8 de rcall .-560 ; 0xc0 <delay_ms>
883
2f0: 86 b7 in r24, 0x36 ; 54
885
2f4: 86 bf out 0x36, r24 ; 54
886
2f6: c1 50 subi r28, 0x01 ; 1
888
2f8: c9 f7 brne .-14 ; 0x2ec <main+0x112>
889
2fa: 5a c0 rjmp .+180 ; 0x3b0 <main+0x1d6>
890
if (short_off_counter == BATTERY_CLICKS) //... ��������� ������� ���� �������� ����������
895
else if (short_off_counter == MODELINECHG_CLICKS)
896
2fc: 83 30 cpi r24, 0x03 ; 3
897
2fe: 19 f4 brne .+6 ; 0x306 <main+0x12c>
900
static INLINE void mode_line_chg(void) // �������� MODELINECHG
904
300: 61 df rcall .-318 ; 0x1c4 <input_mode>
905
WriteEEPROMByte(CFG_MOONMODE, 0x00);
906
302: 8b e3 ldi r24, 0x3B ; 59
907
304: 07 c0 rjmp .+14 ; 0x314 <main+0x13a>
908
else if (short_off_counter == MODELINECHG_CLICKS)
912
#ifdef THEMPERATURE_CONTROL
913
else if (short_off_counter == CALIBRATE_CLICKS)
914
306: 8c 30 cpi r24, 0x0C ; 12
915
308: 41 f4 brne .+16 ; 0x31a <main+0x140>
918
#ifdef THEMPERATURE_CONTROL
919
static INLINE void calibrate(void) // ���������� �������������
922
30a: 5c df rcall .-328 ; 0x1c4 <input_mode>
928
current_mode = MAX_MODES;
929
30c: 33 e0 ldi r19, 0x03 ; 3
930
30e: 53 2e mov r5, r19
932
MAX_THEMP = 0; // �������� ���������� �.�. ��������� ��
933
310: cc 24 eor r12, r12
934
WriteEEPROMByte(CFG_CALIBRATE, 0); // �������� � eeprom
935
312: 8d e3 ldi r24, 0x3D ; 61
936
314: 60 e0 ldi r22, 0x00 ; 0
937
316: 98 de rcall .-720 ; 0x48 <WriteEEPROMByte>
938
318: 4b c0 rjmp .+150 ; 0x3b0 <main+0x1d6>
939
else if (short_off_counter == CALIBRATE_CLICKS)
944
else if (short_off_counter == RAMPING_CLICKS)
945
31a: 88 30 cpi r24, 0x08 ; 8
946
31c: 89 f4 brne .+34 ; 0x340 <main+0x166>
949
static INLINE void ramping_loop(void)
953
31e: 52 df rcall .-348 ; 0x1c4 <input_mode>
954
WriteEEPROMByte(CFG_RAMPING, 0); // �������� � eeprom
955
320: 8f e3 ldi r24, 0x3F ; 63
956
322: 60 e0 ldi r22, 0x00 ; 0
957
324: 91 de rcall .-734 ; 0x48 <WriteEEPROMByte>
960
326: a3 de rcall .-698 ; 0x6e <cpu_div>
967
328: 77 24 eor r7, r7
969
32c: c7 e0 ldi r28, 0x07 ; 7
976
32e: 76 be out 0x36, r7 ; 54
981
330: 8d e7 ldi r24, 0x7D ; 125
982
332: c6 de rcall .-628 ; 0xc0 <delay_ms>
984
if (IsOffMode()) //��� �������� �������
985
334: 02 fd sbrc r16, 2
987
336: a0 de rcall .-704 ; 0x78 <pwr_down>
988
ramping_reg = (ramping_reg<<1);
989
338: 77 0c add r7, r7
990
33a: c1 50 subi r28, 0x01 ; 1
992
33c: c1 f7 brne .-16 ; 0x32e <main+0x154>
993
33e: f4 cf rjmp .-24 ; 0x328 <main+0x14e>
994
else if (short_off_counter == PULSE_MODE_CLICKS)
998
#ifdef SLOW_PULSE_MODE
999
else if (short_off_counter == SLOW_PULSE_MODE_CLICKS)
1000
340: 86 30 cpi r24, 0x06 ; 6
1001
342: 41 f4 brne .+16 ; 0x354 <main+0x17a>
1004
#ifdef SLOW_PULSE_MODE
1005
static INLINE void s_pulse(void) // ���� ��������� �����, �������������
1008
344: 3f df rcall .-386 ; 0x1c4 <input_mode>
1009
#ifndef MODE_SET_LEVEL
1010
current_mode = SlowPulseMod;
1014
set_mode(current_mode);
1015
346: 85 2d mov r24, r5
1016
348: a3 de rcall .-698 ; 0x90 <set_mode>
1018
34a: 8d e7 ldi r24, 0x7D ; 125
1019
34c: b9 de rcall .-654 ; 0xc0 <delay_ms>
1021
34e: 8b de rcall .-746 ; 0x66 <all_off>
1022
delay_sec(PULSE_OFF);
1023
350: c0 de rcall .-640 ; 0xd2 <delay_sec.constprop.0>
1024
352: f9 cf rjmp .-14 ; 0x346 <main+0x16c>
1025
else if (short_off_counter == VELO_STROBE_CLICKS)
1030
else if (short_off_counter == POLICE_MODE_CLICKS)
1031
354: 85 30 cpi r24, 0x05 ; 5
1032
356: 81 f4 brne .+32 ; 0x378 <main+0x19e>
1035
static INLINE void police_pulse(void)
1039
358: 35 df rcall .-406 ; 0x1c4 <input_mode>
1046
35a: c4 e0 ldi r28, 0x04 ; 4
1052
set_mode(current_mode);
1053
35c: 85 2d mov r24, r5
1054
35e: 98 de rcall .-720 ; 0x90 <set_mode>
1056
360: 85 e0 ldi r24, 0x05 ; 5
1057
362: ae de rcall .-676 ; 0xc0 <delay_ms>
1059
364: 80 de rcall .-768 ; 0x66 <all_off>
1061
366: 82 e3 ldi r24, 0x32 ; 50
1062
368: ab de rcall .-682 ; 0xc0 <delay_ms>
1063
36a: c1 50 subi r28, 0x01 ; 1
1065
36c: b9 f7 brne .-18 ; 0x35c <main+0x182>
1067
36e: 88 ec ldi r24, 0xC8 ; 200
1068
370: a7 de rcall .-690 ; 0xc0 <delay_ms>
1070
372: 8c e8 ldi r24, 0x8C ; 140
1071
374: a5 de rcall .-694 ; 0xc0 <delay_ms>
1072
376: f1 cf rjmp .-30 ; 0x35a <main+0x180>
1073
else if (short_off_counter == POLICE_MODE_CLICKS)
1078
else if (short_off_counter == SOS_MODE_CLICKS)
1079
378: 87 30 cpi r24, 0x07 ; 7
1080
37a: d1 f4 brne .+52 ; 0x3b0 <main+0x1d6>
1082
uint8_t sos_delay [] = {255, 75, 75, 75, 75, 75, 225, 225, 75, 225, 75, 225, 225, 75, 75, 75, 75, 75};
1083
static INLINE void sos_pulse(void) // ��� ����� SOS
1087
37c: 23 df rcall .-442 ; 0x1c4 <input_mode>
1088
37e: c1 e6 ldi r28, 0x61 ; 97
1089
380: d0 e0 ldi r29, 0x00 ; 0
1096
382: 10 e0 ldi r17, 0x00 ; 0
1102
OS_MAIN int main(void)
1103
384: fe 01 movw r30, r28
1104
386: 31 97 sbiw r30, 0x01 ; 1
1110
delay_ms(sos_delay[k]);
1111
388: 80 81 ld r24, Z
1112
38a: 9a de rcall .-716 ; 0xc0 <delay_ms>
1114
set_mode(current_mode);
1115
38c: 85 2d mov r24, r5
1116
38e: 80 de rcall .-768 ; 0x90 <set_mode>
1117
delay_ms(sos_delay[k]);
1118
390: 88 81 ld r24, Y
1119
392: 96 de rcall .-724 ; 0xc0 <delay_ms>
1121
394: 1e 5f subi r17, 0xFE ; 254
1123
396: 67 de rcall .-818 ; 0x66 <all_off>
1124
398: 22 96 adiw r28, 0x02 ; 2
1126
39a: 12 31 cpi r17, 0x12 ; 18
1127
39c: 99 f7 brne .-26 ; 0x384 <main+0x1aa>
1129
39e: 8f ef ldi r24, 0xFF ; 255
1130
3a0: 8f de rcall .-738 ; 0xc0 <delay_ms>
1131
3a2: ed cf rjmp .-38 ; 0x37e <main+0x1a4>
1137
short_off_counter = 0;
1138
3a4: 22 24 eor r2, r2
1140
#ifndef NOMEM // ���� ���� ������� (��������) - ������ �����
1141
#ifdef WEAR_LEWELING
1142
current_mode = read_byte(CMODE_ADR);
1143
3a6: b5 de rcall .-662 ; 0x112 <read_byte.constprop.1>
1144
3a8: 58 2e mov r5, r24
1146
current_mode = ReadEEPROMByte(CFG_CURRENTMODE);
1148
if (current_mode == 0xFF) // �� ������, ����...
1149
3aa: 8f 3f cpi r24, 0xFF ; 255
1150
3ac: 09 f4 brne .+2 ; 0x3b0 <main+0x1d6>
1151
current_mode = START_MODE;
1152
3ae: 55 24 eor r5, r5
1153
current_mode = START_MODE; // ��������, ����� ������ ���������� � ��������
1158
current_mode = current_mode & 0x03; // ������������ ������� �������
1159
3b0: 83 e0 ldi r24, 0x03 ; 3
1160
3b2: 58 22 and r5, r24
1166
if (ReadEEPROMByte(CFG_MOONMODE) == 0xFF)
1167
3b4: 8b e3 ldi r24, 0x3B ; 59
1168
3b6: 51 de rcall .-862 ; 0x5a <ReadEEPROMByte>
1169
3b8: 8f 3f cpi r24, 0xFF ; 255
1170
3ba: 31 f0 breq .+12 ; 0x3c8 <main+0x1ee>
1174
if(IsNewMode()) // ���� �������� ���� ������� �� MODELINECHG
1175
3bc: 01 ff sbrs r16, 1
1176
3be: 05 c0 rjmp .+10 ; 0x3ca <main+0x1f0>
1178
WriteEEPROMByte(CFG_MOONMODE, 0xFF);
1179
3c0: 8b e3 ldi r24, 0x3B ; 59
1180
3c2: 6f ef ldi r22, 0xFF ; 255
1181
3c4: 41 de rcall .-894 ; 0x48 <WriteEEPROMByte>
1183
#ifdef REVERSE_SW // ����� ������� ����� ��������
1185
3c6: 55 24 eor r5, r5
1186
current_mode = MAX_MODES;
1192
3c8: 8e de rcall .-740 ; 0xe6 <std_loop>
1196
static INLINE void moon_loop(void) // MOONMODE
1199
3ca: 2a ea ldi r18, 0xAA ; 170
1200
3cc: 62 2e mov r6, r18
1201
OCR0A = ramping_reg;
1202
3ce: 76 be out 0x36, r7 ; 54
1204
#ifndef FREQMOON_OFF
1206
3d0: 4e de rcall .-868 ; 0x6e <cpu_div>
1213
3d4: 02 fd sbrc r16, 2
1215
3d6: 50 de rcall .-864 ; 0x78 <pwr_down>
1217
3d8: 81 e0 ldi r24, 0x01 ; 1
1218
3da: 72 de rcall .-796 ; 0xc0 <delay_ms>
1219
3dc: fa cf rjmp .-12 ; 0x3d2 <main+0x1f8>
1224
000003e0 <__stop_program>:
1225
3e0: ff cf rjmp .-2 ; 0x3e0 <__stop_program>