Balon_sonda.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000008 00800100 000004fe 00000592 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 000004fe 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 00000220 00800108 00800108 0000059a 2**0
ALLOC
3 .stab 00000888 00000000 00000000 0000059c 2**2
CONTENTS, READONLY, DEBUGGING
4 .stabstr 00000149 00000000 00000000 00000e24 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_aranges 000000e0 00000000 00000000 00000f70 2**3
CONTENTS, READONLY, DEBUGGING
6 .debug_info 000009b1 00000000 00000000 00001050 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 000002bc 00000000 00000000 00001a01 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 000005e9 00000000 00000000 00001cbd 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_frame 00000238 00000000 00000000 000022a8 2**2
CONTENTS, READONLY, DEBUGGING
10 .debug_str 0000026a 00000000 00000000 000024e0 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_loc 00000403 00000000 00000000 0000274a 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 34 00 jmp 0x68 ; 0x68 <__ctors_end>
4: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
8: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
10: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
14: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
18: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
1c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
20: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
24: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
28: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
2c: 0c 94 ab 00 jmp 0x156 ; 0x156 <__vector_11>
30: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
34: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
38: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
3c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
40: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
44: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
48: 0c 94 c2 01 jmp 0x384 ; 0x384 <__vector_18>
4c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
50: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
54: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
58: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
5c: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
60: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
64: 0c 94 51 00 jmp 0xa2 ; 0xa2 <__bad_interrupt>
00000068 <__ctors_end>:
68: 11 24 eor r1, r1
6a: 1f be out 0x3f, r1 ; 63
6c: cf ef ldi r28, 0xFF ; 255
6e: d8 e0 ldi r29, 0x08 ; 8
70: de bf out 0x3e, r29 ; 62
72: cd bf out 0x3d, r28 ; 61
00000074 <__do_copy_data>:
74: 11 e0 ldi r17, 0x01 ; 1
76: a0 e0 ldi r26, 0x00 ; 0
78: b1 e0 ldi r27, 0x01 ; 1
7a: ee ef ldi r30, 0xFE ; 254
7c: f4 e0 ldi r31, 0x04 ; 4
7e: 02 c0 rjmp .+4 ; 0x84 <__do_copy_data+0x10>
80: 05 90 lpm r0, Z+
82: 0d 92 st X+, r0
84: a8 30 cpi r26, 0x08 ; 8
86: b1 07 cpc r27, r17
88: d9 f7 brne .-10 ; 0x80 <__do_copy_data+0xc>
0000008a <__do_clear_bss>:
8a: 13 e0 ldi r17, 0x03 ; 3
8c: a8 e0 ldi r26, 0x08 ; 8
8e: b1 e0 ldi r27, 0x01 ; 1
90: 01 c0 rjmp .+2 ; 0x94 <.do_clear_bss_start>
00000092 <.do_clear_bss_loop>:
92: 1d 92 st X+, r1
00000094 <.do_clear_bss_start>:
94: a8 32 cpi r26, 0x28 ; 40
96: b1 07 cpc r27, r17
98: e1 f7 brne .-8 ; 0x92 <.do_clear_bss_loop>
9a: 0e 94 53 00 call 0xa6 ; 0xa6 <main>
9e: 0c 94 7d 02 jmp 0x4fa ; 0x4fa <_exit>
000000a2 <__bad_interrupt>:
a2: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000a6 <main>:
#include <avr/interrupt.h>
int main(void)
{
//LEDs_init();
USART_Init();
a6: 0e 94 2d 02 call 0x45a ; 0x45a <USART_Init>
Timer1_init();
aa: 0e 94 ea 00 call 0x1d4 ; 0x1d4 <Timer1_init>
sei();
ae: 78 94 sei
pocet_prubehu_casovace = PERIODA_VYCITANI;
b0: 81 e0 ldi r24, 0x01 ; 1
b2: 80 93 26 03 sts 0x0326, r24
while(1)
{
if (pocet_prubehu_casovace == 0)
{
pocet_prubehu_casovace = PERIODA_VYCITANI;
b6: c1 e0 ldi r28, 0x01 ; 1
dekoduj_zpravu_GPS();
if(Status_GPS == '1')
{
USART0_posli_retezec(UTC_time);
b8: 08 e0 ldi r16, 0x08 ; 8
ba: 12 e0 ldi r17, 0x02 ; 2
USART0_posli_znak('\n');
USART0_posli_znak('\r');
USART0_posli_znak(Status_GPS);
USART0_posli_znak('\n');
USART0_posli_znak('\r');
USART0_posli_retezec(Latitude);
bc: 0f 2e mov r0, r31
be: f5 e1 ldi r31, 0x15 ; 21
c0: ef 2e mov r14, r31
c2: f2 e0 ldi r31, 0x02 ; 2
c4: ff 2e mov r15, r31
c6: f0 2d mov r31, r0
USART0_posli_znak('\n');
USART0_posli_znak('\r');
USART0_posli_retezec(Longitude);
c8: 0f 2e mov r0, r31
ca: f2 e2 ldi r31, 0x22 ; 34
cc: cf 2e mov r12, r31
ce: f2 e0 ldi r31, 0x02 ; 2
d0: df 2e mov r13, r31
d2: f0 2d mov r31, r0
USART0_posli_znak('\n');
USART0_posli_znak('\r');
USART0_posli_retezec(Altitude);
d4: 0f 2e mov r0, r31
d6: fe ef ldi r31, 0xFE ; 254
d8: af 2e mov r10, r31
da: f1 e0 ldi r31, 0x01 ; 1
dc: bf 2e mov r11, r31
de: f0 2d mov r31, r0
pocet_prubehu_casovace = PERIODA_VYCITANI;
while(1)
{
if (pocet_prubehu_casovace == 0)
e0: 80 91 26 03 lds r24, 0x0326
e4: 88 23 and r24, r24
e6: e1 f7 brne .-8 ; 0xe0 <main+0x3a>
{
pocet_prubehu_casovace = PERIODA_VYCITANI;
e8: c0 93 26 03 sts 0x0326, r28
dekoduj_zpravu_GPS();
ec: 0e 94 05 01 call 0x20a ; 0x20a <dekoduj_zpravu_GPS>
if(Status_GPS == '1')
f0: 80 91 27 03 lds r24, 0x0327
f4: 81 33 cpi r24, 0x31 ; 49
f6: a1 f7 brne .-24 ; 0xe0 <main+0x3a>
{
USART0_posli_retezec(UTC_time);
f8: c8 01 movw r24, r16
fa: 0e 94 45 02 call 0x48a ; 0x48a <USART0_posli_retezec>
USART0_posli_znak('\n');
fe: 8a e0 ldi r24, 0x0A ; 10
100: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak('\r');
104: 8d e0 ldi r24, 0x0D ; 13
106: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak(Status_GPS);
10a: 80 91 27 03 lds r24, 0x0327
10e: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak('\n');
112: 8a e0 ldi r24, 0x0A ; 10
114: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak('\r');
118: 8d e0 ldi r24, 0x0D ; 13
11a: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_retezec(Latitude);
11e: c7 01 movw r24, r14
120: 0e 94 45 02 call 0x48a ; 0x48a <USART0_posli_retezec>
USART0_posli_znak('\n');
124: 8a e0 ldi r24, 0x0A ; 10
126: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak('\r');
12a: 8d e0 ldi r24, 0x0D ; 13
12c: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_retezec(Longitude);
130: c6 01 movw r24, r12
132: 0e 94 45 02 call 0x48a ; 0x48a <USART0_posli_retezec>
USART0_posli_znak('\n');
136: 8a e0 ldi r24, 0x0A ; 10
138: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak('\r');
13c: 8d e0 ldi r24, 0x0D ; 13
13e: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_retezec(Altitude);
142: c5 01 movw r24, r10
144: 0e 94 45 02 call 0x48a ; 0x48a <USART0_posli_retezec>
USART0_posli_znak('\n');
148: 8a e0 ldi r24, 0x0A ; 10
14a: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak('\r');
14e: 8d e0 ldi r24, 0x0D ; 13
150: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
154: c5 cf rjmp .-118 ; 0xe0 <main+0x3a>
00000156 <__vector_11>:
}
}
SIGNAL (TIMER1_COMPA_vect)
{
156: 1f 92 push r1
158: 0f 92 push r0
15a: 0f b6 in r0, 0x3f ; 63
15c: 0f 92 push r0
15e: 11 24 eor r1, r1
160: 2f 93 push r18
162: 3f 93 push r19
164: 4f 93 push r20
166: 5f 93 push r21
168: 6f 93 push r22
16a: 7f 93 push r23
16c: 8f 93 push r24
16e: 9f 93 push r25
170: af 93 push r26
172: bf 93 push r27
174: ef 93 push r30
176: ff 93 push r31
OCR1AH = 0xF4; // Start value in counter ~4s
178: 84 ef ldi r24, 0xF4 ; 244
17a: 80 93 89 00 sts 0x0089, r24
OCR1AL = 0x24;
17e: 84 e2 ldi r24, 0x24 ; 36
180: 80 93 88 00 sts 0x0088, r24
USART0_posli_znak('T');
184: 84 e5 ldi r24, 0x54 ; 84
186: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
if (pocet_prubehu_casovace > 0)
18a: 80 91 26 03 lds r24, 0x0326
18e: 88 23 and r24, r24
190: 29 f0 breq .+10 ; 0x19c <__vector_11+0x46>
{
pocet_prubehu_casovace--;
192: 80 91 26 03 lds r24, 0x0326
196: 81 50 subi r24, 0x01 ; 1
198: 80 93 26 03 sts 0x0326, r24
}
19c: ff 91 pop r31
19e: ef 91 pop r30
1a0: bf 91 pop r27
1a2: af 91 pop r26
1a4: 9f 91 pop r25
1a6: 8f 91 pop r24
1a8: 7f 91 pop r23
1aa: 6f 91 pop r22
1ac: 5f 91 pop r21
1ae: 4f 91 pop r20
1b0: 3f 91 pop r19
1b2: 2f 91 pop r18
1b4: 0f 90 pop r0
1b6: 0f be out 0x3f, r0 ; 63
1b8: 0f 90 pop r0
1ba: 1f 90 pop r1
1bc: 18 95 reti
000001be <LEDs_init>:
* Vstup: Zadny
* Vystup: Zadny
************************************************************************/
volatile void LEDs_init(void)
{
DDRB = (1<<DDB0)|(1<<DDB1);
1be: 83 e0 ldi r24, 0x03 ; 3
1c0: 84 b9 out 0x04, r24 ; 4
}
1c2: 08 95 ret
000001c4 <LED_horni_on>:
* Vstup: Zadny
* Vystup: Zadny
************************************************************************/
volatile void LED_horni_on(void)
{
PORTB |= (1<<PB0);
1c4: 28 9a sbi 0x05, 0 ; 5
}
1c6: 08 95 ret
000001c8 <LED_horni_off>:
* Vstup: Zadny
* Vystup: Zadny
************************************************************************/
volatile void LED_horni_off(void)
{
PORTB &= ~(1<<PB0);
1c8: 28 98 cbi 0x05, 0 ; 5
}
1ca: 08 95 ret
000001cc <LED_spodni_on>:
* Vstup: Zadny
* Vystup: Zadny
************************************************************************/
volatile void LED_spodni_on(void)
{
PORTB |= (1<<PB1);
1cc: 29 9a sbi 0x05, 1 ; 5
}
1ce: 08 95 ret
000001d0 <LED_spodni_off>:
* Vstup: Zadny
* Vystup: Zadny
************************************************************************/
volatile void LED_spodni_off(void)
{
PORTB &= ~(1<<PB1);
1d0: 29 98 cbi 0x05, 1 ; 5
}
1d2: 08 95 ret
000001d4 <Timer1_init>:
#include <avr/io.h>
void Timer1_init(void)
{
TCCR1B |= 1<<WGM12; // T1 in CTC mode
1d4: e1 e8 ldi r30, 0x81 ; 129
1d6: f0 e0 ldi r31, 0x00 ; 0
1d8: 80 81 ld r24, Z
1da: 88 60 ori r24, 0x08 ; 8
1dc: 80 83 st Z, r24
TCCR1B |= 1<<CS12; // f_osc/1024
1de: 80 81 ld r24, Z
1e0: 84 60 ori r24, 0x04 ; 4
1e2: 80 83 st Z, r24
TCCR1B |= 1<<CS10; // f_osc/1024
1e4: 80 81 ld r24, Z
1e6: 81 60 ori r24, 0x01 ; 1
1e8: 80 83 st Z, r24
OCR1AH = 0xF4; // Start value in counter ~4s
1ea: 84 ef ldi r24, 0xF4 ; 244
1ec: 80 93 89 00 sts 0x0089, r24
OCR1AL = 0x24;
1f0: 84 e2 ldi r24, 0x24 ; 36
1f2: 80 93 88 00 sts 0x0088, r24
TCNT1H = 0; // Start value in counter
1f6: 10 92 85 00 sts 0x0085, r1
TCNT1L = 0;
1fa: 10 92 84 00 sts 0x0084, r1
TIMSK1 |= 1<<OCIE1A; // enable interrupt from T1 when compare match
1fe: ef e6 ldi r30, 0x6F ; 111
200: f0 e0 ldi r31, 0x00 ; 0
202: 80 81 ld r24, Z
204: 82 60 ori r24, 0x02 ; 2
206: 80 83 st Z, r24
}
208: 08 95 ret
0000020a <dekoduj_zpravu_GPS>:
* Ucel: Z RX0_buffer vytahne informace o soucasne poloze, je tam ulozena cela veta RMC
* Vstup: Zadny
* Vystup: Zadny
************************************************************************/
void dekoduj_zpravu_GPS (void)
{
20a: 2f 92 push r2
20c: 3f 92 push r3
20e: 4f 92 push r4
210: 5f 92 push r5
212: 6f 92 push r6
214: 7f 92 push r7
216: 8f 92 push r8
218: 9f 92 push r9
21a: bf 92 push r11
21c: cf 92 push r12
21e: df 92 push r13
220: ef 92 push r14
222: ff 92 push r15
224: 0f 93 push r16
226: 1f 93 push r17
228: cf 93 push r28
22a: df 93 push r29
cli();
22c: f8 94 cli
short i, j = 0, k = 0, l = 0;
short pocet_carek = 0;
for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
22e: c0 90 24 03 lds r12, 0x0324
232: dd 24 eor r13, r13
234: 1c 14 cp r1, r12
236: 1d 04 cpc r1, r13
238: 0c f0 brlt .+2 ; 0x23c <dekoduj_zpravu_GPS+0x32>
23a: 84 c0 rjmp .+264 ; 0x344 <dekoduj_zpravu_GPS+0x13a>
23c: b0 90 27 03 lds r11, 0x0327
240: a0 e3 ldi r26, 0x30 ; 48
242: b2 e0 ldi r27, 0x02 ; 2
void dekoduj_zpravu_GPS (void)
{
cli();
short i, j = 0, k = 0, l = 0;
short pocet_carek = 0;
244: 20 e0 ldi r18, 0x00 ; 0
246: 30 e0 ldi r19, 0x00 ; 0
************************************************************************/
void dekoduj_zpravu_GPS (void)
{
cli();
short i, j = 0, k = 0, l = 0;
248: 00 e0 ldi r16, 0x00 ; 0
24a: 10 e0 ldi r17, 0x00 ; 0
24c: ee 24 eor r14, r14
24e: ff 24 eor r15, r15
250: c0 e0 ldi r28, 0x00 ; 0
252: d0 e0 ldi r29, 0x00 ; 0
short pocet_carek = 0;
for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
254: 60 e0 ldi r22, 0x00 ; 0
256: 70 e0 ldi r23, 0x00 ; 0
k++;
}
if (pocet_carek == 4 || pocet_carek == 5)
{
Longitude[j] = NMEA_retezec.obsah[i];
258: 0f 2e mov r0, r31
25a: f2 e2 ldi r31, 0x22 ; 34
25c: 6f 2e mov r6, r31
25e: f2 e0 ldi r31, 0x02 ; 2
260: 7f 2e mov r7, r31
262: f0 2d mov r31, r0
UTC_time[l] = NMEA_retezec.obsah[i];
l++;
}
if (pocet_carek == 2 || pocet_carek == 3)
{
Latitude[k] = NMEA_retezec.obsah[i];
264: 0f 2e mov r0, r31
266: f5 e1 ldi r31, 0x15 ; 21
268: 4f 2e mov r4, r31
26a: f2 e0 ldi r31, 0x02 ; 2
26c: 5f 2e mov r5, r31
26e: f0 2d mov r31, r0
short pocet_carek = 0;
for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
{
if (pocet_carek == 1)
{
UTC_time[l] = NMEA_retezec.obsah[i];
270: 0f 2e mov r0, r31
272: f8 e0 ldi r31, 0x08 ; 8
274: 8f 2e mov r8, r31
276: f2 e0 ldi r31, 0x02 ; 2
278: 9f 2e mov r9, r31
27a: f0 2d mov r31, r0
j = 0;
}
if (pocet_carek == 9)
{
Altitude[j] = NMEA_retezec.obsah[i];
27c: 0f 2e mov r0, r31
27e: fe ef ldi r31, 0xFE ; 254
280: 2f 2e mov r2, r31
282: f1 e0 ldi r31, 0x01 ; 1
284: 3f 2e mov r3, r31
286: f0 2d mov r31, r0
short i, j = 0, k = 0, l = 0;
short pocet_carek = 0;
for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
{
if (pocet_carek == 1)
288: 21 30 cpi r18, 0x01 ; 1
28a: 31 05 cpc r19, r1
28c: 41 f4 brne .+16 ; 0x29e <dekoduj_zpravu_GPS+0x94>
{
UTC_time[l] = NMEA_retezec.obsah[i];
28e: f4 01 movw r30, r8
290: e0 0f add r30, r16
292: f1 1f adc r31, r17
294: 8c 91 ld r24, X
296: 80 83 st Z, r24
l++;
298: 0f 5f subi r16, 0xFF ; 255
29a: 1f 4f sbci r17, 0xFF ; 255
29c: 19 c0 rjmp .+50 ; 0x2d0 <dekoduj_zpravu_GPS+0xc6>
}
if (pocet_carek == 2 || pocet_carek == 3)
29e: a9 01 movw r20, r18
2a0: c9 01 movw r24, r18
2a2: 02 97 sbiw r24, 0x02 ; 2
2a4: 82 30 cpi r24, 0x02 ; 2
2a6: 91 05 cpc r25, r1
2a8: 40 f4 brcc .+16 ; 0x2ba <dekoduj_zpravu_GPS+0xb0>
{
Latitude[k] = NMEA_retezec.obsah[i];
2aa: f2 01 movw r30, r4
2ac: ee 0d add r30, r14
2ae: ff 1d adc r31, r15
2b0: 8c 91 ld r24, X
2b2: 80 83 st Z, r24
k++;
2b4: 08 94 sec
2b6: e1 1c adc r14, r1
2b8: f1 1c adc r15, r1
}
if (pocet_carek == 4 || pocet_carek == 5)
2ba: ca 01 movw r24, r20
2bc: 04 97 sbiw r24, 0x04 ; 4
2be: 82 30 cpi r24, 0x02 ; 2
2c0: 91 05 cpc r25, r1
2c2: 30 f4 brcc .+12 ; 0x2d0 <dekoduj_zpravu_GPS+0xc6>
{
Longitude[j] = NMEA_retezec.obsah[i];
2c4: f3 01 movw r30, r6
2c6: ec 0f add r30, r28
2c8: fd 1f adc r31, r29
2ca: 8c 91 ld r24, X
2cc: 80 83 st Z, r24
j++;
2ce: 21 96 adiw r28, 0x01 ; 1
}
if (pocet_carek == 6)
2d0: 26 30 cpi r18, 0x06 ; 6
2d2: 31 05 cpc r19, r1
2d4: c1 f4 brne .+48 ; 0x306 <dekoduj_zpravu_GPS+0xfc>
{
UTC_time[l-1] = 0;
2d6: c4 01 movw r24, r8
2d8: 80 0f add r24, r16
2da: 91 1f adc r25, r17
2dc: 01 97 sbiw r24, 0x01 ; 1
2de: fc 01 movw r30, r24
2e0: 10 82 st Z, r1
Latitude[k-1] = 0;
2e2: c2 01 movw r24, r4
2e4: 8e 0d add r24, r14
2e6: 9f 1d adc r25, r15
2e8: 01 97 sbiw r24, 0x01 ; 1
2ea: fc 01 movw r30, r24
2ec: 10 82 st Z, r1
Longitude[j-1] = 0;
2ee: c3 01 movw r24, r6
2f0: 8c 0f add r24, r28
2f2: 9d 1f adc r25, r29
2f4: 01 97 sbiw r24, 0x01 ; 1
2f6: fc 01 movw r30, r24
2f8: 10 82 st Z, r1
* Funkce: dekoduj_zpravu_GPS
* Ucel: Z RX0_buffer vytahne informace o soucasne poloze, je tam ulozena cela veta RMC
* Vstup: Zadny
* Vystup: Zadny
************************************************************************/
void dekoduj_zpravu_GPS (void)
2fa: fd 01 movw r30, r26
2fc: 31 97 sbiw r30, 0x01 ; 1
{
UTC_time[l-1] = 0;
Latitude[k-1] = 0;
Longitude[j-1] = 0;
Status_GPS = NMEA_retezec.obsah[i-1];
2fe: b0 80 ld r11, Z
j = 0;
300: c0 e0 ldi r28, 0x00 ; 0
302: d0 e0 ldi r29, 0x00 ; 0
304: 09 c0 rjmp .+18 ; 0x318 <dekoduj_zpravu_GPS+0x10e>
}
if (pocet_carek == 9)
306: 29 30 cpi r18, 0x09 ; 9
308: 31 05 cpc r19, r1
30a: 31 f4 brne .+12 ; 0x318 <dekoduj_zpravu_GPS+0x10e>
{
Altitude[j] = NMEA_retezec.obsah[i];
30c: f1 01 movw r30, r2
30e: ec 0f add r30, r28
310: fd 1f adc r31, r29
312: 8c 91 ld r24, X
314: 80 83 st Z, r24
j++;
316: 21 96 adiw r28, 0x01 ; 1
}
if (NMEA_retezec.obsah[i] == ',')
318: 8d 91 ld r24, X+
31a: 8c 32 cpi r24, 0x2C ; 44
31c: 11 f4 brne .+4 ; 0x322 <dekoduj_zpravu_GPS+0x118>
{
pocet_carek++;
31e: 2f 5f subi r18, 0xFF ; 255
320: 3f 4f sbci r19, 0xFF ; 255
}
if (pocet_carek >9)
322: 2a 30 cpi r18, 0x0A ; 10
324: 31 05 cpc r19, r1
326: 34 f0 brlt .+12 ; 0x334 <dekoduj_zpravu_GPS+0x12a>
328: b0 92 27 03 sts 0x0327, r11
{
Altitude[j-1] = 0; // konec Stringu
32c: c3 50 subi r28, 0x03 ; 3
32e: de 4f sbci r29, 0xFE ; 254
330: 18 82 st Y, r1
break; // nema vyznam dal zapisovat, potrebne je zapsano v Altitude
332: 08 c0 rjmp .+16 ; 0x344 <dekoduj_zpravu_GPS+0x13a>
{
cli();
short i, j = 0, k = 0, l = 0;
short pocet_carek = 0;
for ( i = 0; i < NMEA_retezec.zaplneno_bytu; i++)
334: 6f 5f subi r22, 0xFF ; 255
336: 7f 4f sbci r23, 0xFF ; 255
338: 6c 15 cp r22, r12
33a: 7d 05 cpc r23, r13
33c: 0c f4 brge .+2 ; 0x340 <dekoduj_zpravu_GPS+0x136>
33e: a4 cf rjmp .-184 ; 0x288 <dekoduj_zpravu_GPS+0x7e>
340: b0 92 27 03 sts 0x0327, r11
Altitude[j-1] = 0; // konec Stringu
break; // nema vyznam dal zapisovat, potrebne je zapsano v Altitude
}
}
sei();
344: 78 94 sei
}
346: df 91 pop r29
348: cf 91 pop r28
34a: 1f 91 pop r17
34c: 0f 91 pop r16
34e: ff 90 pop r15
350: ef 90 pop r14
352: df 90 pop r13
354: cf 90 pop r12
356: bf 90 pop r11
358: 9f 90 pop r9
35a: 8f 90 pop r8
35c: 7f 90 pop r7
35e: 6f 90 pop r6
360: 5f 90 pop r5
362: 4f 90 pop r4
364: 3f 90 pop r3
366: 2f 90 pop r2
368: 08 95 ret
0000036a <USART0_smaz_buffer>:
* Vstup: Jaky buffer ma smazat (pro USART 0 nebo 1)
* Vystup: Zadny
************************************************************************/
void USART0_smaz_buffer (void)
{
cli();
36a: f8 94 cli
36c: e8 e0 ldi r30, 0x08 ; 8
36e: f1 e0 ldi r31, 0x01 ; 1
* Funkce: USART0_smaz_buffer
* Ucel: Smaze (zaplni nulami) prijimaci buffer
* Vstup: Jaky buffer ma smazat (pro USART 0 nebo 1)
* Vystup: Zadny
************************************************************************/
void USART0_smaz_buffer (void)
370: 8d ef ldi r24, 0xFD ; 253
372: 91 e0 ldi r25, 0x01 ; 1
cli();
unsigned char i;
for (i=0; i <= VELIKOST_PRIJIMACIHO_BUFFERU;i++) // maze se cely buffer pro jistotu
{
RX0_buffer.obsah[i] = 0;
374: 11 92 st Z+, r1
void USART0_smaz_buffer (void)
{
cli();
unsigned char i;
for (i=0; i <= VELIKOST_PRIJIMACIHO_BUFFERU;i++) // maze se cely buffer pro jistotu
376: e8 17 cp r30, r24
378: f9 07 cpc r31, r25
37a: e1 f7 brne .-8 ; 0x374 <USART0_smaz_buffer+0xa>
{
RX0_buffer.obsah[i] = 0;
}
RX0_buffer.zaplneno_bytu = 0;
37c: 10 92 fc 01 sts 0x01FC, r1
sei();
380: 78 94 sei
}
382: 08 95 ret
00000384 <__vector_18>:
* Ucel: Funkce se vola pri prijmuti znaku od USART0
* Vstup: Zdroj preruseni
* Vystup: Zadny
************************************************************************/
SIGNAL (USART_RX_vect)
{
384: 1f 92 push r1
386: 0f 92 push r0
388: 0f b6 in r0, 0x3f ; 63
38a: 0f 92 push r0
38c: 11 24 eor r1, r1
38e: 2f 93 push r18
390: 3f 93 push r19
392: 4f 93 push r20
394: 5f 93 push r21
396: 6f 93 push r22
398: 7f 93 push r23
39a: 8f 93 push r24
39c: 9f 93 push r25
39e: af 93 push r26
3a0: bf 93 push r27
3a2: cf 93 push r28
3a4: ef 93 push r30
3a6: ff 93 push r31
char znak = UDR0;
3a8: c0 91 c6 00 lds r28, 0x00C6
if (RX0_buffer.zaplneno_bytu < VELIKOST_PRIJIMACIHO_BUFFERU-1)
3ac: 80 91 fc 01 lds r24, 0x01FC
3b0: 83 3f cpi r24, 0xF3 ; 243
3b2: 50 f4 brcc .+20 ; 0x3c8 <__vector_18+0x44>
{
RX0_buffer.obsah[RX0_buffer.zaplneno_bytu] = znak;
3b4: e8 e0 ldi r30, 0x08 ; 8
3b6: f1 e0 ldi r31, 0x01 ; 1
3b8: e8 0f add r30, r24
3ba: f1 1d adc r31, r1
3bc: c0 83 st Z, r28
RX0_buffer.obsah[RX0_buffer.zaplneno_bytu+1] = 0; // konec stringu
3be: 11 82 std Z+1, r1 ; 0x01
RX0_buffer.zaplneno_bytu++;
3c0: 8f 5f subi r24, 0xFF ; 255
3c2: 80 93 fc 01 sts 0x01FC, r24
3c6: 0c c0 rjmp .+24 ; 0x3e0 <__vector_18+0x5c>
}
else
{
USART0_smaz_buffer();
3c8: 0e 94 b5 01 call 0x36a ; 0x36a <USART0_smaz_buffer>
RX0_buffer.obsah[RX0_buffer.zaplneno_bytu] = znak;
3cc: 80 91 fc 01 lds r24, 0x01FC
3d0: e8 e0 ldi r30, 0x08 ; 8
3d2: f1 e0 ldi r31, 0x01 ; 1
3d4: e8 0f add r30, r24
3d6: f1 1d adc r31, r1
3d8: c0 83 st Z, r28
RX0_buffer.zaplneno_bytu++;
3da: 8f 5f subi r24, 0xFF ; 255
3dc: 80 93 fc 01 sts 0x01FC, r24
}
if (zacatek_zpravy != 1 && strstr(RX0_buffer.obsah,"$GPGGA") != 0)
3e0: 80 91 25 03 lds r24, 0x0325
3e4: 81 30 cpi r24, 0x01 ; 1
3e6: 69 f0 breq .+26 ; 0x402 <__vector_18+0x7e>
3e8: 88 e0 ldi r24, 0x08 ; 8
3ea: 91 e0 ldi r25, 0x01 ; 1
3ec: 60 e0 ldi r22, 0x00 ; 0
3ee: 71 e0 ldi r23, 0x01 ; 1
3f0: 0e 94 63 02 call 0x4c6 ; 0x4c6 <strstr>
3f4: 00 97 sbiw r24, 0x00 ; 0
3f6: 29 f0 breq .+10 ; 0x402 <__vector_18+0x7e>
{
zacatek_zpravy = 1;
3f8: 81 e0 ldi r24, 0x01 ; 1
3fa: 80 93 25 03 sts 0x0325, r24
USART0_smaz_buffer(); // aby se zprava ukladala od zacatku bufferu
3fe: 0e 94 b5 01 call 0x36a ; 0x36a <USART0_smaz_buffer>
}
if (znak == '*' && zacatek_zpravy == 1) // cela zprava je prijata
402: ca 32 cpi r28, 0x2A ; 42
404: 81 f4 brne .+32 ; 0x426 <__vector_18+0xa2>
406: 80 91 25 03 lds r24, 0x0325
40a: 81 30 cpi r24, 0x01 ; 1
40c: 61 f4 brne .+24 ; 0x426 <__vector_18+0xa2>
{
//USART0_posli_retezec(RX0_buffer.obsah);
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.
40e: 80 e3 ldi r24, 0x30 ; 48
410: 92 e0 ldi r25, 0x02 ; 2
412: 68 e0 ldi r22, 0x08 ; 8
414: 71 e0 ldi r23, 0x01 ; 1
416: 0e 94 5c 02 call 0x4b8 ; 0x4b8 <strcpy>
NMEA_retezec.zaplneno_bytu = RX0_buffer.zaplneno_bytu;
41a: 80 91 fc 01 lds r24, 0x01FC
41e: 80 93 24 03 sts 0x0324, r24
zacatek_zpravy = 0;
422: 10 92 25 03 sts 0x0325, r1
}
}
426: ff 91 pop r31
428: ef 91 pop r30
42a: cf 91 pop r28
42c: bf 91 pop r27
42e: af 91 pop r26
430: 9f 91 pop r25
432: 8f 91 pop r24
434: 7f 91 pop r23
436: 6f 91 pop r22
438: 5f 91 pop r21
43a: 4f 91 pop r20
43c: 3f 91 pop r19
43e: 2f 91 pop r18
440: 0f 90 pop r0
442: 0f be out 0x3f, r0 ; 63
444: 0f 90 pop r0
446: 1f 90 pop r1
448: 18 95 reti
0000044a <USART0_posli_znak>:
* Vystup: Zadny
************************************************************************/
void USART0_posli_znak( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) )
44a: e0 ec ldi r30, 0xC0 ; 192
44c: f0 e0 ldi r31, 0x00 ; 0
44e: 90 81 ld r25, Z
450: 95 ff sbrs r25, 5
452: fd cf rjmp .-6 ; 0x44e <USART0_posli_znak+0x4>
;
/* Put data into buffer, sends the data */
UDR0 = data;
454: 80 93 c6 00 sts 0x00C6, r24
}
458: 08 95 ret
0000045a <USART_Init>:
void USART_Init(void)
{
unsigned int baud;
baud = F_CPU/16/UART0_BAUD_RATE -1;
/* Set baud rate */
UBRR0H = (unsigned char)(baud>>8);
45a: 10 92 c5 00 sts 0x00C5, r1
UBRR0L = (unsigned char)baud;
45e: 87 e6 ldi r24, 0x67 ; 103
460: 80 93 c4 00 sts 0x00C4, r24
/* Enable receiver and transmitter, enable interrupt after receiving a new byte */
UCSR0B = (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
464: 88 e9 ldi r24, 0x98 ; 152
466: 80 93 c1 00 sts 0x00C1, r24
/* Set frame format: 8data, 1stop bit */
UCSR0C = (3<<UCSZ00);
46a: 86 e0 ldi r24, 0x06 ; 6
46c: 80 93 c2 00 sts 0x00C2, r24
USART0_posli_znak('A');
470: 81 e4 ldi r24, 0x41 ; 65
472: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak('K');
476: 8b e4 ldi r24, 0x4B ; 75
478: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak('\n');
47c: 8a e0 ldi r24, 0x0A ; 10
47e: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
USART0_posli_znak('\r');
482: 8d e0 ldi r24, 0x0D ; 13
484: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
//delay_ms(3000); // modulu se musi dat cas na vypocet baud rychlosti
}
488: 08 95 ret
0000048a <USART0_posli_retezec>:
* Ucel: Odesle postupne znak po znaku zadany retezec pres USART0
* Vstup: Retezec k odeslani
* Vystup: Zadny
************************************************************************/
void USART0_posli_retezec (const unsigned char *retezec )
{
48a: cf 93 push r28
48c: df 93 push r29
48e: ec 01 movw r28, r24
while (*retezec)
490: 88 81 ld r24, Y
492: 88 23 and r24, r24
494: 31 f0 breq .+12 ; 0x4a2 <USART0_posli_retezec+0x18>
* Funkce: USART0_posli_retezec()
* Ucel: Odesle postupne znak po znaku zadany retezec pres USART0
* Vstup: Retezec k odeslani
* Vystup: Zadny
************************************************************************/
void USART0_posli_retezec (const unsigned char *retezec )
496: 21 96 adiw r28, 0x01 ; 1
{
while (*retezec)
USART0_posli_znak(*retezec++);
498: 0e 94 25 02 call 0x44a ; 0x44a <USART0_posli_znak>
* Vstup: Retezec k odeslani
* Vystup: Zadny
************************************************************************/
void USART0_posli_retezec (const unsigned char *retezec )
{
while (*retezec)
49c: 89 91 ld r24, Y+
49e: 88 23 and r24, r24
4a0: d9 f7 brne .-10 ; 0x498 <USART0_posli_retezec+0xe>
USART0_posli_znak(*retezec++);
}
4a2: df 91 pop r29
4a4: cf 91 pop r28
4a6: 08 95 ret
000004a8 <USART0_prijmi_znak>:
* Vystup: Prijaty znak
************************************************************************/
unsigned char USART0_prijmi_znak( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) )
4a8: e0 ec ldi r30, 0xC0 ; 192
4aa: f0 e0 ldi r31, 0x00 ; 0
4ac: 80 81 ld r24, Z
4ae: 88 23 and r24, r24
4b0: ec f7 brge .-6 ; 0x4ac <USART0_prijmi_znak+0x4>
;
/* Get and return received data from buffer */
return UDR0;
4b2: 80 91 c6 00 lds r24, 0x00C6
}
4b6: 08 95 ret
000004b8 <strcpy>:
4b8: fb 01 movw r30, r22
4ba: dc 01 movw r26, r24
4bc: 01 90 ld r0, Z+
4be: 0d 92 st X+, r0
4c0: 00 20 and r0, r0
4c2: e1 f7 brne .-8 ; 0x4bc <strcpy+0x4>
4c4: 08 95 ret
000004c6 <strstr>:
4c6: fb 01 movw r30, r22
4c8: 51 91 ld r21, Z+
4ca: 55 23 and r21, r21
4cc: a9 f0 breq .+42 ; 0x4f8 <strstr+0x32>
4ce: bf 01 movw r22, r30
4d0: dc 01 movw r26, r24
4d2: 4d 91 ld r20, X+
4d4: 45 17 cp r20, r21
4d6: 41 11 cpse r20, r1
4d8: e1 f7 brne .-8 ; 0x4d2 <strstr+0xc>
4da: 59 f4 brne .+22 ; 0x4f2 <strstr+0x2c>
4dc: cd 01 movw r24, r26
4de: 01 90 ld r0, Z+
4e0: 00 20 and r0, r0
4e2: 49 f0 breq .+18 ; 0x4f6 <strstr+0x30>
4e4: 4d 91 ld r20, X+
4e6: 40 15 cp r20, r0
4e8: 41 11 cpse r20, r1
4ea: c9 f3 breq .-14 ; 0x4de <strstr+0x18>
4ec: fb 01 movw r30, r22
4ee: 41 11 cpse r20, r1
4f0: ef cf rjmp .-34 ; 0x4d0 <strstr+0xa>
4f2: 81 e0 ldi r24, 0x01 ; 1
4f4: 90 e0 ldi r25, 0x00 ; 0
4f6: 01 97 sbiw r24, 0x01 ; 1
4f8: 08 95 ret
000004fa <_exit>:
4fa: f8 94 cli
000004fc <__stop_program>:
4fc: ff cf rjmp .-2 ; 0x4fc <__stop_program>