Rev Author Line No. Line
2925 poskozby 1  
2 Balon_sonda.elf: file format elf32-avr
3  
4 Sections:
5 Idx Name Size VMA LMA File off Algn
6  
7 CONTENTS, ALLOC, LOAD, DATA
8 1 .text 000004fe 00000000 00000000 00000094 2**1
9 CONTENTS, ALLOC, LOAD, READONLY, CODE
10 2 .bss 00000220 00800108 00800108 0000059a 2**0
11 ALLOC
12 3 .stab 00000888 00000000 00000000 0000059c 2**2
13 CONTENTS, READONLY, DEBUGGING
14 4 .stabstr 00000149 00000000 00000000 00000e24 2**0
15 CONTENTS, READONLY, DEBUGGING
16 5 .debug_aranges 000000e0 00000000 00000000 00000f70 2**3
17 CONTENTS, READONLY, DEBUGGING
18 6 .debug_info 000009b1 00000000 00000000 00001050 2**0
19 CONTENTS, READONLY, DEBUGGING
20 7 .debug_abbrev 000002bc 00000000 00000000 00001a01 2**0
21 CONTENTS, READONLY, DEBUGGING
22 8 .debug_line 000005e9 00000000 00000000 00001cbd 2**0
23 CONTENTS, READONLY, DEBUGGING
24 9 .debug_frame 00000238 00000000 00000000 000022a8 2**2
25 CONTENTS, READONLY, DEBUGGING
26 10 .debug_str 0000026a 00000000 00000000 000024e0 2**0
27 CONTENTS, READONLY, DEBUGGING
28 11 .debug_loc 00000403 00000000 00000000 0000274a 2**0
29 CONTENTS, READONLY, DEBUGGING
30  
31 Disassembly of section .text:
32  
33 00000000 <__vectors>:
34 0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end>
35 4: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
36 8: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
37 c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
38 10: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
39 14: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
40 18: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
41 1c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
42 20: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
43 24: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
44 28: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
45 2c: 0c 94 ab 00 jmp 0x156 ; 0x156 <__vector_11>
46 30: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
47 34: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
48 38: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
49 3c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
50 40: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
51 44: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
52 48: 0c 94 c2 01 jmp 0x384 ; 0x384 <__vector_18>
53 4c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
54 50: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
55 54: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
56 58: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
57 5c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
58 60: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
59 64: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
60  
61 00000068 <__ctors_end>:
62 68: 11 24 eor r1, r1
63 6a: 1f be out 0x3f, r1 ; 63
64 6c: cf ef ldi r28, 0xFF ; 255
65 6e: d8 e0 ldi r29, 0x08 ; 8
66 70: de bf out 0x3e, r29 ; 62
67 72: cd bf out 0x3d, r28 ; 61
68  
69 00000074 <__do_copy_data>:
70 74: 11 e0 ldi r17, 0x01 ; 1
71 76: a0 e0 ldi r26, 0x00 ; 0
72 78: b1 e0 ldi r27, 0x01 ; 1
73 7a: ee ef ldi r30, 0xFE ; 254
74 7c: f4 e0 ldi r31, 0x04 ; 4
75 7e: 02 c0 rjmp .+4 ; 0x84 <__do_copy_data+0x10>
76 80: 05 90 lpm r0, Z+
77 82: 0d 92 st X+, r0
78 84: a8 30 cpi r26, 0x08 ; 8
79 86: b1 07 cpc r27, r17
80 88: d9 f7 brne .-10 ; 0x80 <__do_copy_data+0xc>
81  
82 0000008a <__do_clear_bss>:
83 8a: 13 e0 ldi r17, 0x03 ; 3
84 8c: a8 e0 ldi r26, 0x08 ; 8
85 8e: b1 e0 ldi r27, 0x01 ; 1
86 90: 01 c0 rjmp .+2 ; 0x94 <.do_clear_bss_start>
87  
88 00000092 <.do_clear_bss_loop>:
89 92: 1d 92 st X+, r1
90  
91 00000094 <.do_clear_bss_start>:
92 94: a8 32 cpi r26, 0x28 ; 40
93 96: b1 07 cpc r27, r17
94 98: e1 f7 brne .-8 ; 0x92 <.do_clear_bss_loop>
95 9a: 0e 94 53 00 call 0xa6 ; 0xa6 <main>
96 9e: 0c 94 7d 02 jmp 0x4fa ; 0x4fa <_exit>
97  
98 000000a2 <__bad_interrupt>:
99 a2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
100  
101 000000a6 <main>:
102 #include <avr/interrupt.h>
103  
104 int main(void)
105 {
106 //LEDs_init();
107 USART_Init();
108 a6: 0e 94 2d 02 call 0x45a ; 0x45a <USART_Init>
109 Timer1_init();
110 aa: 0e 94 ea 00 call 0x1d4 ; 0x1d4 <Timer1_init>
111 sei();
112 ae: 78 94 sei
113  
114 pocet_prubehu_casovace = PERIODA_VYCITANI;
115 b0: 81 e0 ldi r24, 0x01 ; 1
116 b2: 80 93 26 03 sts 0x0326, r24
117  
118 while(1)
119 {
120 if (pocet_prubehu_casovace == 0)
121 {
122 pocet_prubehu_casovace = PERIODA_VYCITANI;
123 b6: c1 e0 ldi r28, 0x01 ; 1
124 dekoduj_zpravu_GPS();
125 if(Status_GPS == '1')
126 {
127 USART0_posli_retezec(UTC_time);
128 b8: 08 e0 ldi r16, 0x08 ; 8
129 ba: 12 e0 ldi r17, 0x02 ; 2
130 USART0_posli_znak('\n');
131 USART0_posli_znak('\r');
132 USART0_posli_znak(Status_GPS);
133 USART0_posli_znak('\n');
134 USART0_posli_znak('\r');
135 USART0_posli_retezec(Latitude);
136 bc: 0f 2e mov r0, r31
137 be: f5 e1 ldi r31, 0x15 ; 21
138 c0: ef 2e mov r14, r31
139 c2: f2 e0 ldi r31, 0x02 ; 2
140 c4: ff 2e mov r15, r31
141 c6: f0 2d mov r31, r0
142 USART0_posli_znak('\n');
143 USART0_posli_znak('\r');
144 USART0_posli_retezec(Longitude);
145 c8: 0f 2e mov r0, r31
146 ca: f2 e2 ldi r31, 0x22 ; 34
147 cc: cf 2e mov r12, r31
148 ce: f2 e0 ldi r31, 0x02 ; 2
149 d0: df 2e mov r13, r31
150 d2: f0 2d mov r31, r0
151 USART0_posli_znak('\n');
152 USART0_posli_znak('\r');
153 USART0_posli_retezec(Altitude);
154 d4: 0f 2e mov r0, r31
155 d6: fe ef ldi r31, 0xFE ; 254
156 d8: af 2e mov r10, r31
157 da: f1 e0 ldi r31, 0x01 ; 1
158 dc: bf 2e mov r11, r31
159 de: f0 2d mov r31, r0
160  
161 pocet_prubehu_casovace = PERIODA_VYCITANI;
162  
163 while(1)
164 {
165 if (pocet_prubehu_casovace == 0)
166 e0: 80 91 26 03 lds r24, 0x0326
167 e4: 88 23 and r24, r24
168 e6: e1 f7 brne .-8 ; 0xe0 <main+0x3a>
169 {
170 pocet_prubehu_casovace = PERIODA_VYCITANI;
171 e8: c0 93 26 03 sts 0x0326, r28
172 dekoduj_zpravu_GPS();
173 ec: 0e 94 05 01 call 0x20a ; 0x20a <dekoduj_zpravu_GPS>
174 if(Status_GPS == '1')
175 f0: 80 91 27 03 lds r24, 0x0327
176 f4: 81 33 cpi r24, 0x31 ; 49
177 f6: a1 f7 brne .-24 ; 0xe0 <main+0x3a>
178 {
179 USART0_posli_retezec(UTC_time);
180 f8: c8 01 movw r24, r16
181 fa: 0e 94 45 02 call 0x48a ; 0x48a <USART0_posli_retezec>
182 USART0_posli_znak('\n');
183 fe: 8a e0 ldi r24, 0x0A ; 10
184 100: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
185 USART0_posli_znak('\r');
186 104: 8d e0 ldi r24, 0x0D ; 13
187 106: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
188 USART0_posli_znak(Status_GPS);
189 10a: 80 91 27 03 lds r24, 0x0327
190 10e: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
191 USART0_posli_znak('\n');
192 112: 8a e0 ldi r24, 0x0A ; 10
193 114: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
194 USART0_posli_znak('\r');
195 118: 8d e0 ldi r24, 0x0D ; 13
196 11a: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
197 USART0_posli_retezec(Latitude);
198 11e: c7 01 movw r24, r14
199 120: 0e 94 45 02 call 0x48a ; 0x48a <USART0_posli_retezec>
200 USART0_posli_znak('\n');
201 124: 8a e0 ldi r24, 0x0A ; 10
202 126: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
203 USART0_posli_znak('\r');
204 12a: 8d e0 ldi r24, 0x0D ; 13
205 12c: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
206 USART0_posli_retezec(Longitude);
207 130: c6 01 movw r24, r12
208 132: 0e 94 45 02 call 0x48a ; 0x48a <USART0_posli_retezec>
209 USART0_posli_znak('\n');
210 136: 8a e0 ldi r24, 0x0A ; 10
211 138: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
212 USART0_posli_znak('\r');
213 13c: 8d e0 ldi r24, 0x0D ; 13
214 13e: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
215 USART0_posli_retezec(Altitude);
216 142: c5 01 movw r24, r10
217 144: 0e 94 45 02 call 0x48a ; 0x48a <USART0_posli_retezec>
218 USART0_posli_znak('\n');
219 148: 8a e0 ldi r24, 0x0A ; 10
220 14a: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
221 USART0_posli_znak('\r');
222 14e: 8d e0 ldi r24, 0x0D ; 13
223 150: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
224 154: c5 cf rjmp .-118 ; 0xe0 <main+0x3a>
225  
226 00000156 <__vector_11>:
227 }
228  
229 }
230  
231 SIGNAL (TIMER1_COMPA_vect)
232 {
233 156: 1f 92 push r1
234 158: 0f 92 push r0
235 15a: 0f b6 in r0, 0x3f ; 63
236 15c: 0f 92 push r0
237 15e: 11 24 eor r1, r1
238 160: 2f 93 push r18
239 162: 3f 93 push r19
240 164: 4f 93 push r20
241 166: 5f 93 push r21
242 168: 6f 93 push r22
243 16a: 7f 93 push r23
244 16c: 8f 93 push r24
245 16e: 9f 93 push r25
246 170: af 93 push r26
247 172: bf 93 push r27
248 174: ef 93 push r30
249 176: ff 93 push r31
250 OCR1AH = 0xF4; // Start value in counter ~4s
251 178: 84 ef ldi r24, 0xF4 ; 244
252 17a: 80 93 89 00 sts 0x0089, r24
253 OCR1AL = 0x24;
254 17e: 84 e2 ldi r24, 0x24 ; 36
255 180: 80 93 88 00 sts 0x0088, r24
256 USART0_posli_znak('T');
257 184: 84 e5 ldi r24, 0x54 ; 84
258 186: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
259 if (pocet_prubehu_casovace > 0)
260 18a: 80 91 26 03 lds r24, 0x0326
261 18e: 88 23 and r24, r24
262 190: 29 f0 breq .+10 ; 0x19c <__vector_11+0x46>
263 {
264 pocet_prubehu_casovace--;
265 192: 80 91 26 03 lds r24, 0x0326
266 196: 81 50 subi r24, 0x01 ; 1
267 198: 80 93 26 03 sts 0x0326, r24
268 }
269  
270  
271  
272 19c: ff 91 pop r31
273 19e: ef 91 pop r30
274 1a0: bf 91 pop r27
275 1a2: af 91 pop r26
276 1a4: 9f 91 pop r25
277 1a6: 8f 91 pop r24
278 1a8: 7f 91 pop r23
279 1aa: 6f 91 pop r22
280 1ac: 5f 91 pop r21
281 1ae: 4f 91 pop r20
282 1b0: 3f 91 pop r19
283 1b2: 2f 91 pop r18
284 1b4: 0f 90 pop r0
285 1b6: 0f be out 0x3f, r0 ; 63
286 1b8: 0f 90 pop r0
287 1ba: 1f 90 pop r1
288 1bc: 18 95 reti
289  
290 000001be <LEDs_init>:
291 * Vstup: Zadny
292 * Vystup: Zadny
293 ************************************************************************/
294 volatile void LEDs_init(void)
295 {
296 DDRB = (1<<DDB0)|(1<<DDB1);
297 1be: 83 e0 ldi r24, 0x03 ; 3
298 1c0: 84 b9 out 0x04, r24 ; 4
299 }
300 1c2: 08 95 ret
301  
302 000001c4 <LED_horni_on>:
303 * Vstup: Zadny
304 * Vystup: Zadny
305 ************************************************************************/
306 volatile void LED_horni_on(void)
307 {
308 PORTB |= (1<<PB0);
309 1c4: 28 9a sbi 0x05, 0 ; 5
310 }
311 1c6: 08 95 ret
312  
313 000001c8 <LED_horni_off>:
314 * Vstup: Zadny
315 * Vystup: Zadny
316 ************************************************************************/
317 volatile void LED_horni_off(void)
318 {
319 PORTB &= ~(1<<PB0);
320 1c8: 28 98 cbi 0x05, 0 ; 5
321 }
322 1ca: 08 95 ret
323  
324 000001cc <LED_spodni_on>:
325 * Vstup: Zadny
326 * Vystup: Zadny
327 ************************************************************************/
328 volatile void LED_spodni_on(void)
329 {
330 PORTB |= (1<<PB1);
331 1cc: 29 9a sbi 0x05, 1 ; 5
332 }
333 1ce: 08 95 ret
334  
335 000001d0 <LED_spodni_off>:
336 * Vstup: Zadny
337 * Vystup: Zadny
338 ************************************************************************/
339 volatile void LED_spodni_off(void)
340 {
341 PORTB &= ~(1<<PB1);
342 1d0: 29 98 cbi 0x05, 1 ; 5
343 }
344 1d2: 08 95 ret
345  
346 000001d4 <Timer1_init>:
347  
348 #include <avr/io.h>
349  
350 void Timer1_init(void)
351 {
352 TCCR1B |= 1<<WGM12; // T1 in CTC mode
353 1d4: e1 e8 ldi r30, 0x81 ; 129
354 1d6: f0 e0 ldi r31, 0x00 ; 0
355 1d8: 80 81 ld r24, Z
356 1da: 88 60 ori r24, 0x08 ; 8
357 1dc: 80 83 st Z, r24
358 TCCR1B |= 1<<CS12; // f_osc/1024
359 1de: 80 81 ld r24, Z
360 1e0: 84 60 ori r24, 0x04 ; 4
361 1e2: 80 83 st Z, r24
362 TCCR1B |= 1<<CS10; // f_osc/1024
363 1e4: 80 81 ld r24, Z
364 1e6: 81 60 ori r24, 0x01 ; 1
365 1e8: 80 83 st Z, r24
366  
367 OCR1AH = 0xF4; // Start value in counter ~4s
368 1ea: 84 ef ldi r24, 0xF4 ; 244
369 1ec: 80 93 89 00 sts 0x0089, r24
370 OCR1AL = 0x24;
371 1f0: 84 e2 ldi r24, 0x24 ; 36
372 1f2: 80 93 88 00 sts 0x0088, r24
373  
374 TCNT1H = 0; // Start value in counter
375 1f6: 10 92 85 00 sts 0x0085, r1
376 TCNT1L = 0;
377 1fa: 10 92 84 00 sts 0x0084, r1
378  
379  
380 TIMSK1 |= 1<<OCIE1A; // enable interrupt from T1 when compare match
381 1fe: ef e6 ldi r30, 0x6F ; 111
382 200: f0 e0 ldi r31, 0x00 ; 0
383 202: 80 81 ld r24, Z
384 204: 82 60 ori r24, 0x02 ; 2
385 206: 80 83 st Z, r24
386 }
387 208: 08 95 ret
388  
389 0000020a <dekoduj_zpravu_GPS>:
390 * Ucel: Z RX0_buffer vytahne informace o soucasne poloze, je tam ulozena cela veta RMC
391 * Vstup: Zadny
392 * Vystup: Zadny
393 ************************************************************************/
394 void dekoduj_zpravu_GPS (void)
395 {
396 20a: 2f 92 push r2
397 20c: 3f 92 push r3
398 20e: 4f 92 push r4
399 210: 5f 92 push r5
400 212: 6f 92 push r6
401 214: 7f 92 push r7
402 216: 8f 92 push r8
403 218: 9f 92 push r9
404 21a: bf 92 push r11
405 21c: cf 92 push r12
406 21e: df 92 push r13
407 220: ef 92 push r14
408 222: ff 92 push r15
409 224: 0f 93 push r16
410 226: 1f 93 push r17
411 228: cf 93 push r28
412 22a: df 93 push r29
413 cli();
414 22c: f8 94 cli
415  
416 short i, j = 0, k = 0, l = 0;
417 short pocet_carek = 0;
418 for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
419 22e: c0 90 24 03 lds r12, 0x0324
420 232: dd 24 eor r13, r13
421 234: 1c 14 cp r1, r12
422 236: 1d 04 cpc r1, r13
423 238: 0c f0 brlt .+2 ; 0x23c <dekoduj_zpravu_GPS+0x32>
424 23a: 84 c0 rjmp .+264 ; 0x344 <dekoduj_zpravu_GPS+0x13a>
425 23c: b0 90 27 03 lds r11, 0x0327
426 240: a0 e3 ldi r26, 0x30 ; 48
427 242: b2 e0 ldi r27, 0x02 ; 2
428 void dekoduj_zpravu_GPS (void)
429 {
430 cli();
431  
432 short i, j = 0, k = 0, l = 0;
433 short pocet_carek = 0;
434 244: 20 e0 ldi r18, 0x00 ; 0
435 246: 30 e0 ldi r19, 0x00 ; 0
436 ************************************************************************/
437 void dekoduj_zpravu_GPS (void)
438 {
439 cli();
440  
441 short i, j = 0, k = 0, l = 0;
442 248: 00 e0 ldi r16, 0x00 ; 0
443 24a: 10 e0 ldi r17, 0x00 ; 0
444 24c: ee 24 eor r14, r14
445 24e: ff 24 eor r15, r15
446 250: c0 e0 ldi r28, 0x00 ; 0
447 252: d0 e0 ldi r29, 0x00 ; 0
448 short pocet_carek = 0;
449 for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
450 254: 60 e0 ldi r22, 0x00 ; 0
451 256: 70 e0 ldi r23, 0x00 ; 0
452 k++;
453 }
454 if (pocet_carek == 4 || pocet_carek == 5)
455 {
456  
457 Longitude[j] = NMEA_retezec.obsah[i];
458 258: 0f 2e mov r0, r31
459 25a: f2 e2 ldi r31, 0x22 ; 34
460 25c: 6f 2e mov r6, r31
461 25e: f2 e0 ldi r31, 0x02 ; 2
462 260: 7f 2e mov r7, r31
463 262: f0 2d mov r31, r0
464 UTC_time[l] = NMEA_retezec.obsah[i];
465 l++;
466 }
467 if (pocet_carek == 2 || pocet_carek == 3)
468 {
469 Latitude[k] = NMEA_retezec.obsah[i];
470 264: 0f 2e mov r0, r31
471 266: f5 e1 ldi r31, 0x15 ; 21
472 268: 4f 2e mov r4, r31
473 26a: f2 e0 ldi r31, 0x02 ; 2
474 26c: 5f 2e mov r5, r31
475 26e: f0 2d mov r31, r0
476 short pocet_carek = 0;
477 for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
478 {
479 if (pocet_carek == 1)
480 {
481 UTC_time[l] = NMEA_retezec.obsah[i];
482 270: 0f 2e mov r0, r31
483 272: f8 e0 ldi r31, 0x08 ; 8
484 274: 8f 2e mov r8, r31
485 276: f2 e0 ldi r31, 0x02 ; 2
486 278: 9f 2e mov r9, r31
487 27a: f0 2d mov r31, r0
488 j = 0;
489 }
490  
491 if (pocet_carek == 9)
492 {
493 Altitude[j] = NMEA_retezec.obsah[i];
494 27c: 0f 2e mov r0, r31
495 27e: fe ef ldi r31, 0xFE ; 254
496 280: 2f 2e mov r2, r31
497 282: f1 e0 ldi r31, 0x01 ; 1
498 284: 3f 2e mov r3, r31
499 286: f0 2d mov r31, r0
500  
501 short i, j = 0, k = 0, l = 0;
502 short pocet_carek = 0;
503 for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
504 {
505 if (pocet_carek == 1)
506 288: 21 30 cpi r18, 0x01 ; 1
507 28a: 31 05 cpc r19, r1
508 28c: 41 f4 brne .+16 ; 0x29e <dekoduj_zpravu_GPS+0x94>
509 {
510 UTC_time[l] = NMEA_retezec.obsah[i];
511 28e: f4 01 movw r30, r8
512 290: e0 0f add r30, r16
513 292: f1 1f adc r31, r17
514 294: 8c 91 ld r24, X
515 296: 80 83 st Z, r24
516 l++;
517 298: 0f 5f subi r16, 0xFF ; 255
518 29a: 1f 4f sbci r17, 0xFF ; 255
519 29c: 19 c0 rjmp .+50 ; 0x2d0 <dekoduj_zpravu_GPS+0xc6>
520 }
521 if (pocet_carek == 2 || pocet_carek == 3)
522 29e: a9 01 movw r20, r18
523 2a0: c9 01 movw r24, r18
524 2a2: 02 97 sbiw r24, 0x02 ; 2
525 2a4: 82 30 cpi r24, 0x02 ; 2
526 2a6: 91 05 cpc r25, r1
527 2a8: 40 f4 brcc .+16 ; 0x2ba <dekoduj_zpravu_GPS+0xb0>
528 {
529 Latitude[k] = NMEA_retezec.obsah[i];
530 2aa: f2 01 movw r30, r4
531 2ac: ee 0d add r30, r14
532 2ae: ff 1d adc r31, r15
533 2b0: 8c 91 ld r24, X
534 2b2: 80 83 st Z, r24
535 k++;
536 2b4: 08 94 sec
537 2b6: e1 1c adc r14, r1
538 2b8: f1 1c adc r15, r1
539 }
540 if (pocet_carek == 4 || pocet_carek == 5)
541 2ba: ca 01 movw r24, r20
542 2bc: 04 97 sbiw r24, 0x04 ; 4
543 2be: 82 30 cpi r24, 0x02 ; 2
544 2c0: 91 05 cpc r25, r1
545 2c2: 30 f4 brcc .+12 ; 0x2d0 <dekoduj_zpravu_GPS+0xc6>
546 {
547  
548 Longitude[j] = NMEA_retezec.obsah[i];
549 2c4: f3 01 movw r30, r6
550 2c6: ec 0f add r30, r28
551 2c8: fd 1f adc r31, r29
552 2ca: 8c 91 ld r24, X
553 2cc: 80 83 st Z, r24
554 j++;
555 2ce: 21 96 adiw r28, 0x01 ; 1
556 }
557 if (pocet_carek == 6)
558 2d0: 26 30 cpi r18, 0x06 ; 6
559 2d2: 31 05 cpc r19, r1
560 2d4: c1 f4 brne .+48 ; 0x306 <dekoduj_zpravu_GPS+0xfc>
561 {
562 UTC_time[l-1] = 0;
563 2d6: c4 01 movw r24, r8
564 2d8: 80 0f add r24, r16
565 2da: 91 1f adc r25, r17
566 2dc: 01 97 sbiw r24, 0x01 ; 1
567 2de: fc 01 movw r30, r24
568 2e0: 10 82 st Z, r1
569 Latitude[k-1] = 0;
570 2e2: c2 01 movw r24, r4
571 2e4: 8e 0d add r24, r14
572 2e6: 9f 1d adc r25, r15
573 2e8: 01 97 sbiw r24, 0x01 ; 1
574 2ea: fc 01 movw r30, r24
575 2ec: 10 82 st Z, r1
576 Longitude[j-1] = 0;
577 2ee: c3 01 movw r24, r6
578 2f0: 8c 0f add r24, r28
579 2f2: 9d 1f adc r25, r29
580 2f4: 01 97 sbiw r24, 0x01 ; 1
581 2f6: fc 01 movw r30, r24
582 2f8: 10 82 st Z, r1
583 * Funkce: dekoduj_zpravu_GPS
584 * Ucel: Z RX0_buffer vytahne informace o soucasne poloze, je tam ulozena cela veta RMC
585 * Vstup: Zadny
586 * Vystup: Zadny
587 ************************************************************************/
588 void dekoduj_zpravu_GPS (void)
589 2fa: fd 01 movw r30, r26
590 2fc: 31 97 sbiw r30, 0x01 ; 1
591 {
592 UTC_time[l-1] = 0;
593 Latitude[k-1] = 0;
594 Longitude[j-1] = 0;
595  
596 Status_GPS = NMEA_retezec.obsah[i-1];
597 2fe: b0 80 ld r11, Z
598 j = 0;
599 300: c0 e0 ldi r28, 0x00 ; 0
600 302: d0 e0 ldi r29, 0x00 ; 0
601 304: 09 c0 rjmp .+18 ; 0x318 <dekoduj_zpravu_GPS+0x10e>
602 }
603  
604 if (pocet_carek == 9)
605 306: 29 30 cpi r18, 0x09 ; 9
606 308: 31 05 cpc r19, r1
607 30a: 31 f4 brne .+12 ; 0x318 <dekoduj_zpravu_GPS+0x10e>
608 {
609 Altitude[j] = NMEA_retezec.obsah[i];
610 30c: f1 01 movw r30, r2
611 30e: ec 0f add r30, r28
612 310: fd 1f adc r31, r29
613 312: 8c 91 ld r24, X
614 314: 80 83 st Z, r24
615 j++;
616 316: 21 96 adiw r28, 0x01 ; 1
617 }
618  
619 if (NMEA_retezec.obsah[i] == ',')
620 318: 8d 91 ld r24, X+
621 31a: 8c 32 cpi r24, 0x2C ; 44
622 31c: 11 f4 brne .+4 ; 0x322 <dekoduj_zpravu_GPS+0x118>
623 {
624 pocet_carek++;
625 31e: 2f 5f subi r18, 0xFF ; 255
626 320: 3f 4f sbci r19, 0xFF ; 255
627 }
628 if (pocet_carek >9)
629 322: 2a 30 cpi r18, 0x0A ; 10
630 324: 31 05 cpc r19, r1
631 326: 34 f0 brlt .+12 ; 0x334 <dekoduj_zpravu_GPS+0x12a>
632 328: b0 92 27 03 sts 0x0327, r11
633 {
634 Altitude[j-1] = 0; // konec Stringu
635 32c: c3 50 subi r28, 0x03 ; 3
636 32e: de 4f sbci r29, 0xFE ; 254
637 330: 18 82 st Y, r1
638 break; // nema vyznam dal zapisovat, potrebne je zapsano v Altitude
639 332: 08 c0 rjmp .+16 ; 0x344 <dekoduj_zpravu_GPS+0x13a>
640 {
641 cli();
642  
643 short i, j = 0, k = 0, l = 0;
644 short pocet_carek = 0;
645 for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
646 334: 6f 5f subi r22, 0xFF ; 255
647 336: 7f 4f sbci r23, 0xFF ; 255
648 338: 6c 15 cp r22, r12
649 33a: 7d 05 cpc r23, r13
650 33c: 0c f4 brge .+2 ; 0x340 <dekoduj_zpravu_GPS+0x136>
651 33e: a4 cf rjmp .-184 ; 0x288 <dekoduj_zpravu_GPS+0x7e>
652 340: b0 92 27 03 sts 0x0327, r11
653 Altitude[j-1] = 0; // konec Stringu
654 break; // nema vyznam dal zapisovat, potrebne je zapsano v Altitude
655 }
656 }
657  
658 sei();
659 344: 78 94 sei
660 }
661 346: df 91 pop r29
662 348: cf 91 pop r28
663 34a: 1f 91 pop r17
664 34c: 0f 91 pop r16
665 34e: ff 90 pop r15
666 350: ef 90 pop r14
667 352: df 90 pop r13
668 354: cf 90 pop r12
669 356: bf 90 pop r11
670 358: 9f 90 pop r9
671 35a: 8f 90 pop r8
672 35c: 7f 90 pop r7
673 35e: 6f 90 pop r6
674 360: 5f 90 pop r5
675 362: 4f 90 pop r4
676 364: 3f 90 pop r3
677 366: 2f 90 pop r2
678 368: 08 95 ret
679  
680 0000036a <USART0_smaz_buffer>:
681 * Vstup: Jaky buffer ma smazat (pro USART 0 nebo 1)
682 * Vystup: Zadny
683 ************************************************************************/
684 void USART0_smaz_buffer (void)
685 {
686 cli();
687 36a: f8 94 cli
688 36c: e8 e0 ldi r30, 0x08 ; 8
689 36e: f1 e0 ldi r31, 0x01 ; 1
690 * Funkce: USART0_smaz_buffer
691 * Ucel: Smaze (zaplni nulami) prijimaci buffer
692 * Vstup: Jaky buffer ma smazat (pro USART 0 nebo 1)
693 * Vystup: Zadny
694 ************************************************************************/
695 void USART0_smaz_buffer (void)
696 370: 8d ef ldi r24, 0xFD ; 253
697 372: 91 e0 ldi r25, 0x01 ; 1
698 cli();
699 unsigned char i;
700  
701 for (i=0; i <= VELIKOST_PRIJIMACIHO_BUFFERU;i++) // maze se cely buffer pro jistotu
702 {
703 RX0_buffer.obsah[i] = 0;
704 374: 11 92 st Z+, r1
705 void USART0_smaz_buffer (void)
706 {
707 cli();
708 unsigned char i;
709  
710 for (i=0; i <= VELIKOST_PRIJIMACIHO_BUFFERU;i++) // maze se cely buffer pro jistotu
711 376: e8 17 cp r30, r24
712 378: f9 07 cpc r31, r25
713 37a: e1 f7 brne .-8 ; 0x374 <USART0_smaz_buffer+0xa>
714 {
715 RX0_buffer.obsah[i] = 0;
716 }
717 RX0_buffer.zaplneno_bytu = 0;
718 37c: 10 92 fc 01 sts 0x01FC, r1
719  
720  
721 sei();
722 380: 78 94 sei
723 }
724 382: 08 95 ret
725  
726 00000384 <__vector_18>:
727 * Ucel: Funkce se vola pri prijmuti znaku od USART0
728 * Vstup: Zdroj preruseni
729 * Vystup: Zadny
730 ************************************************************************/
731 SIGNAL (USART_RX_vect)
732 {
733 384: 1f 92 push r1
734 386: 0f 92 push r0
735 388: 0f b6 in r0, 0x3f ; 63
736 38a: 0f 92 push r0
737 38c: 11 24 eor r1, r1
738 38e: 2f 93 push r18
739 390: 3f 93 push r19
740 392: 4f 93 push r20
741 394: 5f 93 push r21
742 396: 6f 93 push r22
743 398: 7f 93 push r23
744 39a: 8f 93 push r24
745 39c: 9f 93 push r25
746 39e: af 93 push r26
747 3a0: bf 93 push r27
748 3a2: cf 93 push r28
749 3a4: ef 93 push r30
750 3a6: ff 93 push r31
751 char znak = UDR0;
752 3a8: c0 91 c6 00 lds r28, 0x00C6
753 if (RX0_buffer.zaplneno_bytu < VELIKOST_PRIJIMACIHO_BUFFERU-1)
754 3ac: 80 91 fc 01 lds r24, 0x01FC
755 3b0: 83 3f cpi r24, 0xF3 ; 243
756 3b2: 50 f4 brcc .+20 ; 0x3c8 <__vector_18+0x44>
757 {
758 RX0_buffer.obsah[RX0_buffer.zaplneno_bytu] = znak;
759 3b4: e8 e0 ldi r30, 0x08 ; 8
760 3b6: f1 e0 ldi r31, 0x01 ; 1
761 3b8: e8 0f add r30, r24
762 3ba: f1 1d adc r31, r1
763 3bc: c0 83 st Z, r28
764 RX0_buffer.obsah[RX0_buffer.zaplneno_bytu+1] = 0; // konec stringu
765 3be: 11 82 std Z+1, r1 ; 0x01
766 RX0_buffer.zaplneno_bytu++;
767 3c0: 8f 5f subi r24, 0xFF ; 255
768 3c2: 80 93 fc 01 sts 0x01FC, r24
769 3c6: 0c c0 rjmp .+24 ; 0x3e0 <__vector_18+0x5c>
770 }
771 else
772 {
773 USART0_smaz_buffer();
774 3c8: 0e 94 b5 01 call 0x36a ; 0x36a <USART0_smaz_buffer>
775 RX0_buffer.obsah[RX0_buffer.zaplneno_bytu] = znak;
776 3cc: 80 91 fc 01 lds r24, 0x01FC
777 3d0: e8 e0 ldi r30, 0x08 ; 8
778 3d2: f1 e0 ldi r31, 0x01 ; 1
779 3d4: e8 0f add r30, r24
780 3d6: f1 1d adc r31, r1
781 3d8: c0 83 st Z, r28
782 RX0_buffer.zaplneno_bytu++;
783 3da: 8f 5f subi r24, 0xFF ; 255
784 3dc: 80 93 fc 01 sts 0x01FC, r24
785 }
786  
787 if (zacatek_zpravy != 1 && strstr(RX0_buffer.obsah,"$GPGGA") != 0)
788 3e0: 80 91 25 03 lds r24, 0x0325
789 3e4: 81 30 cpi r24, 0x01 ; 1
790 3e6: 69 f0 breq .+26 ; 0x402 <__vector_18+0x7e>
791 3e8: 88 e0 ldi r24, 0x08 ; 8
792 3ea: 91 e0 ldi r25, 0x01 ; 1
793 3ec: 60 e0 ldi r22, 0x00 ; 0
794 3ee: 71 e0 ldi r23, 0x01 ; 1
795 3f0: 0e 94 63 02 call 0x4c6 ; 0x4c6 <strstr>
796 3f4: 00 97 sbiw r24, 0x00 ; 0
797 3f6: 29 f0 breq .+10 ; 0x402 <__vector_18+0x7e>
798 {
799 zacatek_zpravy = 1;
800 3f8: 81 e0 ldi r24, 0x01 ; 1
801 3fa: 80 93 25 03 sts 0x0325, r24
802 USART0_smaz_buffer(); // aby se zprava ukladala od zacatku bufferu
803 3fe: 0e 94 b5 01 call 0x36a ; 0x36a <USART0_smaz_buffer>
804 }
805  
806 if (znak == '*' && zacatek_zpravy == 1) // cela zprava je prijata
807 402: ca 32 cpi r28, 0x2A ; 42
808 404: 81 f4 brne .+32 ; 0x426 <__vector_18+0xa2>
809 406: 80 91 25 03 lds r24, 0x0325
810 40a: 81 30 cpi r24, 0x01 ; 1
811 40c: 61 f4 brne .+24 ; 0x426 <__vector_18+0xa2>
812 {
813 //USART0_posli_retezec(RX0_buffer.obsah);
814 strcpy(NMEA_retezec.obsah,RX0_buffer.obsah); // NMEA zprava se prekopiruje do NMEA_retezec, aby pri pozadavku na vycteni dat byla data v kuse a nenastal pripad, ze bude NMEA zprava teprve vycitana.
815 40e: 80 e3 ldi r24, 0x30 ; 48
816 410: 92 e0 ldi r25, 0x02 ; 2
817 412: 68 e0 ldi r22, 0x08 ; 8
818 414: 71 e0 ldi r23, 0x01 ; 1
819 416: 0e 94 5c 02 call 0x4b8 ; 0x4b8 <strcpy>
820 NMEA_retezec.zaplneno_bytu = RX0_buffer.zaplneno_bytu;
821 41a: 80 91 fc 01 lds r24, 0x01FC
822 41e: 80 93 24 03 sts 0x0324, r24
823 zacatek_zpravy = 0;
824 422: 10 92 25 03 sts 0x0325, r1
825 }
826 }
827 426: ff 91 pop r31
828 428: ef 91 pop r30
829 42a: cf 91 pop r28
830 42c: bf 91 pop r27
831 42e: af 91 pop r26
832 430: 9f 91 pop r25
833 432: 8f 91 pop r24
834 434: 7f 91 pop r23
835 436: 6f 91 pop r22
836 438: 5f 91 pop r21
837 43a: 4f 91 pop r20
838 43c: 3f 91 pop r19
839 43e: 2f 91 pop r18
840 440: 0f 90 pop r0
841 442: 0f be out 0x3f, r0 ; 63
842 444: 0f 90 pop r0
843 446: 1f 90 pop r1
844 448: 18 95 reti
845  
846 0000044a <USART0_posli_znak>:
847 * Vystup: Zadny
848 ************************************************************************/
849 void USART0_posli_znak( unsigned char data )
850 {
851 /* Wait for empty transmit buffer */
852 while ( !( UCSR0A & (1<<UDRE0)) )
853 44a: e0 ec ldi r30, 0xC0 ; 192
854 44c: f0 e0 ldi r31, 0x00 ; 0
855 44e: 90 81 ld r25, Z
856 450: 95 ff sbrs r25, 5
857 452: fd cf rjmp .-6 ; 0x44e <USART0_posli_znak+0x4>
858 ;
859 /* Put data into buffer, sends the data */
860 UDR0 = data;
861 454: 80 93 c6 00 sts 0x00C6, r24
862 }
863 458: 08 95 ret
864  
865 0000045a <USART_Init>:
866 void USART_Init(void)
867 {
868 unsigned int baud;
869 baud = F_CPU/16/UART0_BAUD_RATE -1;
870 /* Set baud rate */
871 UBRR0H = (unsigned char)(baud>>8);
872 45a: 10 92 c5 00 sts 0x00C5, r1
873 UBRR0L = (unsigned char)baud;
874 45e: 87 e6 ldi r24, 0x67 ; 103
875 460: 80 93 c4 00 sts 0x00C4, r24
876 /* Enable receiver and transmitter, enable interrupt after receiving a new byte */
877 UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
878 464: 88 e9 ldi r24, 0x98 ; 152
879 466: 80 93 c1 00 sts 0x00C1, r24
880 /* Set frame format: 8data, 1stop bit */
881 UCSR0C = (3<<UCSZ00);
882 46a: 86 e0 ldi r24, 0x06 ; 6
883 46c: 80 93 c2 00 sts 0x00C2, r24
884  
885 USART0_posli_znak('A');
886 470: 81 e4 ldi r24, 0x41 ; 65
887 472: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
888 USART0_posli_znak('K');
889 476: 8b e4 ldi r24, 0x4B ; 75
890 478: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
891 USART0_posli_znak('\n');
892 47c: 8a e0 ldi r24, 0x0A ; 10
893 47e: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
894 USART0_posli_znak('\r');
895 482: 8d e0 ldi r24, 0x0D ; 13
896 484: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
897 //delay_ms(3000); // modulu se musi dat cas na vypocet baud rychlosti
898 }
899 488: 08 95 ret
900  
901 0000048a <USART0_posli_retezec>:
902 * Ucel: Odesle postupne znak po znaku zadany retezec pres USART0
903 * Vstup: Retezec k odeslani
904 * Vystup: Zadny
905 ************************************************************************/
906 void USART0_posli_retezec (const unsigned char *retezec )
907 {
908 48a: cf 93 push r28
909 48c: df 93 push r29
910 48e: ec 01 movw r28, r24
911 while (*retezec)
912 490: 88 81 ld r24, Y
913 492: 88 23 and r24, r24
914 494: 31 f0 breq .+12 ; 0x4a2 <USART0_posli_retezec+0x18>
915 * Funkce: USART0_posli_retezec()
916 * Ucel: Odesle postupne znak po znaku zadany retezec pres USART0
917 * Vstup: Retezec k odeslani
918 * Vystup: Zadny
919 ************************************************************************/
920 void USART0_posli_retezec (const unsigned char *retezec )
921 496: 21 96 adiw r28, 0x01 ; 1
922 {
923 while (*retezec)
924 USART0_posli_znak(*retezec++);
925 498: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
926 * Vstup: Retezec k odeslani
927 * Vystup: Zadny
928 ************************************************************************/
929 void USART0_posli_retezec (const unsigned char *retezec )
930 {
931 while (*retezec)
932 49c: 89 91 ld r24, Y+
933 49e: 88 23 and r24, r24
934 4a0: d9 f7 brne .-10 ; 0x498 <USART0_posli_retezec+0xe>
935 USART0_posli_znak(*retezec++);
936  
937 }
938 4a2: df 91 pop r29
939 4a4: cf 91 pop r28
940 4a6: 08 95 ret
941  
942 000004a8 <USART0_prijmi_znak>:
943 * Vystup: Prijaty znak
944 ************************************************************************/
945 unsigned char USART0_prijmi_znak( void )
946 {
947 /* Wait for data to be received */
948 while ( !(UCSR0A & (1<<RXC0)) )
949 4a8: e0 ec ldi r30, 0xC0 ; 192
950 4aa: f0 e0 ldi r31, 0x00 ; 0
951 4ac: 80 81 ld r24, Z
952 4ae: 88 23 and r24, r24
953 4b0: ec f7 brge .-6 ; 0x4ac <USART0_prijmi_znak+0x4>
954 ;
955 /* Get and return received data from buffer */
956 return UDR0;
957 4b2: 80 91 c6 00 lds r24, 0x00C6
958 }
959 4b6: 08 95 ret
960  
961 000004b8 <strcpy>:
962 4b8: fb 01 movw r30, r22
963 4ba: dc 01 movw r26, r24
964 4bc: 01 90 ld r0, Z+
965 4be: 0d 92 st X+, r0
966 4c0: 00 20 and r0, r0
967 4c2: e1 f7 brne .-8 ; 0x4bc <strcpy+0x4>
968 4c4: 08 95 ret
969  
970 000004c6 <strstr>:
971 4c6: fb 01 movw r30, r22
972 4c8: 51 91 ld r21, Z+
973 4ca: 55 23 and r21, r21
974 4cc: a9 f0 breq .+42 ; 0x4f8 <strstr+0x32>
975 4ce: bf 01 movw r22, r30
976 4d0: dc 01 movw r26, r24
977 4d2: 4d 91 ld r20, X+
978 4d4: 45 17 cp r20, r21
979 4d6: 41 11 cpse r20, r1
980 4d8: e1 f7 brne .-8 ; 0x4d2 <strstr+0xc>
981 4da: 59 f4 brne .+22 ; 0x4f2 <strstr+0x2c>
982 4dc: cd 01 movw r24, r26
983 4de: 01 90 ld r0, Z+
984 4e0: 00 20 and r0, r0
985 4e2: 49 f0 breq .+18 ; 0x4f6 <strstr+0x30>
986 4e4: 4d 91 ld r20, X+
987 4e6: 40 15 cp r20, r0
988 4e8: 41 11 cpse r20, r1
989 4ea: c9 f3 breq .-14 ; 0x4de <strstr+0x18>
990 4ec: fb 01 movw r30, r22
991 4ee: 41 11 cpse r20, r1
992 4f0: ef cf rjmp .-34 ; 0x4d0 <strstr+0xa>
993 4f2: 81 e0 ldi r24, 0x01 ; 1
994 4f4: 90 e0 ldi r25, 0x00 ; 0
995 4f6: 01 97 sbiw r24, 0x01 ; 1
996 4f8: 08 95 ret
997  
998 000004fa <_exit>:
999 4fa: f8 94 cli
1000  
1001 000004fc <__stop_program>:
1002 4fc: ff cf rjmp .-2 ; 0x4fc <__stop_program>