Rev 78 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00001bec 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000024 00800060 00001bec 00001c80 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000156 00800084 00800084 00001ca4 2**0
ALLOC
3 .noinit 00000000 008001da 008001da 00001ca4 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00001ca4 2**0
CONTENTS
5 .stab 0000036c 00000000 00000000 00001ca4 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 00002010 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 000000b4 00000000 00000000 00002094 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 000006f5 00000000 00000000 00002148 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 00001a41 00000000 00000000 0000283d 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 00000774 00000000 00000000 0000427e 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 0000169d 00000000 00000000 000049f2 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 00000874 00000000 00000000 0000608f 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 85 00 jmp 0x10a <__init>
4: 0c 94 7e 0b jmp 0x16fc <__vector_1>
8: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
c: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
10: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
14: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
18: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
1c: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
20: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
24: 0c 94 67 09 jmp 0x12ce <__vector_9>
28: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
2c: 0c 94 96 0b jmp 0x172c <__vector_11>
30: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
34: 0c 94 18 02 jmp 0x430 <__vector_13>
38: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
3c: 0c 94 e3 01 jmp 0x3c6 <__vector_15>
40: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
44: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
48: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
4c: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
50: 0c 94 a0 00 jmp 0x140 <__bad_interrupt>
00000054 <__ctors_end>:
54: 20 2d mov r18, r0
56: 2d 20 and r2, r13
58: 52 65 ori r21, 0x52 ; 82
5a: 6d 6f ori r22, 0xFD ; 253
5c: 74 65 ori r23, 0x54 ; 84
5e: 20 20 and r2, r0
60: 2d 2d mov r18, r13
62: 20 20 and r2, r0
64: 20 20 and r2, r0
66: 20 20 and r2, r0
...
00000069 <__c.1>:
69: 20 2d 2d 20 44 69 73 70 6c 61 79 20 2d 2d 20 20 -- Display --
79: 20 20 20 20 00 .
0000007e <__c.2>:
7e: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8e: 20 20 20 20 00 .
00000093 <__c.3>:
93: 20 20 77 77 77 2e 4d 69 63 72 6f 53 50 53 2e 63 www.MicroSPS.c
a3: 6f 6d 20 20 00 om .
000000a8 <__c.2>:
a8: 25 73 00 %s.
000000ab <__c.3>:
ab: 25 73 00 %s.
000000ae <__c.4>:
ae: 25 73 00 %s.
000000b1 <__c.5>:
b1: 25 73 00 %s.
000000b4 <__c.3>:
b4: 56 65 72 62 69 6e 64 65 6e 20 6d 69 74 00 Verbinden mit.
000000c2 <__c.4>:
c2: 4d 69 63 72 6f 53 50 53 3a 25 32 69 20 00 MicroSPS:%2i .
000000d0 <__c.5>:
d0: 4d 61 78 20 41 64 72 65 73 73 65 00 Max Adresse.
000000dc <__c.6>:
dc: 25 32 69 20 00 %2i .
000000e1 <__c.7>:
e1: 43 68 65 63 6b 73 75 6d 00 Checksum.
000000ea <__c.8>:
ea: 45 72 72 6f 72 73 3a 25 35 69 20 00 Errors:%5i .
000000f6 <__c.9>:
f6: 44 69 73 70 6c 61 79 00 Display.
000000fe <__c.10>:
fe: 5a 65 69 6c 65 6e 3a 25 31 69 20 00 Zeilen:%1i .
0000010a <__init>:
10a: 11 24 eor r1, r1
10c: 1f be out 0x3f, r1 ; 63
10e: cf e5 ldi r28, 0x5F ; 95
110: d8 e0 ldi r29, 0x08 ; 8
112: de bf out 0x3e, r29 ; 62
114: cd bf out 0x3d, r28 ; 61
00000116 <__do_copy_data>:
116: 10 e0 ldi r17, 0x00 ; 0
118: a0 e6 ldi r26, 0x60 ; 96
11a: b0 e0 ldi r27, 0x00 ; 0
11c: ec ee ldi r30, 0xEC ; 236
11e: fb e1 ldi r31, 0x1B ; 27
120: 02 c0 rjmp .+4 ; 0x126 <.do_copy_data_start>
00000122 <.do_copy_data_loop>:
122: 05 90 lpm r0, Z+
124: 0d 92 st X+, r0
00000126 <.do_copy_data_start>:
126: a4 38 cpi r26, 0x84 ; 132
128: b1 07 cpc r27, r17
12a: d9 f7 brne .-10 ; 0x122 <.do_copy_data_loop>
0000012c <__do_clear_bss>:
12c: 11 e0 ldi r17, 0x01 ; 1
12e: a4 e8 ldi r26, 0x84 ; 132
130: b0 e0 ldi r27, 0x00 ; 0
132: 01 c0 rjmp .+2 ; 0x136 <.do_clear_bss_start>
00000134 <.do_clear_bss_loop>:
134: 1d 92 st X+, r1
00000136 <.do_clear_bss_start>:
136: aa 3d cpi r26, 0xDA ; 218
138: b1 07 cpc r27, r17
13a: e1 f7 brne .-8 ; 0x134 <.do_clear_bss_loop>
13c: 0c 94 e5 00 jmp 0x1ca <main>
00000140 <__bad_interrupt>:
140: 0c 94 00 00 jmp 0x0 <__vectors>
00000144 <Sekundentakt_Init>:
unsigned int IntervallDebug = 250, IntervallDisplay = 120;
void Sekundentakt_Init(void)
{
_SekTimer = SetDelay(1000);
144: 88 ee ldi r24, 0xE8 ; 232
146: 93 e0 ldi r25, 0x03 ; 3
148: 0e 94 a8 09 call 0x1350 <SetDelay>
14c: 90 93 91 00 sts 0x0091, r25
150: 80 93 90 00 sts 0x0090, r24
154: 08 95 ret
00000156 <Sekundentakt>:
}
void Sekundentakt(void)
{
if(CheckDelay(_SekTimer))
156: 80 91 90 00 lds r24, 0x0090
15a: 90 91 91 00 lds r25, 0x0091
15e: 0e 94 b1 09 call 0x1362 <CheckDelay>
162: 88 23 and r24, r24
164: 31 f1 breq .+76 ; 0x1b2 <Sekundentakt+0x5c>
{
GetKeyboard();
166: 0e 94 d2 09 call 0x13a4 <GetKeyboard>
_SekTimer += 1000;
16a: 80 91 90 00 lds r24, 0x0090
16e: 90 91 91 00 lds r25, 0x0091
172: 88 51 subi r24, 0x18 ; 24
174: 9c 4f sbci r25, 0xFC ; 252
176: 90 93 91 00 sts 0x0091, r25
17a: 80 93 90 00 sts 0x0090, r24
if(!CntDatensaetzeProSekunde) UebertragungUnterbrochen = 1; else UebertragungUnterbrochen = 0;
17e: 80 91 66 00 lds r24, 0x0066
182: 88 23 and r24, r24
184: 21 f4 brne .+8 ; 0x18e <Sekundentakt+0x38>
186: 81 e0 ldi r24, 0x01 ; 1
188: 80 93 84 00 sts 0x0084, r24
18c: 02 c0 rjmp .+4 ; 0x192 <Sekundentakt+0x3c>
18e: 10 92 84 00 sts 0x0084, r1
CntDatensaetzeProSekunde = 0;
192: 10 92 66 00 sts 0x0066, r1
if(++Sekunde == 60)
196: 80 91 8d 00 lds r24, 0x008D
19a: 8f 5f subi r24, 0xFF ; 255
19c: 80 93 8d 00 sts 0x008D, r24
1a0: 8c 33 cpi r24, 0x3C ; 60
1a2: 39 f4 brne .+14 ; 0x1b2 <Sekundentakt+0x5c>
{
Sekunde = 0;
1a4: 10 92 8d 00 sts 0x008D, r1
Minute++;
1a8: 80 91 8c 00 lds r24, 0x008C
1ac: 8f 5f subi r24, 0xFF ; 255
1ae: 80 93 8c 00 sts 0x008C, r24
1b2: 08 95 ret
000001b4 <Init>:
}
}
}
void Init(void)
{
VersionInfo.Hauptversion = 0;
1b4: 10 92 c9 00 sts 0x00C9, r1
VersionInfo.Nebenversion = 99;
1b8: 83 e6 ldi r24, 0x63 ; 99
1ba: 80 93 ca 00 sts 0x00CA, r24
VersionInfo.PCKompatibel = 1;
1be: 81 e0 ldi r24, 0x01 ; 1
1c0: 80 93 cb 00 sts 0x00CB, r24
VersionInfo.Commercial = 0x00;
1c4: 10 92 cc 00 sts 0x00CC, r1
1c8: 08 95 ret
000001ca <main>:
}
#define MENU 0
#define REMOTE 1
//############################################################################
//Hauptprogramm
void main (void)
//############################################################################
{
1ca: ca e5 ldi r28, 0x5A ; 90
1cc: d8 e0 ldi r29, 0x08 ; 8
1ce: de bf out 0x3e, r29 ; 62
1d0: cd bf out 0x3d, r28 ; 61
char z,txt[]= {"Moin"},key,key_old = 255;
1d2: de 01 movw r26, r28
1d4: 11 96 adiw r26, 0x01 ; 1
1d6: e7 e6 ldi r30, 0x67 ; 103
1d8: f0 e0 ldi r31, 0x00 ; 0
1da: 85 e0 ldi r24, 0x05 ; 5
1dc: 01 90 ld r0, Z+
1de: 0d 92 st X+, r0
1e0: 81 50 subi r24, 0x01 ; 1
1e2: e1 f7 brne .-8 ; 0x1dc <main+0x12>
int test = 0;
unsigned int DelayTast;
unsigned int DelayDaten,DelayDisplay;
unsigned char mode = REMOTE;
1e4: 91 e0 ldi r25, 0x01 ; 1
1e6: b9 2e mov r11, r25
unsigned char neueDatenuebertragung = 1;
UART_Init();
1e8: 0e 94 cc 04 call 0x998 <UART_Init>
LCD_Init();
1ec: 0e 94 1f 06 call 0xc3e <LCD_Init>
UART_Init();
1f0: 0e 94 cc 04 call 0x998 <UART_Init>
Timer1_Init();
1f4: 0e 94 9e 09 call 0x133c <Timer1_Init>
Keyboard_Init();
1f8: 0e 94 c9 09 call 0x1392 <Keyboard_Init>
Sekundentakt_Init();
1fc: 0e 94 a2 00 call 0x144 <Sekundentakt_Init>
InitIR();
200: 0e 94 67 0b call 0x16ce <InitIR>
ADC_Init();
204: 0e 94 42 0c call 0x1884 <ADC_Init>
Init();
208: 0e 94 da 00 call 0x1b4 <Init>
sei ();//Globale Interrupts Einschalten
20c: 78 94 sei
DDRB = 0xff;
20e: 8f ef ldi r24, 0xFF ; 255
210: 87 bb out 0x17, r24 ; 23
PORTB = 0x00;
212: 18 ba out 0x18, r1 ; 24
LCD_Clear;
214: 81 e0 ldi r24, 0x01 ; 1
216: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
21a: 0e 94 c9 05 call 0xb92 <_long_delay>
/* while(1)
*/
DelayTast = SetDelay(80);
21e: 80 e5 ldi r24, 0x50 ; 80
220: 90 e0 ldi r25, 0x00 ; 0
222: 0e 94 a8 09 call 0x1350 <SetDelay>
226: 7c 01 movw r14, r24
DelayDaten = SetDelay(200);
228: 88 ec ldi r24, 0xC8 ; 200
22a: 90 e0 ldi r25, 0x00 ; 0
22c: 0e 94 a8 09 call 0x1350 <SetDelay>
230: 8c 01 movw r16, r24
DelayDisplay = SetDelay(300);
232: 8c e2 ldi r24, 0x2C ; 44
234: 91 e0 ldi r25, 0x01 ; 1
236: 0e 94 a8 09 call 0x1350 <SetDelay>
23a: 6c 01 movw r12, r24
ClearIntervalle();
23c: 0e 94 2e 05 call 0xa5c <ClearIntervalle>
while (1)
{
if(mode == MENU)
240: bb 20 and r11, r11
242: 11 f5 brne .+68 ; 0x288 <main+0xbe>
{
Delay_ms(10);
244: 8a e0 ldi r24, 0x0A ; 10
246: 90 e0 ldi r25, 0x00 ; 0
248: 0e 94 bc 09 call 0x1378 <Delay_ms>
key = GetKeyboard();
24c: 0e 94 d2 09 call 0x13a4 <GetKeyboard>
Menu(key);
250: 99 27 eor r25, r25
252: 0e 94 64 0a call 0x14c8 <Menu>
if(_TASTE5)
256: cb 9b sbis 0x19, 3 ; 25
258: f5 cf rjmp .-22 ; 0x244 <main+0x7a>
{
do { Delay_ms(10);} while(_TASTE5);
25a: 8a e0 ldi r24, 0x0A ; 10
25c: 90 e0 ldi r25, 0x00 ; 0
25e: 0e 94 bc 09 call 0x1378 <Delay_ms>
262: cb 99 sbic 0x19, 3 ; 25
264: fa cf rjmp .-12 ; 0x25a <main+0x90>
mode = REMOTE;
266: 81 e0 ldi r24, 0x01 ; 1
268: b8 2e mov r11, r24
DelayTast = SetDelay(100);
26a: 84 e6 ldi r24, 0x64 ; 100
26c: 90 e0 ldi r25, 0x00 ; 0
26e: 0e 94 a8 09 call 0x1350 <SetDelay>
272: 7c 01 movw r14, r24
DelayDaten = SetDelay(200);
274: 88 ec ldi r24, 0xC8 ; 200
276: 90 e0 ldi r25, 0x00 ; 0
278: 0e 94 a8 09 call 0x1350 <SetDelay>
27c: 8c 01 movw r16, r24
LCD_Clear;
27e: 8b 2d mov r24, r11
280: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
284: 0e 94 c9 05 call 0xb92 <_long_delay>
}
}
else
if(mode == REMOTE)
288: 81 e0 ldi r24, 0x01 ; 1
28a: b8 16 cp r11, r24
28c: c9 f6 brne .-78 ; 0x240 <main+0x76>
{
BearbeiteRxDaten();
28e: 0e 94 fe 03 call 0x7fc <BearbeiteRxDaten>
if(CheckDelay(DelayDaten))
292: c8 01 movw r24, r16
294: 0e 94 b1 09 call 0x1362 <CheckDelay>
298: 88 23 and r24, r24
29a: c9 f3 breq .-14 ; 0x28e <main+0xc4>
{
Sekundentakt();
29c: 0e 94 ab 00 call 0x156 <Sekundentakt>
DelayDaten = SetDelay(10);
2a0: 8a e0 ldi r24, 0x0A ; 10
2a2: 90 e0 ldi r25, 0x00 ; 0
2a4: 0e 94 a8 09 call 0x1350 <SetDelay>
2a8: 8c 01 movw r16, r24
if(CheckDelay(DelayDisplay))
2aa: c6 01 movw r24, r12
2ac: 0e 94 b1 09 call 0x1362 <CheckDelay>
2b0: 88 23 and r24, r24
2b2: 39 f0 breq .+14 ; 0x2c2 <main+0xf8>
{
DelayDisplay = SetDelay(300);
2b4: 8c e2 ldi r24, 0x2C ; 44
2b6: 91 e0 ldi r25, 0x01 ; 1
2b8: 0e 94 a8 09 call 0x1350 <SetDelay>
2bc: 6c 01 movw r12, r24
PollDisplay = 1;
2be: b0 92 ed 00 sts 0x00ED, r11
}
key = GetKeyboard2();
2c2: 0e 94 57 0a call 0x14ae <GetKeyboard2>
DatenUebertragung(key);
2c6: 99 27 eor r25, r25
2c8: 0e 94 51 05 call 0xaa2 <DatenUebertragung>
if(UebertragungUnterbrochen)
2cc: 80 91 84 00 lds r24, 0x0084
2d0: 88 23 and r24, r24
2d2: 81 f1 breq .+96 ; 0x334 <main+0x16a>
{
//01234567890123456789
LCD_printfxy(0,0," -- Remote -- ");
2d4: 60 e0 ldi r22, 0x00 ; 0
2d6: 86 2f mov r24, r22
2d8: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
2dc: 84 e5 ldi r24, 0x54 ; 84
2de: 90 e0 ldi r25, 0x00 ; 0
2e0: 9f 93 push r25
2e2: 8f 93 push r24
2e4: 0e 94 e3 06 call 0xdc6 <_printf_P>
LCD_printfxy(0,1," -- Display -- ");
2e8: 61 e0 ldi r22, 0x01 ; 1
2ea: 80 e0 ldi r24, 0x00 ; 0
2ec: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
2f0: 0f 90 pop r0
2f2: 0f 90 pop r0
2f4: 89 e6 ldi r24, 0x69 ; 105
2f6: 90 e0 ldi r25, 0x00 ; 0
2f8: 9f 93 push r25
2fa: 8f 93 push r24
2fc: 0e 94 e3 06 call 0xdc6 <_printf_P>
LCD_printfxy(0,2," ");
300: 62 e0 ldi r22, 0x02 ; 2
302: 80 e0 ldi r24, 0x00 ; 0
304: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
308: 0f 90 pop r0
30a: 0f 90 pop r0
30c: 8e e7 ldi r24, 0x7E ; 126
30e: 90 e0 ldi r25, 0x00 ; 0
310: 9f 93 push r25
312: 8f 93 push r24
314: 0e 94 e3 06 call 0xdc6 <_printf_P>
LCD_printfxy(0,3," www.MicroSPS.com ");
318: 63 e0 ldi r22, 0x03 ; 3
31a: 80 e0 ldi r24, 0x00 ; 0
31c: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
320: 0f 90 pop r0
322: 0f 90 pop r0
324: 83 e9 ldi r24, 0x93 ; 147
326: 90 e0 ldi r25, 0x00 ; 0
328: 9f 93 push r25
32a: 8f 93 push r24
32c: 0e 94 e3 06 call 0xdc6 <_printf_P>
330: 0f 90 pop r0
332: 0f 90 pop r0
}
if(CheckDelay(DelayTast))
334: c7 01 movw r24, r14
336: 0e 94 b1 09 call 0x1362 <CheckDelay>
33a: 88 23 and r24, r24
33c: 09 f4 brne .+2 ; 0x340 <main+0x176>
33e: a7 cf rjmp .-178 ; 0x28e <main+0xc4>
{
DelayTast = SetDelay(100);
340: 84 e6 ldi r24, 0x64 ; 100
342: 90 e0 ldi r25, 0x00 ; 0
344: 0e 94 a8 09 call 0x1350 <SetDelay>
348: 7c 01 movw r14, r24
if(_TASTE5)
34a: cb 9b sbis 0x19, 3 ; 25
34c: 0c c0 rjmp .+24 ; 0x366 <main+0x19c>
{
do { Delay_ms(10);} while(_TASTE5);
34e: 8a e0 ldi r24, 0x0A ; 10
350: 90 e0 ldi r25, 0x00 ; 0
352: 0e 94 bc 09 call 0x1378 <Delay_ms>
356: cb 99 sbic 0x19, 3 ; 25
358: fa cf rjmp .-12 ; 0x34e <main+0x184>
mode = MENU;
35a: bb 24 eor r11, r11
LCD_Clear;
35c: 81 e0 ldi r24, 0x01 ; 1
35e: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
362: 0e 94 c9 05 call 0xb92 <_long_delay>
366: 80 91 be 00 lds r24, 0x00BE
}
// if(key & 0x10) DebugIn.Digital[0] |= 0x01; else DebugIn.Digital[0] &= ~0x01;
if(PIND & 0x08) DebugIn.Digital[0] |= 0x02; else DebugIn.Digital[0] &= ~0x02;
36a: 83 9b sbis 0x10, 3 ; 16
36c: 02 c0 rjmp .+4 ; 0x372 <main+0x1a8>
36e: 82 60 ori r24, 0x02 ; 2
370: 01 c0 rjmp .+2 ; 0x374 <main+0x1aa>
372: 8d 7f andi r24, 0xFD ; 253
374: 80 93 be 00 sts 0x00BE, r24
378: 80 91 be 00 lds r24, 0x00BE
if(PIND & 0x10) DebugIn.Digital[0] |= 0x04; else DebugIn.Digital[0] &= ~0x04;
37c: 84 9b sbis 0x10, 4 ; 16
37e: 02 c0 rjmp .+4 ; 0x384 <main+0x1ba>
380: 84 60 ori r24, 0x04 ; 4
382: 01 c0 rjmp .+2 ; 0x386 <main+0x1bc>
384: 8b 7f andi r24, 0xFB ; 251
386: 80 93 be 00 sts 0x00BE, r24
38a: 80 91 be 00 lds r24, 0x00BE
if(PIND & 0x20) DebugIn.Digital[0] |= 0x08; else DebugIn.Digital[0] &= ~0x08;
38e: 85 9b sbis 0x10, 5 ; 16
390: 02 c0 rjmp .+4 ; 0x396 <main+0x1cc>
392: 88 60 ori r24, 0x08 ; 8
394: 01 c0 rjmp .+2 ; 0x398 <main+0x1ce>
396: 87 7f andi r24, 0xF7 ; 247
398: 80 93 be 00 sts 0x00BE, r24
39c: 80 91 be 00 lds r24, 0x00BE
if(PIND & 0x40) DebugIn.Digital[0] |= 0x10; else DebugIn.Digital[0] &= ~0x10;
3a0: 86 9b sbis 0x10, 6 ; 16
3a2: 02 c0 rjmp .+4 ; 0x3a8 <main+0x1de>
3a4: 80 61 ori r24, 0x10 ; 16
3a6: 01 c0 rjmp .+2 ; 0x3aa <main+0x1e0>
3a8: 8f 7e andi r24, 0xEF ; 239
3aa: 80 93 be 00 sts 0x00BE, r24
3ae: 80 91 be 00 lds r24, 0x00BE
if(PIND & 0x80) DebugIn.Digital[0] |= 0x20; else DebugIn.Digital[0] &= ~0x20;
3b2: 87 9b sbis 0x10, 7 ; 16
3b4: 02 c0 rjmp .+4 ; 0x3ba <main+0x1f0>
3b6: 80 62 ori r24, 0x20 ; 32
3b8: 01 c0 rjmp .+2 ; 0x3bc <main+0x1f2>
3ba: 8f 7d andi r24, 0xDF ; 223
3bc: 80 93 be 00 sts 0x00BE, r24
GetAnalogWerte();
3c0: 0e 94 4e 0c call 0x189c <GetAnalogWerte>
3c4: 3d cf rjmp .-390 ; 0x240 <main+0x76>
000003c6 <__vector_15>:
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Sende-Part der Datenübertragung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_TX)
{
3c6: 1f 92 push r1
3c8: 0f 92 push r0
3ca: 0f b6 in r0, 0x3f ; 63
3cc: 0f 92 push r0
3ce: 11 24 eor r1, r1
3d0: 8f 93 push r24
3d2: 9f 93 push r25
3d4: ef 93 push r30
3d6: ff 93 push r31
static unsigned int ptr = 0;
unsigned char tmp_tx;
if(!UebertragungAbgeschlossen)
3d8: 80 91 6e 00 lds r24, 0x006E
3dc: 88 23 and r24, r24
3de: d9 f4 brne .+54 ; 0x416 <__vector_15+0x50>
{
ptr++; // die [0] wurde schon gesendet
3e0: 80 91 9d 00 lds r24, 0x009D
3e4: 90 91 9e 00 lds r25, 0x009E
3e8: 01 96 adiw r24, 0x01 ; 1
3ea: 90 93 9e 00 sts 0x009E, r25
3ee: 80 93 9d 00 sts 0x009D, r24
tmp_tx = SendeBuffer[ptr];
3f2: fc 01 movw r30, r24
3f4: e2 51 subi r30, 0x12 ; 18
3f6: ff 4f sbci r31, 0xFF ; 255
3f8: e0 81 ld r30, Z
if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF))
3fa: ed 30 cpi r30, 0x0D ; 13
3fc: 19 f0 breq .+6 ; 0x404 <__vector_15+0x3e>
3fe: 84 36 cpi r24, 0x64 ; 100
400: 91 05 cpc r25, r1
402: 39 f4 brne .+14 ; 0x412 <__vector_15+0x4c>
{
ptr = 0;
404: 10 92 9e 00 sts 0x009E, r1
408: 10 92 9d 00 sts 0x009D, r1
UebertragungAbgeschlossen = 1;
40c: 81 e0 ldi r24, 0x01 ; 1
40e: 80 93 6e 00 sts 0x006E, r24
}
UDR = tmp_tx;
412: ec b9 out 0x0c, r30 ; 12
414: 04 c0 rjmp .+8 ; 0x41e <__vector_15+0x58>
}
else ptr = 0;
416: 10 92 9e 00 sts 0x009E, r1
41a: 10 92 9d 00 sts 0x009D, r1
41e: ff 91 pop r31
420: ef 91 pop r30
422: 9f 91 pop r25
424: 8f 91 pop r24
426: 0f 90 pop r0
428: 0f be out 0x3f, r0 ; 63
42a: 0f 90 pop r0
42c: 1f 90 pop r1
42e: 18 95 reti
00000430 <__vector_13>:
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SIGNAL(INT_VEC_RX)
{
430: 1f 92 push r1
432: 0f 92 push r0
434: 0f b6 in r0, 0x3f ; 63
436: 0f 92 push r0
438: 11 24 eor r1, r1
43a: 2f 93 push r18
43c: 3f 93 push r19
43e: 4f 93 push r20
440: 5f 93 push r21
442: 8f 93 push r24
444: 9f 93 push r25
446: af 93 push r26
448: bf 93 push r27
44a: ef 93 push r30
44c: ff 93 push r31
static unsigned int crc;
static unsigned char crc1,crc2,buf_ptr;
static unsigned char UartState = 0;
unsigned char CrcOkay = 0;
44e: 20 e0 ldi r18, 0x00 ; 0
SioTmp = UDR;
450: 8c b1 in r24, 0x0c ; 12
452: 80 93 9c 00 sts 0x009C, r24
if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0;
456: 50 91 a3 00 lds r21, 0x00A3
45a: 54 36 cpi r21, 0x64 ; 100
45c: 10 f0 brcs .+4 ; 0x462 <__vector_13+0x32>
45e: 20 93 a4 00 sts 0x00A4, r18
if(SioTmp == '\r' && UartState == 2)
462: 80 91 9c 00 lds r24, 0x009C
466: 8d 30 cpi r24, 0x0D ; 13
468: 09 f0 breq .+2 ; 0x46c <__vector_13+0x3c>
46a: 5b c0 rjmp .+182 ; 0x522 <__vector_13+0xf2>
46c: 80 91 a4 00 lds r24, 0x00A4
470: 82 30 cpi r24, 0x02 ; 2
472: 09 f0 breq .+2 ; 0x476 <__vector_13+0x46>
474: 56 c0 rjmp .+172 ; 0x522 <__vector_13+0xf2>
{
UartState = 0;
476: 20 93 a4 00 sts 0x00A4, r18
crc -= RxdBuffer[buf_ptr-2];
47a: 85 2f mov r24, r21
47c: 99 27 eor r25, r25
47e: 8e 5a subi r24, 0xAE ; 174
480: 9e 4f sbci r25, 0xFE ; 254
482: fc 01 movw r30, r24
484: 32 97 sbiw r30, 0x02 ; 2
486: 40 81 ld r20, Z
488: 20 91 9f 00 lds r18, 0x009F
48c: 30 91 a0 00 lds r19, 0x00A0
490: 24 1b sub r18, r20
492: 31 09 sbc r19, r1
crc -= RxdBuffer[buf_ptr-1];
494: dc 01 movw r26, r24
496: 11 97 sbiw r26, 0x01 ; 1
498: 8c 91 ld r24, X
49a: 28 1b sub r18, r24
49c: 31 09 sbc r19, r1
crc %= 4096;
49e: c9 01 movw r24, r18
4a0: 9f 70 andi r25, 0x0F ; 15
4a2: 90 93 a0 00 sts 0x00A0, r25
4a6: 80 93 9f 00 sts 0x009F, r24
crc1 = '=' + crc / 64;
4aa: 46 e0 ldi r20, 0x06 ; 6
4ac: 96 95 lsr r25
4ae: 87 95 ror r24
4b0: 4a 95 dec r20
4b2: e1 f7 brne .-8 ; 0x4ac <__vector_13+0x7c>
4b4: 98 2f mov r25, r24
4b6: 93 5c subi r25, 0xC3 ; 195
4b8: 90 93 a1 00 sts 0x00A1, r25
crc2 = '=' + crc % 64;
4bc: 2f 73 andi r18, 0x3F ; 63
4be: 30 70 andi r19, 0x00 ; 0
4c0: 23 5c subi r18, 0xC3 ; 195
4c2: 20 93 a2 00 sts 0x00A2, r18
CrcOkay = 0;
if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;};
4c6: 80 81 ld r24, Z
4c8: 98 17 cp r25, r24
4ca: 29 f4 brne .+10 ; 0x4d6 <__vector_13+0xa6>
4cc: 8c 91 ld r24, X
4ce: 28 17 cp r18, r24
4d0: 11 f4 brne .+4 ; 0x4d6 <__vector_13+0xa6>
4d2: 21 e0 ldi r18, 0x01 ; 1
4d4: 0a c0 rjmp .+20 ; 0x4ea <__vector_13+0xba>
4d6: 20 e0 ldi r18, 0x00 ; 0
4d8: 80 91 99 00 lds r24, 0x0099
4dc: 90 91 9a 00 lds r25, 0x009A
4e0: 01 96 adiw r24, 0x01 ; 1
4e2: 90 93 9a 00 sts 0x009A, r25
4e6: 80 93 99 00 sts 0x0099, r24
if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
4ea: 80 91 9b 00 lds r24, 0x009B
4ee: 88 23 and r24, r24
4f0: 09 f0 breq .+2 ; 0x4f4 <__vector_13+0xc4>
4f2: 66 c0 rjmp .+204 ; 0x5c0 <__vector_13+0x190>
4f4: 22 23 and r18, r18
4f6: 09 f4 brne .+2 ; 0x4fa <__vector_13+0xca>
4f8: 63 c0 rjmp .+198 ; 0x5c0 <__vector_13+0x190>
{
CntDatensaetzeProSekunde++;
4fa: 80 91 66 00 lds r24, 0x0066
4fe: 8f 5f subi r24, 0xFF ; 255
500: 80 93 66 00 sts 0x0066, r24
PC_DebugTimeout = 10;
504: 8a e0 ldi r24, 0x0A ; 10
506: 80 93 97 00 sts 0x0097, r24
NeuerDatensatzEmpfangen = 1;
50a: 81 e0 ldi r24, 0x01 ; 1
50c: 80 93 9b 00 sts 0x009B, r24
AnzahlEmpfangsBytes = buf_ptr;
510: 50 93 98 00 sts 0x0098, r21
RxdBuffer[buf_ptr] = '\r';
514: e5 2f mov r30, r21
516: ff 27 eor r31, r31
518: ee 5a subi r30, 0xAE ; 174
51a: fe 4f sbci r31, 0xFE ; 254
51c: 8d e0 ldi r24, 0x0D ; 13
51e: 80 83 st Z, r24
520: 4f c0 rjmp .+158 ; 0x5c0 <__vector_13+0x190>
// if((RxdBuffer[1] == 's') && (RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
}
}
else
switch(UartState)
522: 20 91 a4 00 lds r18, 0x00A4
526: 82 2f mov r24, r18
528: 99 27 eor r25, r25
52a: 81 30 cpi r24, 0x01 ; 1
52c: 91 05 cpc r25, r1
52e: f9 f0 breq .+62 ; 0x56e <__vector_13+0x13e>
530: 82 30 cpi r24, 0x02 ; 2
532: 91 05 cpc r25, r1
534: 1c f4 brge .+6 ; 0x53c <__vector_13+0x10c>
536: 89 2b or r24, r25
538: 21 f0 breq .+8 ; 0x542 <__vector_13+0x112>
53a: 40 c0 rjmp .+128 ; 0x5bc <__vector_13+0x18c>
53c: 02 97 sbiw r24, 0x02 ; 2
53e: 11 f1 breq .+68 ; 0x584 <__vector_13+0x154>
540: 3d c0 rjmp .+122 ; 0x5bc <__vector_13+0x18c>
{
case 0:
if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet
542: 80 91 9c 00 lds r24, 0x009C
546: 83 32 cpi r24, 0x23 ; 35
548: 39 f4 brne .+14 ; 0x558 <__vector_13+0x128>
54a: 80 91 9b 00 lds r24, 0x009B
54e: 88 23 and r24, r24
550: 19 f4 brne .+6 ; 0x558 <__vector_13+0x128>
552: 81 e0 ldi r24, 0x01 ; 1
554: 80 93 a4 00 sts 0x00A4, r24
buf_ptr = 0;
RxdBuffer[buf_ptr++] = SioTmp;
558: 80 91 9c 00 lds r24, 0x009C
55c: 80 93 52 01 sts 0x0152, r24
560: 81 e0 ldi r24, 0x01 ; 1
562: 80 93 a3 00 sts 0x00A3, r24
crc = SioTmp;
566: 80 91 9c 00 lds r24, 0x009C
56a: 99 27 eor r25, r25
56c: 22 c0 rjmp .+68 ; 0x5b2 <__vector_13+0x182>
break;
case 1: // Adresse auswerten
UartState++;
56e: 2f 5f subi r18, 0xFF ; 255
570: 20 93 a4 00 sts 0x00A4, r18
RxdBuffer[buf_ptr++] = SioTmp;
574: e5 2f mov r30, r21
576: ff 27 eor r31, r31
578: ee 5a subi r30, 0xAE ; 174
57a: fe 4f sbci r31, 0xFE ; 254
57c: 80 91 9c 00 lds r24, 0x009C
580: 80 83 st Z, r24
582: 09 c0 rjmp .+18 ; 0x596 <__vector_13+0x166>
crc += SioTmp;
break;
case 2: // Eingangsdaten sammeln
RxdBuffer[buf_ptr] = SioTmp;
584: e5 2f mov r30, r21
586: ff 27 eor r31, r31
588: ee 5a subi r30, 0xAE ; 174
58a: fe 4f sbci r31, 0xFE ; 254
58c: 80 91 9c 00 lds r24, 0x009C
590: 80 83 st Z, r24
if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
592: 54 36 cpi r21, 0x64 ; 100
594: 20 f4 brcc .+8 ; 0x59e <__vector_13+0x16e>
596: 5f 5f subi r21, 0xFF ; 255
598: 50 93 a3 00 sts 0x00A3, r21
59c: 02 c0 rjmp .+4 ; 0x5a2 <__vector_13+0x172>
else UartState = 0;
59e: 10 92 a4 00 sts 0x00A4, r1
crc += SioTmp;
5a2: 20 91 9c 00 lds r18, 0x009C
5a6: 80 91 9f 00 lds r24, 0x009F
5aa: 90 91 a0 00 lds r25, 0x00A0
5ae: 82 0f add r24, r18
5b0: 91 1d adc r25, r1
5b2: 90 93 a0 00 sts 0x00A0, r25
5b6: 80 93 9f 00 sts 0x009F, r24
break;
5ba: 02 c0 rjmp .+4 ; 0x5c0 <__vector_13+0x190>
default:
UartState = 0;
5bc: 10 92 a4 00 sts 0x00A4, r1
5c0: ff 91 pop r31
5c2: ef 91 pop r30
5c4: bf 91 pop r27
5c6: af 91 pop r26
5c8: 9f 91 pop r25
5ca: 8f 91 pop r24
5cc: 5f 91 pop r21
5ce: 4f 91 pop r20
5d0: 3f 91 pop r19
5d2: 2f 91 pop r18
5d4: 0f 90 pop r0
5d6: 0f be out 0x3f, r0 ; 63
5d8: 0f 90 pop r0
5da: 1f 90 pop r1
5dc: 18 95 reti
000005de <AddCRC>:
break;
}
};
// --------------------------------------------------------------------------
void AddCRC(unsigned int wieviele)
{
5de: ac 01 movw r20, r24
unsigned int tmpCRC = 0,i;
5e0: a0 e0 ldi r26, 0x00 ; 0
5e2: b0 e0 ldi r27, 0x00 ; 0
for(i = 0; i < wieviele;i++)
5e4: 9d 01 movw r18, r26
5e6: a8 17 cp r26, r24
5e8: b9 07 cpc r27, r25
5ea: 48 f4 brcc .+18 ; 0x5fe <AddCRC+0x20>
5ec: ee ee ldi r30, 0xEE ; 238
5ee: f0 e0 ldi r31, 0x00 ; 0
{
tmpCRC += SendeBuffer[i];
5f0: 81 91 ld r24, Z+
5f2: 28 0f add r18, r24
5f4: 31 1d adc r19, r1
5f6: 11 96 adiw r26, 0x01 ; 1
5f8: a4 17 cp r26, r20
5fa: b5 07 cpc r27, r21
5fc: c8 f3 brcs .-14 ; 0x5f0 <AddCRC+0x12>
}
tmpCRC %= 4096;
5fe: 3f 70 andi r19, 0x0F ; 15
SendeBuffer[i++] = '=' + tmpCRC / 64;
600: fd 01 movw r30, r26
602: e2 51 subi r30, 0x12 ; 18
604: ff 4f sbci r31, 0xFF ; 255
606: c9 01 movw r24, r18
608: 56 e0 ldi r21, 0x06 ; 6
60a: 96 95 lsr r25
60c: 87 95 ror r24
60e: 5a 95 dec r21
610: e1 f7 brne .-8 ; 0x60a <AddCRC+0x2c>
612: 83 5c subi r24, 0xC3 ; 195
614: 80 83 st Z, r24
616: 11 96 adiw r26, 0x01 ; 1
SendeBuffer[i++] = '=' + tmpCRC % 64;
618: fd 01 movw r30, r26
61a: e2 51 subi r30, 0x12 ; 18
61c: ff 4f sbci r31, 0xFF ; 255
61e: 2f 73 andi r18, 0x3F ; 63
620: 30 70 andi r19, 0x00 ; 0
622: 82 2f mov r24, r18
624: 83 5c subi r24, 0xC3 ; 195
626: 80 83 st Z, r24
SendeBuffer[i++] = '\r';
628: a1 51 subi r26, 0x11 ; 17
62a: bf 4f sbci r27, 0xFF ; 255
62c: 8d e0 ldi r24, 0x0D ; 13
62e: 8c 93 st X, r24
UebertragungAbgeschlossen = 0;
630: 10 92 6e 00 sts 0x006E, r1
UDR = SendeBuffer[0];
634: 80 91 ee 00 lds r24, 0x00EE
638: 8c b9 out 0x0c, r24 ; 12
63a: 08 95 ret
0000063c <SendOutData>:
// PrintSendeBuffer();
}
// --------------------------------------------------------------------------
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
63c: 1f 93 push r17
63e: cf 93 push r28
640: df 93 push r29
642: 38 2f mov r19, r24
644: 96 2f mov r25, r22
646: ea 01 movw r28, r20
648: 72 2f mov r23, r18
unsigned int pt = 0,i;
unsigned char a,b,c,d;
unsigned char ptr = 0;
64a: 10 e0 ldi r17, 0x00 ; 0
unsigned char x,y,z;
//while(!UebertragungAbgeschlossen);
SendeBuffer[pt++] = '#'; // Startzeichen
64c: 83 e2 ldi r24, 0x23 ; 35
64e: 80 93 ee 00 sts 0x00EE, r24
SendeBuffer[pt++] = modul+'a'; // Adresse (a=0; b=1,...)
652: 9f 59 subi r25, 0x9F ; 159
654: 90 93 ef 00 sts 0x00EF, r25
SendeBuffer[pt++] = cmd; // Commando
658: 30 93 f0 00 sts 0x00F0, r19
65c: a3 e0 ldi r26, 0x03 ; 3
65e: b0 e0 ldi r27, 0x00 ; 0
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
SendeBuffer[pt++] = '=' + (a >> 2);
SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
SendeBuffer[pt++] = '=' + ( c & 0x3f);
660: 77 23 and r23, r23
662: 09 f4 brne .+2 ; 0x666 <SendOutData+0x2a>
664: 58 c0 rjmp .+176 ; 0x716 <SendOutData+0xda>
666: 77 23 and r23, r23
668: 11 f4 brne .+4 ; 0x66e <SendOutData+0x32>
66a: 97 2f mov r25, r23
66c: 07 c0 rjmp .+14 ; 0x67c <SendOutData+0x40>
66e: fe 01 movw r30, r28
670: e1 0f add r30, r17
672: f1 1d adc r31, r1
674: 1f 5f subi r17, 0xFF ; 255
676: 90 81 ld r25, Z
678: 71 50 subi r23, 0x01 ; 1
67a: 11 f4 brne .+4 ; 0x680 <SendOutData+0x44>
67c: 47 2f mov r20, r23
67e: 0e c0 rjmp .+28 ; 0x69c <SendOutData+0x60>
680: fe 01 movw r30, r28
682: e1 0f add r30, r17
684: f1 1d adc r31, r1
686: 1f 5f subi r17, 0xFF ; 255
688: 40 81 ld r20, Z
68a: 71 50 subi r23, 0x01 ; 1
68c: 39 f0 breq .+14 ; 0x69c <SendOutData+0x60>
68e: fe 01 movw r30, r28
690: e1 0f add r30, r17
692: f1 1d adc r31, r1
694: 1f 5f subi r17, 0xFF ; 255
696: 60 81 ld r22, Z
698: 71 50 subi r23, 0x01 ; 1
69a: 01 c0 rjmp .+2 ; 0x69e <SendOutData+0x62>
69c: 67 2f mov r22, r23
69e: fd 01 movw r30, r26
6a0: e2 51 subi r30, 0x12 ; 18
6a2: ff 4f sbci r31, 0xFF ; 255
6a4: 89 2f mov r24, r25
6a6: 86 95 lsr r24
6a8: 86 95 lsr r24
6aa: 83 5c subi r24, 0xC3 ; 195
6ac: 80 83 st Z, r24
6ae: 11 96 adiw r26, 0x01 ; 1
6b0: fd 01 movw r30, r26
6b2: e2 51 subi r30, 0x12 ; 18
6b4: ff 4f sbci r31, 0xFF ; 255
6b6: 89 2f mov r24, r25
6b8: 99 27 eor r25, r25
6ba: 83 70 andi r24, 0x03 ; 3
6bc: 90 70 andi r25, 0x00 ; 0
6be: 24 e0 ldi r18, 0x04 ; 4
6c0: 88 0f add r24, r24
6c2: 99 1f adc r25, r25
6c4: 2a 95 dec r18
6c6: e1 f7 brne .-8 ; 0x6c0 <SendOutData+0x84>
6c8: 55 27 eor r21, r21
6ca: 9a 01 movw r18, r20
6cc: 94 e0 ldi r25, 0x04 ; 4
6ce: 36 95 lsr r19
6d0: 27 95 ror r18
6d2: 9a 95 dec r25
6d4: e1 f7 brne .-8 ; 0x6ce <SendOutData+0x92>
6d6: 82 2b or r24, r18
6d8: 83 5c subi r24, 0xC3 ; 195
6da: 80 83 st Z, r24
6dc: 11 96 adiw r26, 0x01 ; 1
6de: fd 01 movw r30, r26
6e0: e2 51 subi r30, 0x12 ; 18
6e2: ff 4f sbci r31, 0xFF ; 255
6e4: 4f 70 andi r20, 0x0F ; 15
6e6: 50 70 andi r21, 0x00 ; 0
6e8: 44 0f add r20, r20
6ea: 55 1f adc r21, r21
6ec: 44 0f add r20, r20
6ee: 55 1f adc r21, r21
6f0: 86 2f mov r24, r22
6f2: 99 27 eor r25, r25
6f4: 26 e0 ldi r18, 0x06 ; 6
6f6: 96 95 lsr r25
6f8: 87 95 ror r24
6fa: 2a 95 dec r18
6fc: e1 f7 brne .-8 ; 0x6f6 <SendOutData+0xba>
6fe: 84 2b or r24, r20
700: 83 5c subi r24, 0xC3 ; 195
702: 80 83 st Z, r24
704: 11 96 adiw r26, 0x01 ; 1
706: fd 01 movw r30, r26
708: e2 51 subi r30, 0x12 ; 18
70a: ff 4f sbci r31, 0xFF ; 255
70c: 6f 73 andi r22, 0x3F ; 63
70e: 63 5c subi r22, 0xC3 ; 195
710: 60 83 st Z, r22
712: 11 96 adiw r26, 0x01 ; 1
714: a5 cf rjmp .-182 ; 0x660 <SendOutData+0x24>
}
AddCRC(pt);
716: cd 01 movw r24, r26
718: 0e 94 ef 02 call 0x5de <AddCRC>
71c: df 91 pop r29
71e: cf 91 pop r28
720: 1f 91 pop r17
722: 08 95 ret
00000724 <Decode64>:
}
// --------------------------------------------------------------------------
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
{
724: 1f 93 push r17
726: cf 93 push r28
728: df 93 push r29
72a: ec 01 movw r28, r24
unsigned char a,b,c,d;
unsigned char ptr = 0;
72c: 10 e0 ldi r17, 0x00 ; 0
unsigned char x,y,z;
while(len)
{
a = RxdBuffer[ptrIn++] - '=';
b = RxdBuffer[ptrIn++] - '=';
c = RxdBuffer[ptrIn++] - '=';
d = RxdBuffer[ptrIn++] - '=';
if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
if(len--) ptrOut[ptr++] = x; else break;
if(len--) ptrOut[ptr++] = y; else break;
if(len--) ptrOut[ptr++] = z; else break;
72e: 66 23 and r22, r22
730: 09 f4 brne .+2 ; 0x734 <Decode64+0x10>
732: 60 c0 rjmp .+192 ; 0x7f4 <Decode64+0xd0>
734: a2 2f mov r26, r18
736: bb 27 eor r27, r27
738: 12 97 sbiw r26, 0x02 ; 2
73a: e4 2f mov r30, r20
73c: ff 27 eor r31, r31
73e: ee 5a subi r30, 0xAE ; 174
740: fe 4f sbci r31, 0xFE ; 254
742: 30 81 ld r19, Z
744: 3d 53 subi r19, 0x3D ; 61
746: 4f 5f subi r20, 0xFF ; 255
748: e4 2f mov r30, r20
74a: ff 27 eor r31, r31
74c: ee 5a subi r30, 0xAE ; 174
74e: fe 4f sbci r31, 0xFE ; 254
750: 50 81 ld r21, Z
752: 5d 53 subi r21, 0x3D ; 61
754: 4f 5f subi r20, 0xFF ; 255
756: e4 2f mov r30, r20
758: ff 27 eor r31, r31
75a: ee 5a subi r30, 0xAE ; 174
75c: fe 4f sbci r31, 0xFE ; 254
75e: 70 81 ld r23, Z
760: 7d 53 subi r23, 0x3D ; 61
762: 4f 5f subi r20, 0xFF ; 255
764: e4 2f mov r30, r20
766: ff 27 eor r31, r31
768: ee 5a subi r30, 0xAE ; 174
76a: fe 4f sbci r31, 0xFE ; 254
76c: e0 81 ld r30, Z
76e: ed 53 subi r30, 0x3D ; 61
770: 4f 5f subi r20, 0xFF ; 255
772: 84 2f mov r24, r20
774: 99 27 eor r25, r25
776: a8 17 cp r26, r24
778: b9 07 cpc r27, r25
77a: e4 f1 brlt .+120 ; 0x7f4 <Decode64+0xd0>
77c: 83 2f mov r24, r19
77e: 99 27 eor r25, r25
780: 88 0f add r24, r24
782: 99 1f adc r25, r25
784: 88 0f add r24, r24
786: 99 1f adc r25, r25
788: 35 2f mov r19, r21
78a: 32 95 swap r19
78c: 3f 70 andi r19, 0x0F ; 15
78e: 38 2b or r19, r24
790: 85 2f mov r24, r21
792: 99 27 eor r25, r25
794: 8f 70 andi r24, 0x0F ; 15
796: 90 70 andi r25, 0x00 ; 0
798: f4 e0 ldi r31, 0x04 ; 4
79a: 88 0f add r24, r24
79c: 99 1f adc r25, r25
79e: fa 95 dec r31
7a0: e1 f7 brne .-8 ; 0x79a <Decode64+0x76>
7a2: 57 2f mov r21, r23
7a4: 56 95 lsr r21
7a6: 56 95 lsr r21
7a8: 58 2b or r21, r24
7aa: 87 2f mov r24, r23
7ac: 99 27 eor r25, r25
7ae: 83 70 andi r24, 0x03 ; 3
7b0: 90 70 andi r25, 0x00 ; 0
7b2: 76 e0 ldi r23, 0x06 ; 6
7b4: 88 0f add r24, r24
7b6: 99 1f adc r25, r25
7b8: 7a 95 dec r23
7ba: e1 f7 brne .-8 ; 0x7b4 <Decode64+0x90>
7bc: 8e 2b or r24, r30
7be: 61 50 subi r22, 0x01 ; 1
7c0: 6f 3f cpi r22, 0xFF ; 255
7c2: c1 f0 breq .+48 ; 0x7f4 <Decode64+0xd0>
7c4: fe 01 movw r30, r28
7c6: e1 0f add r30, r17
7c8: f1 1d adc r31, r1
7ca: 30 83 st Z, r19
7cc: 1f 5f subi r17, 0xFF ; 255
7ce: 61 50 subi r22, 0x01 ; 1
7d0: 6f 3f cpi r22, 0xFF ; 255
7d2: 81 f0 breq .+32 ; 0x7f4 <Decode64+0xd0>
7d4: fe 01 movw r30, r28
7d6: e1 0f add r30, r17
7d8: f1 1d adc r31, r1
7da: 50 83 st Z, r21
7dc: 1f 5f subi r17, 0xFF ; 255
7de: 61 50 subi r22, 0x01 ; 1
7e0: 6f 3f cpi r22, 0xFF ; 255
7e2: 41 f0 breq .+16 ; 0x7f4 <Decode64+0xd0>
7e4: fe 01 movw r30, r28
7e6: e1 0f add r30, r17
7e8: f1 1d adc r31, r1
7ea: 80 83 st Z, r24
7ec: 1f 5f subi r17, 0xFF ; 255
7ee: 66 23 and r22, r22
7f0: 09 f0 breq .+2 ; 0x7f4 <Decode64+0xd0>
7f2: a3 cf rjmp .-186 ; 0x73a <Decode64+0x16>
7f4: df 91 pop r29
7f6: cf 91 pop r28
7f8: 1f 91 pop r17
7fa: 08 95 ret
000007fc <BearbeiteRxDaten>:
}
}
// --------------------------------------------------------------------------
void BearbeiteRxDaten(void)
{
7fc: cf 93 push r28
7fe: df 93 push r29
800: cd b7 in r28, 0x3d ; 61
802: de b7 in r29, 0x3e ; 62
804: ad 97 sbiw r28, 0x2d ; 45
806: 0f b6 in r0, 0x3f ; 63
808: f8 94 cli
80a: de bf out 0x3e, r29 ; 62
80c: 0f be out 0x3f, r0 ; 63
80e: cd bf out 0x3d, r28 ; 61
unsigned int tmp_int_arr1[1];
unsigned int tmp_int_arr2[2];
unsigned int tmp_int_arr20[21];
unsigned char tmp_char_arr3[3];
// unsigned int tmp_int_arr4[4];
if(!NeuerDatensatzEmpfangen) return;
810: 80 91 9b 00 lds r24, 0x009B
814: 88 23 and r24, r24
816: 09 f4 brne .+2 ; 0x81a <BearbeiteRxDaten+0x1e>
818: a7 c0 rjmp .+334 ; 0x968 <__stack+0x109>
NeuerDatensatzEmpfangen = 0;
81a: 10 92 9b 00 sts 0x009B, r1
if(ErwarteAntwort == RxdBuffer[2]) AntwortEingetroffen = 1;
81e: 90 91 6d 00 lds r25, 0x006D
822: 80 91 54 01 lds r24, 0x0154
826: 98 17 cp r25, r24
828: 19 f4 brne .+6 ; 0x830 <BearbeiteRxDaten+0x34>
82a: 81 e0 ldi r24, 0x01 ; 1
82c: 80 93 92 00 sts 0x0092, r24
switch(RxdBuffer[2])
830: 80 91 54 01 lds r24, 0x0154
834: 99 27 eor r25, r25
836: 82 33 cpi r24, 0x32 ; 50
838: 91 05 cpc r25, r1
83a: 09 f4 brne .+2 ; 0x83e <BearbeiteRxDaten+0x42>
83c: 46 c0 rjmp .+140 ; 0x8ca <__stack+0x6b>
83e: 83 33 cpi r24, 0x33 ; 51
840: 91 05 cpc r25, r1
842: 34 f4 brge .+12 ; 0x850 <BearbeiteRxDaten+0x54>
844: 80 33 cpi r24, 0x30 ; 48
846: 91 05 cpc r25, r1
848: 99 f0 breq .+38 ; 0x870 <__stack+0x11>
84a: c1 97 sbiw r24, 0x31 ; 49
84c: 49 f1 breq .+82 ; 0x8a0 <__stack+0x41>
84e: 8c c0 rjmp .+280 ; 0x968 <__stack+0x109>
850: 84 34 cpi r24, 0x44 ; 68
852: 91 05 cpc r25, r1
854: 09 f4 brne .+2 ; 0x858 <BearbeiteRxDaten+0x5c>
856: 6b c0 rjmp .+214 ; 0x92e <__stack+0xcf>
858: 85 34 cpi r24, 0x45 ; 69
85a: 91 05 cpc r25, r1
85c: 24 f4 brge .+8 ; 0x866 <__stack+0x7>
85e: c3 97 sbiw r24, 0x33 ; 51
860: 09 f4 brne .+2 ; 0x864 <__stack+0x5>
862: 48 c0 rjmp .+144 ; 0x8f4 <__stack+0x95>
864: 81 c0 rjmp .+258 ; 0x968 <__stack+0x109>
866: 8b 34 cpi r24, 0x4B ; 75
868: 91 05 cpc r25, r1
86a: 09 f4 brne .+2 ; 0x86e <__stack+0xf>
86c: 6c c0 rjmp .+216 ; 0x946 <__stack+0xe7>
86e: 7c c0 rjmp .+248 ; 0x968 <__stack+0x109>
{
case '0':// LCD-Zeile0
Decode64((unsigned char *) &tmp_int_arr20,sizeof(tmp_int_arr20),3,AnzahlEmpfangsBytes);
870: 20 91 98 00 lds r18, 0x0098
874: 43 e0 ldi r20, 0x03 ; 3
876: 6a e2 ldi r22, 0x2A ; 42
878: ce 01 movw r24, r28
87a: 01 96 adiw r24, 0x01 ; 1
87c: 0e 94 92 03 call 0x724 <Decode64>
tmp_int_arr20[20] = 0;
880: 1a a6 std Y+42, r1 ; 0x2a
882: 19 a6 std Y+41, r1 ; 0x29
DisplayBusy = 1;
884: 81 e0 ldi r24, 0x01 ; 1
886: 80 93 93 00 sts 0x0093, r24
LCD_printfxy(0,0,"%s",tmp_int_arr20);
88a: 60 e0 ldi r22, 0x00 ; 0
88c: 86 2f mov r24, r22
88e: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
892: ce 01 movw r24, r28
894: 01 96 adiw r24, 0x01 ; 1
896: 9f 93 push r25
898: 8f 93 push r24
89a: 88 ea ldi r24, 0xA8 ; 168
89c: 90 e0 ldi r25, 0x00 ; 0
89e: 3e c0 rjmp .+124 ; 0x91c <__stack+0xbd>
break;
case '1':// LCD-Zeile1
Decode64((unsigned char *) &tmp_int_arr20,sizeof(tmp_int_arr20),3,AnzahlEmpfangsBytes);
8a0: 20 91 98 00 lds r18, 0x0098
8a4: 43 e0 ldi r20, 0x03 ; 3
8a6: 6a e2 ldi r22, 0x2A ; 42
8a8: ce 01 movw r24, r28
8aa: 01 96 adiw r24, 0x01 ; 1
8ac: 0e 94 92 03 call 0x724 <Decode64>
tmp_int_arr20[20] = 0;
8b0: 1a a6 std Y+42, r1 ; 0x2a
8b2: 19 a6 std Y+41, r1 ; 0x29
LCD_printfxy(0,1,"%s",tmp_int_arr20);
8b4: 61 e0 ldi r22, 0x01 ; 1
8b6: 80 e0 ldi r24, 0x00 ; 0
8b8: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
8bc: ce 01 movw r24, r28
8be: 01 96 adiw r24, 0x01 ; 1
8c0: 9f 93 push r25
8c2: 8f 93 push r24
8c4: 8b ea ldi r24, 0xAB ; 171
8c6: 90 e0 ldi r25, 0x00 ; 0
8c8: 29 c0 rjmp .+82 ; 0x91c <__stack+0xbd>
break;
case '2':// LCD-Zeile2
Decode64((unsigned char *) &tmp_int_arr20,sizeof(tmp_int_arr20),3,AnzahlEmpfangsBytes);
8ca: 20 91 98 00 lds r18, 0x0098
8ce: 43 e0 ldi r20, 0x03 ; 3
8d0: 6a e2 ldi r22, 0x2A ; 42
8d2: ce 01 movw r24, r28
8d4: 01 96 adiw r24, 0x01 ; 1
8d6: 0e 94 92 03 call 0x724 <Decode64>
tmp_int_arr20[20] = 0;
8da: 1a a6 std Y+42, r1 ; 0x2a
8dc: 19 a6 std Y+41, r1 ; 0x29
LCD_printfxy(0,2,"%s",tmp_int_arr20);
8de: 62 e0 ldi r22, 0x02 ; 2
8e0: 80 e0 ldi r24, 0x00 ; 0
8e2: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
8e6: ce 01 movw r24, r28
8e8: 01 96 adiw r24, 0x01 ; 1
8ea: 9f 93 push r25
8ec: 8f 93 push r24
8ee: 8e ea ldi r24, 0xAE ; 174
8f0: 90 e0 ldi r25, 0x00 ; 0
8f2: 14 c0 rjmp .+40 ; 0x91c <__stack+0xbd>
break;
case '3':// LCD-Zeile3
Decode64((unsigned char *) &tmp_int_arr20,sizeof(tmp_int_arr20),3,AnzahlEmpfangsBytes);
8f4: 20 91 98 00 lds r18, 0x0098
8f8: 43 e0 ldi r20, 0x03 ; 3
8fa: 6a e2 ldi r22, 0x2A ; 42
8fc: ce 01 movw r24, r28
8fe: 01 96 adiw r24, 0x01 ; 1
900: 0e 94 92 03 call 0x724 <Decode64>
tmp_int_arr20[20] = 0;
904: 1a a6 std Y+42, r1 ; 0x2a
906: 19 a6 std Y+41, r1 ; 0x29
LCD_printfxy(0,3,"%s",tmp_int_arr20);
908: 63 e0 ldi r22, 0x03 ; 3
90a: 80 e0 ldi r24, 0x00 ; 0
90c: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
910: ce 01 movw r24, r28
912: 01 96 adiw r24, 0x01 ; 1
914: 9f 93 push r25
916: 8f 93 push r24
918: 81 eb ldi r24, 0xB1 ; 177
91a: 90 e0 ldi r25, 0x00 ; 0
91c: 9f 93 push r25
91e: 8f 93 push r24
920: 0e 94 e3 06 call 0xdc6 <_printf_P>
break;
924: 0f 90 pop r0
926: 0f 90 pop r0
928: 0f 90 pop r0
92a: 0f 90 pop r0
92c: 1d c0 rjmp .+58 ; 0x968 <__stack+0x109>
case 'D': // Debug Eingangsdaten
Decode64((unsigned char *) &DebugOut,sizeof(DebugOut),3,AnzahlEmpfangsBytes);
92e: 20 91 98 00 lds r18, 0x0098
932: 43 e0 ldi r20, 0x03 ; 3
934: 6a e1 ldi r22, 0x1A ; 26
936: 83 ed ldi r24, 0xD3 ; 211
938: 90 e0 ldi r25, 0x00 ; 0
93a: 0e 94 92 03 call 0x724 <Decode64>
PORTB = DebugOut.Digital[1];
93e: 80 91 d4 00 lds r24, 0x00D4
942: 88 bb out 0x18, r24 ; 24
break;
944: 11 c0 rjmp .+34 ; 0x968 <__stack+0x109>
case 'K': // Debug Eingangsdaten
Decode64(tmp_char_arr3,sizeof(tmp_char_arr3),3,AnzahlEmpfangsBytes);
946: 20 91 98 00 lds r18, 0x0098
94a: 43 e0 ldi r20, 0x03 ; 3
94c: 64 2f mov r22, r20
94e: ce 01 movw r24, r28
950: 8b 96 adiw r24, 0x2b ; 43
952: 0e 94 92 03 call 0x724 <Decode64>
TX_DigTransferKanalL = tmp_char_arr3[0];
956: 8b a5 ldd r24, Y+43 ; 0x2b
958: 80 93 96 00 sts 0x0096, r24
TX_DigTransferKanalH = tmp_char_arr3[1];
95c: 8c a5 ldd r24, Y+44 ; 0x2c
95e: 80 93 95 00 sts 0x0095, r24
TX_DigTransferKanalDaten = tmp_char_arr3[2];
962: 8d a5 ldd r24, Y+45 ; 0x2d
964: 80 93 94 00 sts 0x0094, r24
968: ad 96 adiw r28, 0x2d ; 45
96a: 0f b6 in r0, 0x3f ; 63
96c: f8 94 cli
96e: de bf out 0x3e, r29 ; 62
970: 0f be out 0x3f, r0 ; 63
972: cd bf out 0x3d, r28 ; 61
974: df 91 pop r29
976: cf 91 pop r28
978: 08 95 ret
0000097a <uart_putchar>:
//if(RxdBuffer[1] == 'b') LCD_printfxy(0,0,"b:%4d %2x",(int)TX_DigTransferKanalH * 256 + TX_DigTransferKanalL,TX_DigTransferKanalDaten);
//if(RxdBuffer[1] == 'c') LCD_printfxy(0,1,"c:%4d %2x",(int)TX_DigTransferKanalH * 256 + TX_DigTransferKanalL,TX_DigTransferKanalDaten);
break;
/*
unsigned char Digital[13]; // 0 = Taster, Hauptkarte
// 1 + 2 = Debugkanäle
// 3 = Digin, Hauptkarte
// 4 = Relais, Hauptkarte
// 5 + 6 = Extern IO1 (12Bit ein 4 Bit aus)
// 7 + 8 = Extern IO2 (12Bit ein 4 Bit aus)
// 9 + 10 = Extern IO3 (12Bit ein 4 Bit aus)
// 11 + 12= Extern IO4 (12Bit ein 4 Bit aus)
*/
/* case 'd': // Debug Eingangsdaten
Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes);
for(unsigned char i=0; i<4;i++)
{
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]);
EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8);
}
break;
case 'g': // "Get"-Anforderung für Debug-Daten // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen
DebugGetAnforderung = 1;
break;
case 'v': // Version-Anforderung und Ausbaustufe
GetVersionAnforderung = 1;
break;
case 'u': // Uhr stellen
Decode64((unsigned char *) &tmp_int_arr2[0],sizeof(tmp_int_arr2),3,AnzahlEmpfangsBytes);
ZEITWERT = tmp_int_arr2[0];
SEK = tmp_int_arr2[1];
make_time_variables(ZEITWERT);
RTC_SetTime(STD, MIN, SEK);
RTC_SetWDay(TAG);
break;
case 'i': // Intervalle für die Datenübertragung
Decode64((unsigned char *) &tmp_int_arr2[0],sizeof(tmp_int_arr2),3,AnzahlEmpfangsBytes);
Debug_Timer_Intervall = tmp_int_arr2[0];
Debug_Display_Intervall = tmp_int_arr2[1];
SendeDummyDaten = 1;
break;
case 's': // single Step 1 = Stop 2 = noch einen Zyklus 3 = noch 2 Zyklen
Decode64((unsigned char *) &tmp_int_arr1[0],sizeof(tmp_int_arr2),3,AnzahlEmpfangsBytes);
SingleStep = tmp_int_arr1[0];
break;
*/
}
}
//############################################################################
//Routine für die Serielle Ausgabe
int uart_putchar (char c)
//############################################################################
{
97a: cf 93 push r28
97c: c8 2f mov r28, r24
if (c == '\n')
97e: 8a 30 cpi r24, 0x0A ; 10
980: 19 f4 brne .+6 ; 0x988 <uart_putchar+0xe>
uart_putchar('\r');
982: 8d e0 ldi r24, 0x0D ; 13
984: 0e 94 bd 04 call 0x97a <uart_putchar>
//Warten solange bis Zeichen gesendet wurde
loop_until_bit_is_set(USR, UDRE);
988: 5d 9b sbis 0x0b, 5 ; 11
98a: fe cf rjmp .-4 ; 0x988 <uart_putchar+0xe>
//Ausgabe des Zeichens
UDR = c;
98c: cc b9 out 0x0c, r28 ; 12
return (0);
}
98e: 80 e0 ldi r24, 0x00 ; 0
990: 90 e0 ldi r25, 0x00 ; 0
992: cf 91 pop r28
994: 08 95 ret
00000996 <WriteProgramData>:
// --------------------------------------------------------------------------
void WriteProgramData(unsigned int pos, unsigned char wert)
{
996: 08 95 ret
00000998 <UART_Init>:
//if (ProgramLocation == IN_RAM) Buffer[pos] = wert;
// else eeprom_write_byte(&EE_Buffer[pos], wert);
// Buffer[pos] = wert;
}
//############################################################################
//INstallation der Seriellen Schnittstelle
void UART_Init (void)
//############################################################################
{
//Enable TXEN im Register UCR TX-Data Enable & RX Enable
UCR=(1 << TXEN) | (1 << RXEN);
998: 88 e1 ldi r24, 0x18 ; 24
99a: 8a b9 out 0x0a, r24 ; 10
// UART Double Speed (U2X)
USR |= (1<<U2X);
99c: 59 9a sbi 0x0b, 1 ; 11
// RX-Interrupt Freigabe
UCSRB |= (1<<RXCIE);
99e: 57 9a sbi 0x0a, 7 ; 10
// TX-Interrupt Freigabe
UCSRB |= (1<<TXCIE);
9a0: 56 9a sbi 0x0a, 6 ; 10
//Teiler wird gesetzt
UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1);
9a2: 81 e2 ldi r24, 0x21 ; 33
9a4: 89 b9 out 0x09, r24 ; 9
//UBRR = 33;
//öffnet einen Kanal für printf (STDOUT)
fdevopen (uart_putchar, NULL);
9a6: 60 e0 ldi r22, 0x00 ; 0
9a8: 70 e0 ldi r23, 0x00 ; 0
9aa: 8d eb ldi r24, 0xBD ; 189
9ac: 94 e0 ldi r25, 0x04 ; 4
9ae: 0e 94 71 0c call 0x18e2 <fdevopen>
9b2: 08 95 ret
000009b4 <SendeRemoteTasten>:
//sbi(PORTD,4);
}
/*
struct str_DebugIn
{
unsigned char Digital[2];
unsigned char RemoteTasten;
unsigned int Analog[4];
};
*/
void SendeRemoteTasten(unsigned char keys)
{
9b4: 98 2f mov r25, r24
while(!UebertragungAbgeschlossen); // evtl warten
9b6: 80 91 6e 00 lds r24, 0x006E
9ba: 88 23 and r24, r24
9bc: e1 f3 breq .-8 ; 0x9b6 <SendeRemoteTasten+0x2>
DebugIn.RemoteTasten = keys;
9be: 90 93 c0 00 sts 0x00C0, r25
DebugIn.Analog[0] = AnalogWerte[0];
9c2: 80 91 ca 01 lds r24, 0x01CA
9c6: 90 91 cb 01 lds r25, 0x01CB
9ca: 90 93 c2 00 sts 0x00C2, r25
9ce: 80 93 c1 00 sts 0x00C1, r24
DebugIn.Analog[1] = AnalogWerte[1];
9d2: 80 91 cc 01 lds r24, 0x01CC
9d6: 90 91 cd 01 lds r25, 0x01CD
9da: 90 93 c4 00 sts 0x00C4, r25
9de: 80 93 c3 00 sts 0x00C3, r24
DebugIn.Analog[2] = AnalogWerte[2];
9e2: 80 91 ce 01 lds r24, 0x01CE
9e6: 90 91 cf 01 lds r25, 0x01CF
9ea: 90 93 c6 00 sts 0x00C6, r25
9ee: 80 93 c5 00 sts 0x00C5, r24
DebugIn.Analog[3] = IR_Code;
9f2: 80 91 c7 01 lds r24, 0x01C7
9f6: 90 91 c8 01 lds r25, 0x01C8
9fa: 90 93 c8 00 sts 0x00C8, r25
9fe: 80 93 c7 00 sts 0x00C7, r24
SendOutData('d',SlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn));
a02: 2b e0 ldi r18, 0x0B ; 11
a04: 4e eb ldi r20, 0xBE ; 190
a06: 50 e0 ldi r21, 0x00 ; 0
a08: 60 91 64 00 lds r22, 0x0064
a0c: 84 e6 ldi r24, 0x64 ; 100
a0e: 0e 94 1e 03 call 0x63c <SendOutData>
a12: 08 95 ret
00000a14 <SendIntervalle>:
}
void SendIntervalle(unsigned int debug, unsigned int disp)
{
a14: cf 93 push r28
a16: df 93 push r29
a18: cd b7 in r28, 0x3d ; 61
a1a: de b7 in r29, 0x3e ; 62
a1c: 24 97 sbiw r28, 0x04 ; 4
a1e: 0f b6 in r0, 0x3f ; 63
a20: f8 94 cli
a22: de bf out 0x3e, r29 ; 62
a24: 0f be out 0x3f, r0 ; 63
a26: cd bf out 0x3d, r28 ; 61
unsigned int tmp_int_arr2[2];
tmp_int_arr2[0] = debug;
a28: 9a 83 std Y+2, r25 ; 0x02
a2a: 89 83 std Y+1, r24 ; 0x01
tmp_int_arr2[1] = disp;
a2c: 7c 83 std Y+4, r23 ; 0x04
a2e: 6b 83 std Y+3, r22 ; 0x03
while(!UebertragungAbgeschlossen); // evtl warten
a30: 80 91 6e 00 lds r24, 0x006E
a34: 88 23 and r24, r24
a36: e1 f3 breq .-8 ; 0xa30 <SendIntervalle+0x1c>
SendOutData('i',SlaveAdresse,(unsigned char *) &tmp_int_arr2,sizeof(tmp_int_arr2));
a38: 24 e0 ldi r18, 0x04 ; 4
a3a: ae 01 movw r20, r28
a3c: 4f 5f subi r20, 0xFF ; 255
a3e: 5f 4f sbci r21, 0xFF ; 255
a40: 60 91 64 00 lds r22, 0x0064
a44: 89 e6 ldi r24, 0x69 ; 105
a46: 0e 94 1e 03 call 0x63c <SendOutData>
a4a: 24 96 adiw r28, 0x04 ; 4
a4c: 0f b6 in r0, 0x3f ; 63
a4e: f8 94 cli
a50: de bf out 0x3e, r29 ; 62
a52: 0f be out 0x3f, r0 ; 63
a54: cd bf out 0x3d, r28 ; 61
a56: df 91 pop r29
a58: cf 91 pop r28
a5a: 08 95 ret
00000a5c <ClearIntervalle>:
}
void ClearIntervalle(void)
{
a5c: cf 93 push r28
a5e: df 93 push r29
a60: cd b7 in r28, 0x3d ; 61
a62: de b7 in r29, 0x3e ; 62
a64: 24 97 sbiw r28, 0x04 ; 4
a66: 0f b6 in r0, 0x3f ; 63
a68: f8 94 cli
a6a: de bf out 0x3e, r29 ; 62
a6c: 0f be out 0x3f, r0 ; 63
a6e: cd bf out 0x3d, r28 ; 61
unsigned int tmp_int_arr2[2];
tmp_int_arr2[0] = 0;
a70: 1a 82 std Y+2, r1 ; 0x02
a72: 19 82 std Y+1, r1 ; 0x01
tmp_int_arr2[1] = 0;
a74: 1c 82 std Y+4, r1 ; 0x04
a76: 1b 82 std Y+3, r1 ; 0x03
while(!UebertragungAbgeschlossen); // evtl warten
a78: 80 91 6e 00 lds r24, 0x006E
a7c: 88 23 and r24, r24
a7e: e1 f3 breq .-8 ; 0xa78 <ClearIntervalle+0x1c>
SendOutData('i',0,(unsigned char *) &tmp_int_arr2,sizeof(tmp_int_arr2)); // 0= an alle
a80: 24 e0 ldi r18, 0x04 ; 4
a82: ae 01 movw r20, r28
a84: 4f 5f subi r20, 0xFF ; 255
a86: 5f 4f sbci r21, 0xFF ; 255
a88: 60 e0 ldi r22, 0x00 ; 0
a8a: 89 e6 ldi r24, 0x69 ; 105
a8c: 0e 94 1e 03 call 0x63c <SendOutData>
a90: 24 96 adiw r28, 0x04 ; 4
a92: 0f b6 in r0, 0x3f ; 63
a94: f8 94 cli
a96: de bf out 0x3e, r29 ; 62
a98: 0f be out 0x3f, r0 ; 63
a9a: cd bf out 0x3d, r28 ; 61
a9c: df 91 pop r29
a9e: cf 91 pop r28
aa0: 08 95 ret
00000aa2 <DatenUebertragung>:
}
void DatenUebertragung(unsigned char key)
{
aa2: cf 93 push r28
aa4: df 93 push r29
aa6: cd b7 in r28, 0x3d ; 61
aa8: de b7 in r29, 0x3e ; 62
aaa: 25 97 sbiw r28, 0x05 ; 5
aac: 0f b6 in r0, 0x3f ; 63
aae: f8 94 cli
ab0: de bf out 0x3e, r29 ; 62
ab2: 0f be out 0x3f, r0 ; 63
ab4: cd bf out 0x3d, r28 ; 61
ab6: 98 2f mov r25, r24
static unsigned char state = 1;
unsigned char temp_1[1];
unsigned char temp_2[2];
unsigned char temp_3[3];
unsigned int tmp_int_arr2[2];
while(!UebertragungAbgeschlossen); // evtl warten
ab8: 80 91 6e 00 lds r24, 0x006E
abc: 88 23 and r24, r24
abe: e1 f3 breq .-8 ; 0xab8 <DatenUebertragung+0x16>
static unsigned char KanalSlave = 1;
if(PollDisplay)
ac0: 80 91 ed 00 lds r24, 0x00ED
ac4: 88 23 and r24, r24
ac6: e1 f0 breq .+56 ; 0xb00 <DatenUebertragung+0x5e>
{
temp_2[0] = key;
ac8: 9c 83 std Y+4, r25 ; 0x04
temp_2[1] = 6;
aca: 86 e0 ldi r24, 0x06 ; 6
acc: 8d 83 std Y+5, r24 ; 0x05
if(DisplayZeilen == 4) temp_2[1] = 4 + 9; // anzahl Zeilen --> + 8 bedeutet: ersten Pollingzyklus freilassen
ace: 80 91 65 00 lds r24, 0x0065
ad2: 84 30 cpi r24, 0x04 ; 4
ad4: 11 f4 brne .+4 ; 0xada <DatenUebertragung+0x38>
ad6: 8d e0 ldi r24, 0x0D ; 13
ad8: 01 c0 rjmp .+2 ; 0xadc <DatenUebertragung+0x3a>
else temp_2[1] = 2 + 9;
ada: 8b e0 ldi r24, 0x0B ; 11
adc: 8d 83 std Y+5, r24 ; 0x05
SendOutData('h',SlaveAdresse,(unsigned char *) &temp_2,sizeof(temp_2));
ade: 22 e0 ldi r18, 0x02 ; 2
ae0: ae 01 movw r20, r28
ae2: 4c 5f subi r20, 0xFC ; 252
ae4: 5f 4f sbci r21, 0xFF ; 255
ae6: 60 91 64 00 lds r22, 0x0064
aea: 88 e6 ldi r24, 0x68 ; 104
aec: 0e 94 1e 03 call 0x63c <SendOutData>
ErwarteAntwort = '0';
af0: 80 e3 ldi r24, 0x30 ; 48
af2: 80 93 6d 00 sts 0x006D, r24
DisplayBusy = 90;
af6: 8a e5 ldi r24, 0x5A ; 90
af8: 80 93 93 00 sts 0x0093, r24
PollDisplay = 0;
afc: 10 92 ed 00 sts 0x00ED, r1
}
if(!DisplayBusy)
b00: 60 91 93 00 lds r22, 0x0093
b04: 66 23 and r22, r22
b06: e1 f5 brne .+120 ; 0xb80 <DatenUebertragung+0xde>
switch(state)
b08: 80 91 6f 00 lds r24, 0x006F
b0c: 99 27 eor r25, r25
b0e: 81 30 cpi r24, 0x01 ; 1
b10: 91 05 cpc r25, r1
b12: 19 f0 breq .+6 ; 0xb1a <DatenUebertragung+0x78>
b14: 02 97 sbiw r24, 0x02 ; 2
b16: e9 f0 breq .+58 ; 0xb52 <DatenUebertragung+0xb0>
b18: 30 c0 rjmp .+96 ; 0xb7a <DatenUebertragung+0xd8>
{
case 1:// Display
SendOutData('k',KanalSlave,(unsigned char *) &temp_3,sizeof(temp_3));
b1a: 23 e0 ldi r18, 0x03 ; 3
b1c: ae 01 movw r20, r28
b1e: 4f 5f subi r20, 0xFF ; 255
b20: 5f 4f sbci r21, 0xFF ; 255
b22: 60 91 70 00 lds r22, 0x0070
b26: 8b e6 ldi r24, 0x6B ; 107
b28: 0e 94 1e 03 call 0x63c <SendOutData>
ErwarteAntwort = 'K';
b2c: 8b e4 ldi r24, 0x4B ; 75
b2e: 80 93 6d 00 sts 0x006D, r24
if(++KanalSlave > AnzahlTeilnehmer) KanalSlave = 1;
b32: 80 91 70 00 lds r24, 0x0070
b36: 8f 5f subi r24, 0xFF ; 255
b38: 80 93 70 00 sts 0x0070, r24
b3c: 90 91 6c 00 lds r25, 0x006C
b40: 98 17 cp r25, r24
b42: 18 f4 brcc .+6 ; 0xb4a <DatenUebertragung+0xa8>
b44: 81 e0 ldi r24, 0x01 ; 1
b46: 80 93 70 00 sts 0x0070, r24
state++;
b4a: 80 91 6f 00 lds r24, 0x006F
b4e: 8f 5f subi r24, 0xFF ; 255
b50: 15 c0 rjmp .+42 ; 0xb7c <DatenUebertragung+0xda>
break;
case 2:
temp_3[0] = TX_DigTransferKanalL;
b52: 80 91 96 00 lds r24, 0x0096
b56: 89 83 std Y+1, r24 ; 0x01
temp_3[1] = TX_DigTransferKanalH;
b58: 80 91 95 00 lds r24, 0x0095
b5c: 8a 83 std Y+2, r24 ; 0x02
temp_3[2] = TX_DigTransferKanalDaten;
b5e: 80 91 94 00 lds r24, 0x0094
b62: 8b 83 std Y+3, r24 ; 0x03
SendOutData('l',0,(unsigned char *) &temp_3,sizeof(temp_3));
b64: 23 e0 ldi r18, 0x03 ; 3
b66: ae 01 movw r20, r28
b68: 4f 5f subi r20, 0xFF ; 255
b6a: 5f 4f sbci r21, 0xFF ; 255
b6c: 8c e6 ldi r24, 0x6C ; 108
b6e: 0e 94 1e 03 call 0x63c <SendOutData>
AntwortEingetroffen = 1; // erwarte keine Antwort
b72: 81 e0 ldi r24, 0x01 ; 1
b74: 80 93 92 00 sts 0x0092, r24
b78: 01 c0 rjmp .+2 ; 0xb7c <DatenUebertragung+0xda>
state = 1;
break;
default: state = 1;
b7a: 81 e0 ldi r24, 0x01 ; 1
b7c: 80 93 6f 00 sts 0x006F, r24
b80: 25 96 adiw r28, 0x05 ; 5
b82: 0f b6 in r0, 0x3f ; 63
b84: f8 94 cli
b86: de bf out 0x3e, r29 ; 62
b88: 0f be out 0x3f, r0 ; 63
b8a: cd bf out 0x3d, r28 ; 61
b8c: df 91 pop r29
b8e: cf 91 pop r28
b90: 08 95 ret
00000b92 <_long_delay>:
#include "main.h"
void _long_delay(void)
{
long t = 5000;
b92: 88 e8 ldi r24, 0x88 ; 136
b94: 93 e1 ldi r25, 0x13 ; 19
b96: a0 e0 ldi r26, 0x00 ; 0
b98: b0 e0 ldi r27, 0x00 ; 0
while (t--);
b9a: 03 97 sbiw r24, 0x03 ; 3
b9c: a1 09 sbc r26, r1
b9e: b1 09 sbc r27, r1
ba0: 8f 3f cpi r24, 0xFF ; 255
ba2: 2f ef ldi r18, 0xFF ; 255
ba4: 92 07 cpc r25, r18
ba6: 2f ef ldi r18, 0xFF ; 255
ba8: a2 07 cpc r26, r18
baa: 2f ef ldi r18, 0xFF ; 255
bac: b2 07 cpc r27, r18
bae: a9 f7 brne .-22 ; 0xb9a <_long_delay+0x8>
bb0: 08 95 ret
00000bb2 <_short_delay>:
}
void _short_delay(void)
{
int t = 500;
bb2: 84 ef ldi r24, 0xF4 ; 244
bb4: 91 e0 ldi r25, 0x01 ; 1
while (t--);
bb6: 03 97 sbiw r24, 0x03 ; 3
bb8: 2f ef ldi r18, 0xFF ; 255
bba: 8f 3f cpi r24, 0xFF ; 255
bbc: 92 07 cpc r25, r18
bbe: d9 f7 brne .-10 ; 0xbb6 <_short_delay+0x4>
bc0: 08 95 ret
00000bc2 <_lcd_write_command>:
}
void _lcd_write_command(unsigned char data)
{
bc2: 28 2f mov r18, r24
LCD_PORT_w = (data & 0xf0) | DISPLAY_EN;
bc4: 80 7f andi r24, 0xF0 ; 240
bc6: 98 2f mov r25, r24
bc8: 94 60 ori r25, 0x04 ; 4
bca: 95 bb out 0x15, r25 ; 21
LCD_PORT_w = (data & 0xf0) | DISPLAY_EN;
bcc: 95 bb out 0x15, r25 ; 21
LCD_PORT_w = (data & 0xf0);
bce: 85 bb out 0x15, r24 ; 21
LCD_PORT_w = (data & 0xf0);
bd0: 85 bb out 0x15, r24 ; 21
LCD_PORT_w = (data << 4) | DISPLAY_EN;
bd2: 82 2f mov r24, r18
bd4: 99 27 eor r25, r25
bd6: 34 e0 ldi r19, 0x04 ; 4
bd8: 88 0f add r24, r24
bda: 99 1f adc r25, r25
bdc: 3a 95 dec r19
bde: e1 f7 brne .-8 ; 0xbd8 <_lcd_write_command+0x16>
be0: 84 60 ori r24, 0x04 ; 4
be2: 85 bb out 0x15, r24 ; 21
LCD_PORT_w = (data << 4) | DISPLAY_EN;
be4: 85 bb out 0x15, r24 ; 21
LCD_PORT_w = (data << 4);
be6: 22 95 swap r18
be8: 20 7f andi r18, 0xF0 ; 240
bea: 25 bb out 0x15, r18 ; 21
bec: 08 95 ret
00000bee <_lcd_write_4bit>:
}
void _lcd_write_4bit(unsigned char data)
{
LCD_PORT_w = (data << 4) | DISPLAY_EN;
bee: 28 2f mov r18, r24
bf0: 33 27 eor r19, r19
bf2: 44 e0 ldi r20, 0x04 ; 4
bf4: 22 0f add r18, r18
bf6: 33 1f adc r19, r19
bf8: 4a 95 dec r20
bfa: e1 f7 brne .-8 ; 0xbf4 <_lcd_write_4bit+0x6>
bfc: 92 2f mov r25, r18
bfe: 94 60 ori r25, 0x04 ; 4
c00: 95 bb out 0x15, r25 ; 21
LCD_PORT_w = (data << 4) | DISPLAY_EN;
c02: 95 bb out 0x15, r25 ; 21
LCD_PORT_w = (data << 4);
c04: 82 95 swap r24
c06: 80 7f andi r24, 0xF0 ; 240
c08: 85 bb out 0x15, r24 ; 21
c0a: 08 95 ret
00000c0c <lcd_write_byte>:
}
void lcd_write_byte(unsigned char data)
{
c0c: 28 2f mov r18, r24
LCD_PORT_w = (data & 0xf0) | DISPLAY_EN | DISPLAY_RS;
c0e: 80 7f andi r24, 0xF0 ; 240
c10: 98 2f mov r25, r24
c12: 95 60 ori r25, 0x05 ; 5
c14: 95 bb out 0x15, r25 ; 21
LCD_PORT_w = (data & 0xf0) | DISPLAY_RS;
c16: 81 60 ori r24, 0x01 ; 1
c18: 85 bb out 0x15, r24 ; 21
LCD_PORT_w = (data << 4) | DISPLAY_EN | DISPLAY_RS;
c1a: 82 2f mov r24, r18
c1c: 99 27 eor r25, r25
c1e: 54 e0 ldi r21, 0x04 ; 4
c20: 88 0f add r24, r24
c22: 99 1f adc r25, r25
c24: 5a 95 dec r21
c26: e1 f7 brne .-8 ; 0xc20 <lcd_write_byte+0x14>
c28: 28 2f mov r18, r24
c2a: 25 60 ori r18, 0x05 ; 5
c2c: 25 bb out 0x15, r18 ; 21
LCD_PORT_w = (data << 4) | DISPLAY_RS;
c2e: 81 60 ori r24, 0x01 ; 1
c30: 85 bb out 0x15, r24 ; 21
c32: 08 95 ret
00000c34 <my_pput>:
}
int my_pput(int zeichen)
{
lcd_write_byte((char) zeichen);
c34: 0e 94 06 06 call 0xc0c <lcd_write_byte>
return(1);
}
c38: 81 e0 ldi r24, 0x01 ; 1
c3a: 90 e0 ldi r25, 0x00 ; 0
c3c: 08 95 ret
00000c3e <LCD_Init>:
// initialize the LCD controller
void LCD_Init(void)
{
LCD_PORT_DDR = 0xff;//0xf0 | DISPLAY_RS | DISPLAY_EN;
c3e: 8f ef ldi r24, 0xFF ; 255
c40: 84 bb out 0x14, r24 ; 20
_long_delay();
c42: 0e 94 c9 05 call 0xb92 <_long_delay>
_long_delay();
c46: 0e 94 c9 05 call 0xb92 <_long_delay>
_long_delay();
c4a: 0e 94 c9 05 call 0xb92 <_long_delay>
_lcd_write_4bit(0x03); // noch 8 Bit
c4e: 83 e0 ldi r24, 0x03 ; 3
c50: 0e 94 f7 05 call 0xbee <_lcd_write_4bit>
_long_delay();
c54: 0e 94 c9 05 call 0xb92 <_long_delay>
_lcd_write_4bit(0x03); // noch 8 Bit
c58: 83 e0 ldi r24, 0x03 ; 3
c5a: 0e 94 f7 05 call 0xbee <_lcd_write_4bit>
_long_delay();
c5e: 0e 94 c9 05 call 0xb92 <_long_delay>
_lcd_write_4bit(0x03); // noch 8 Bit
c62: 83 e0 ldi r24, 0x03 ; 3
c64: 0e 94 f7 05 call 0xbee <_lcd_write_4bit>
_long_delay();
c68: 0e 94 c9 05 call 0xb92 <_long_delay>
_lcd_write_4bit(0x02); // jetzt 4 Bit
c6c: 82 e0 ldi r24, 0x02 ; 2
c6e: 0e 94 f7 05 call 0xbee <_lcd_write_4bit>
_long_delay();
c72: 0e 94 c9 05 call 0xb92 <_long_delay>
_lcd_write_command(0x28); // 4 Bit Zweizeilig
c76: 88 e2 ldi r24, 0x28 ; 40
c78: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
_long_delay();
c7c: 0e 94 c9 05 call 0xb92 <_long_delay>
_lcd_write_command(0x08); // Display aus
c80: 88 e0 ldi r24, 0x08 ; 8
c82: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
_long_delay();
c86: 0e 94 c9 05 call 0xb92 <_long_delay>
_lcd_write_command(0x01); // Clear
c8a: 81 e0 ldi r24, 0x01 ; 1
c8c: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
_long_delay();
c90: 0e 94 c9 05 call 0xb92 <_long_delay>
_lcd_write_command(0x06); //Entry mode
c94: 86 e0 ldi r24, 0x06 ; 6
c96: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
_long_delay();
c9a: 0e 94 c9 05 call 0xb92 <_long_delay>
_lcd_write_command(0x08 + 4); // Display an
c9e: 8c e0 ldi r24, 0x0C ; 12
ca0: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
_long_delay();
ca4: 0e 94 c9 05 call 0xb92 <_long_delay>
ca8: 08 95 ret
00000caa <LCD_Gotoxy>:
}
void LCD_Gotoxy(unsigned char x , unsigned char y)
{
caa: 1f 93 push r17
cac: cf 93 push r28
cae: c8 2f mov r28, r24
cb0: 16 2f mov r17, r22
_short_delay();
cb2: 0e 94 d9 05 call 0xbb2 <_short_delay>
switch(y)
cb6: 81 2f mov r24, r17
cb8: 99 27 eor r25, r25
cba: 81 30 cpi r24, 0x01 ; 1
cbc: 91 05 cpc r25, r1
cbe: 79 f0 breq .+30 ; 0xcde <LCD_Gotoxy+0x34>
cc0: 82 30 cpi r24, 0x02 ; 2
cc2: 91 05 cpc r25, r1
cc4: 1c f4 brge .+6 ; 0xccc <LCD_Gotoxy+0x22>
cc6: 89 2b or r24, r25
cc8: 39 f0 breq .+14 ; 0xcd8 <LCD_Gotoxy+0x2e>
cca: 13 c0 rjmp .+38 ; 0xcf2 <LCD_Gotoxy+0x48>
ccc: 82 30 cpi r24, 0x02 ; 2
cce: 91 05 cpc r25, r1
cd0: 49 f0 breq .+18 ; 0xce4 <LCD_Gotoxy+0x3a>
cd2: 03 97 sbiw r24, 0x03 ; 3
cd4: 51 f0 breq .+20 ; 0xcea <LCD_Gotoxy+0x40>
cd6: 0d c0 rjmp .+26 ; 0xcf2 <LCD_Gotoxy+0x48>
{ case 0 : _lcd_write_command(x + 0x80); break;
cd8: 8c 2f mov r24, r28
cda: 80 58 subi r24, 0x80 ; 128
cdc: 08 c0 rjmp .+16 ; 0xcee <LCD_Gotoxy+0x44>
case 1 : _lcd_write_command(x + 0xC0); break;
cde: 8c 2f mov r24, r28
ce0: 80 54 subi r24, 0x40 ; 64
ce2: 05 c0 rjmp .+10 ; 0xcee <LCD_Gotoxy+0x44>
case 2 : _lcd_write_command(x + (0x80 + 20)); break;
ce4: 8c 2f mov r24, r28
ce6: 8c 56 subi r24, 0x6C ; 108
ce8: 02 c0 rjmp .+4 ; 0xcee <LCD_Gotoxy+0x44>
case 3 : _lcd_write_command(x + (0xC0 + 20)); break;
cea: 8c 2f mov r24, r28
cec: 8c 52 subi r24, 0x2C ; 44
cee: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
cf2: cf 91 pop r28
cf4: 1f 91 pop r17
cf6: 08 95 ret
00000cf8 <LCD_Write>:
}
}
void LCD_Write(unsigned char *this_text)
{
cf8: 1f 93 push r17
cfa: cf 93 push r28
cfc: df 93 push r29
cfe: ec 01 movw r28, r24
unsigned char i = 0;
d00: 10 e0 ldi r17, 0x00 ; 0
while(this_text[i] != 0)
{
lcd_write_byte(this_text[i++]);
_long_delay();
d02: 88 81 ld r24, Y
d04: 88 23 and r24, r24
d06: 79 f0 breq .+30 ; 0xd26 <LCD_Write+0x2e>
d08: fe 01 movw r30, r28
d0a: e1 0f add r30, r17
d0c: f1 1d adc r31, r1
d0e: 1f 5f subi r17, 0xFF ; 255
d10: 80 81 ld r24, Z
d12: 0e 94 06 06 call 0xc0c <lcd_write_byte>
d16: 0e 94 c9 05 call 0xb92 <_long_delay>
d1a: fe 01 movw r30, r28
d1c: e1 0f add r30, r17
d1e: f1 1d adc r31, r1
d20: 80 81 ld r24, Z
d22: 88 23 and r24, r24
d24: 89 f7 brne .-30 ; 0xd08 <LCD_Write+0x10>
d26: df 91 pop r29
d28: cf 91 pop r28
d2a: 1f 91 pop r17
d2c: 08 95 ret
00000d2e <LCD_Putchar>:
}
}
char LCD_Putchar(char zeichen)
{
d2e: 1f 93 push r17
d30: 18 2f mov r17, r24
_short_delay();
d32: 0e 94 d9 05 call 0xbb2 <_short_delay>
lcd_write_byte((char) zeichen);
d36: 81 2f mov r24, r17
d38: 0e 94 06 06 call 0xc0c <lcd_write_byte>
return(1);
}
d3c: 81 e0 ldi r24, 0x01 ; 1
d3e: 90 e0 ldi r25, 0x00 ; 0
d40: 1f 91 pop r17
d42: 08 95 ret
00000d44 <PRINT>:
#include "old_macros.h"
//#define LIGHTPRINTF
void PRINT(const char * ptr, unsigned int len) {
d44: 0f 93 push r16
d46: 1f 93 push r17
d48: cf 93 push r28
d4a: df 93 push r29
d4c: 8c 01 movw r16, r24
d4e: eb 01 movw r28, r22
for(;len;len--)
d50: 67 2b or r22, r23
d52: 39 f0 breq .+14 ; 0xd62 <PRINT+0x1e>
LCD_Putchar(*ptr++);
d54: f8 01 movw r30, r16
d56: 81 91 ld r24, Z+
d58: 8f 01 movw r16, r30
d5a: 0e 94 97 06 call 0xd2e <LCD_Putchar>
d5e: 21 97 sbiw r28, 0x01 ; 1
d60: c9 f7 brne .-14 ; 0xd54 <PRINT+0x10>
d62: df 91 pop r29
d64: cf 91 pop r28
d66: 1f 91 pop r17
d68: 0f 91 pop r16
d6a: 08 95 ret
00000d6c <PRINTP>:
}
void PRINTP(const char * ptr, unsigned int len) {
d6c: 0f 93 push r16
d6e: 1f 93 push r17
d70: cf 93 push r28
d72: df 93 push r29
d74: 8c 01 movw r16, r24
d76: eb 01 movw r28, r22
for(;len;len--)
d78: 67 2b or r22, r23
d7a: 41 f0 breq .+16 ; 0xd8c <PRINTP+0x20>
// LCD_Putchar(PRG_RDB(ptr++));
LCD_Putchar(pgm_read_byte(ptr++));
d7c: f8 01 movw r30, r16
d7e: 0f 5f subi r16, 0xFF ; 255
d80: 1f 4f sbci r17, 0xFF ; 255
d82: 84 91 lpm r24, Z
d84: 0e 94 97 06 call 0xd2e <LCD_Putchar>
d88: 21 97 sbiw r28, 0x01 ; 1
d8a: c1 f7 brne .-16 ; 0xd7c <PRINTP+0x10>
d8c: df 91 pop r29
d8e: cf 91 pop r28
d90: 1f 91 pop r17
d92: 0f 91 pop r16
d94: 08 95 ret
00000d96 <PAD_SP>:
}
void PAD_SP(signed char howmany) {
d96: cf 93 push r28
d98: c8 2f mov r28, r24
for(;howmany>0;howmany--)
d9a: 18 16 cp r1, r24
d9c: 34 f4 brge .+12 ; 0xdaa <PAD_SP+0x14>
LCD_Putchar(' ');
d9e: 80 e2 ldi r24, 0x20 ; 32
da0: 0e 94 97 06 call 0xd2e <LCD_Putchar>
da4: c1 50 subi r28, 0x01 ; 1
da6: 1c 16 cp r1, r28
da8: d4 f3 brlt .-12 ; 0xd9e <PAD_SP+0x8>
daa: cf 91 pop r28
dac: 08 95 ret
00000dae <PAD_0>:
}
void PAD_0(signed char howmany) {
dae: cf 93 push r28
db0: c8 2f mov r28, r24
for(;howmany>0;howmany--)
db2: 18 16 cp r1, r24
db4: 34 f4 brge .+12 ; 0xdc2 <PAD_0+0x14>
LCD_Putchar('0');
db6: 80 e3 ldi r24, 0x30 ; 48
db8: 0e 94 97 06 call 0xd2e <LCD_Putchar>
dbc: c1 50 subi r28, 0x01 ; 1
dbe: 1c 16 cp r1, r28
dc0: d4 f3 brlt .-12 ; 0xdb6 <PAD_0+0x8>
dc2: cf 91 pop r28
dc4: 08 95 ret
00000dc6 <_printf_P>:
}
#define BUF 40
/*
* Macros for converting digits to letters and vice versa
*/
#define to_digit(c) ((c) - '0')
#define is_digit(c) ((c)<='9' && (c)>='0')
#define to_char(n) ((n) + '0')
/*
* Flags used during conversion.
*/
#define LONGINT 0x01 /* long integer */
#define LONGDBL 0x02 /* long double; unimplemented */
#define SHORTINT 0x04 /* short integer */
#define ALT 0x08 /* alternate form */
#define LADJUST 0x10 /* left adjustment */
#define ZEROPAD 0x20 /* zero (as opposed to blank) pad */
#define HEXPREFIX 0x40 /* add 0x or 0X prefix */
void _printf_P (char const *fmt0, ...) /* Works with string from FLASH */
{
dc6: 2f 92 push r2
dc8: 3f 92 push r3
dca: 4f 92 push r4
dcc: 5f 92 push r5
dce: 6f 92 push r6
dd0: 7f 92 push r7
dd2: 8f 92 push r8
dd4: 9f 92 push r9
dd6: af 92 push r10
dd8: bf 92 push r11
dda: cf 92 push r12
ddc: df 92 push r13
dde: ef 92 push r14
de0: ff 92 push r15
de2: 0f 93 push r16
de4: 1f 93 push r17
de6: cf 93 push r28
de8: df 93 push r29
dea: cd b7 in r28, 0x3d ; 61
dec: de b7 in r29, 0x3e ; 62
dee: e0 97 sbiw r28, 0x30 ; 48
df0: 0f b6 in r0, 0x3f ; 63
df2: f8 94 cli
df4: de bf out 0x3e, r29 ; 62
df6: 0f be out 0x3f, r0 ; 63
df8: cd bf out 0x3d, r28 ; 61
dfa: a5 e4 ldi r26, 0x45 ; 69
dfc: 6a 2e mov r6, r26
dfe: 71 2c mov r7, r1
e00: 6c 0e add r6, r28
e02: 7d 1e adc r7, r29
va_list ap;
register const char *fmt; /* format string */
register char ch; /* character from fmt */
register int n; /* handy integer (short term usage) */
register char *cp; /* handy char pointer (short term usage) */
const char *fmark; /* for remembering a place in fmt */
register unsigned char flags; /* flags as above */
signed char width; /* width from format (%8d), or 0 */
signed char prec; /* precision from format (%.3d), or -1 */
char sign; /* sign prefix (' ', '+', '-', or \0) */
unsigned long _ulong=0; /* integer arguments %[diouxX] */
e04: 1c a6 std Y+44, r1 ; 0x2c
e06: 1d a6 std Y+45, r1 ; 0x2d
e08: 1e a6 std Y+46, r1 ; 0x2e
e0a: 1f a6 std Y+47, r1 ; 0x2f
#define OCT 8
#define DEC 10
#define HEX 16
unsigned char base; /* base for [diouxX] conversion */
signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */
signed char dpad; /* extra 0 padding needed for integers */
signed char fieldsz; /* field size expanded by sign, dpad etc */
/* The initialization of 'size' is to suppress a warning that
'size' might be used unitialized. It seems gcc can't
quite grok this spaghetti code ... */
signed char size = 0; /* size of converted field or string */
char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */
char ox[2]; /* space for 0x hex-prefix */
va_start(ap, fmt0);
fmt = fmt0;
e0c: d3 01 movw r26, r6
e0e: ad 90 ld r10, X+
e10: bd 90 ld r11, X+
e12: 3d 01 movw r6, r26
/*
* Scan the format for conversions (`%' character).
*/
for (;;) {
for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++)
e14: c5 01 movw r24, r10
e16: 05 c0 rjmp .+10 ; 0xe22 <_printf_P+0x5c>
e18: 05 32 cpi r16, 0x25 ; 37
e1a: 39 f0 breq .+14 ; 0xe2a <_printf_P+0x64>
e1c: 08 94 sec
e1e: a1 1c adc r10, r1
e20: b1 1c adc r11, r1
e22: f5 01 movw r30, r10
e24: 04 91 lpm r16, Z
e26: 00 23 and r16, r16
e28: b9 f7 brne .-18 ; 0xe18 <_printf_P+0x52>
/* void */;
if ((n = fmt - fmark) != 0) {
e2a: b5 01 movw r22, r10
e2c: 68 1b sub r22, r24
e2e: 79 0b sbc r23, r25
e30: 11 f0 breq .+4 ; 0xe36 <_printf_P+0x70>
PRINTP(fmark, n);
e32: 0e 94 b6 06 call 0xd6c <PRINTP>
}
if (ch == '\0')
e36: 00 23 and r16, r16
e38: 09 f4 brne .+2 ; 0xe3c <_printf_P+0x76>
e3a: 30 c2 rjmp .+1120 ; 0x129c <_printf_P+0x4d6>
goto done;
fmt++; /* skip over '%' */
e3c: 08 94 sec
e3e: a1 1c adc r10, r1
e40: b1 1c adc r11, r1
flags = 0;
e42: 55 24 eor r5, r5
dprec = 0;
e44: 58 aa std Y+48, r5 ; 0x30
width = 0;
e46: 25 2c mov r2, r5
prec = -1;
e48: 1f ef ldi r17, 0xFF ; 255
sign = '\0';
e4a: 59 a6 std Y+41, r5 ; 0x29
rflag: ch = PRG_RDB(fmt++);
e4c: f5 01 movw r30, r10
e4e: 08 94 sec
e50: a1 1c adc r10, r1
e52: b1 1c adc r11, r1
e54: 04 91 lpm r16, Z
reswitch:
#ifdef LIGHTPRINTF
if (ch=='o' || ch=='u' || (ch|0x20)=='x') {
#else
if (ch=='u' || (ch|0x20)=='x') {
e56: 05 37 cpi r16, 0x75 ; 117
e58: 21 f0 breq .+8 ; 0xe62 <_printf_P+0x9c>
e5a: 80 2f mov r24, r16
e5c: 80 62 ori r24, 0x20 ; 32
e5e: 88 37 cpi r24, 0x78 ; 120
e60: f1 f4 brne .+60 ; 0xe9e <_printf_P+0xd8>
#endif
if (flags&LONGINT) {
e62: 50 fe sbrs r5, 0
e64: 0e c0 rjmp .+28 ; 0xe82 <_printf_P+0xbc>
_ulong=va_arg(ap, unsigned long);
e66: f3 01 movw r30, r6
e68: 24 e0 ldi r18, 0x04 ; 4
e6a: 30 e0 ldi r19, 0x00 ; 0
e6c: 62 0e add r6, r18
e6e: 73 1e adc r7, r19
e70: 80 81 ld r24, Z
e72: 91 81 ldd r25, Z+1 ; 0x01
e74: a2 81 ldd r26, Z+2 ; 0x02
e76: b3 81 ldd r27, Z+3 ; 0x03
e78: 8c a7 std Y+44, r24 ; 0x2c
e7a: 9d a7 std Y+45, r25 ; 0x2d
e7c: ae a7 std Y+46, r26 ; 0x2e
e7e: bf a7 std Y+47, r27 ; 0x2f
e80: 0e c0 rjmp .+28 ; 0xe9e <_printf_P+0xd8>
} else {
register unsigned int _d;
_d=va_arg(ap, unsigned int);
e82: f3 01 movw r30, r6
e84: a2 e0 ldi r26, 0x02 ; 2
e86: b0 e0 ldi r27, 0x00 ; 0
e88: 6a 0e add r6, r26
e8a: 7b 1e adc r7, r27
e8c: 80 81 ld r24, Z
e8e: 91 81 ldd r25, Z+1 ; 0x01
_ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d;
e90: 9c 01 movw r18, r24
e92: 44 27 eor r20, r20
e94: 55 27 eor r21, r21
e96: 2c a7 std Y+44, r18 ; 0x2c
e98: 3d a7 std Y+45, r19 ; 0x2d
e9a: 4e a7 std Y+46, r20 ; 0x2e
e9c: 5f a7 std Y+47, r21 ; 0x2f
}
}
#ifndef LIGHTPRINTF
if(ch==' ') {
e9e: 00 32 cpi r16, 0x20 ; 32
ea0: 21 f4 brne .+8 ; 0xeaa <_printf_P+0xe4>
/*
* ``If the space and + flags both appear, the space
* flag will be ignored.''
* -- ANSI X3J11
*/
if (!sign)
ea2: 89 a5 ldd r24, Y+41 ; 0x29
ea4: 88 23 and r24, r24
ea6: 91 f6 brne .-92 ; 0xe4c <_printf_P+0x86>
ea8: 1b c0 rjmp .+54 ; 0xee0 <_printf_P+0x11a>
sign = ' ';
goto rflag;
} else if (ch=='#') {
eaa: 03 32 cpi r16, 0x23 ; 35
eac: 11 f4 brne .+4 ; 0xeb2 <_printf_P+0xec>
flags |= ALT;
eae: 38 e0 ldi r19, 0x08 ; 8
eb0: 81 c0 rjmp .+258 ; 0xfb4 <_printf_P+0x1ee>
goto rflag;
} else if (ch=='*'||ch=='-') {
eb2: 0a 32 cpi r16, 0x2A ; 42
eb4: 11 f0 breq .+4 ; 0xeba <_printf_P+0xf4>
eb6: 0d 32 cpi r16, 0x2D ; 45
eb8: 89 f4 brne .+34 ; 0xedc <_printf_P+0x116>
if (ch=='*') {
eba: 0a 32 cpi r16, 0x2A ; 42
ebc: 51 f4 brne .+20 ; 0xed2 <_printf_P+0x10c>
/*
* ``A negative field width argument is taken as a
* - flag followed by a positive field width.''
* -- ANSI X3J11
* They don't exclude field widths read from args.
*/
if ((width = va_arg(ap, int)) >= 0)
ebe: f3 01 movw r30, r6
ec0: 42 e0 ldi r20, 0x02 ; 2
ec2: 50 e0 ldi r21, 0x00 ; 0
ec4: 64 0e add r6, r20
ec6: 75 1e adc r7, r21
ec8: 20 80 ld r2, Z
eca: 22 20 and r2, r2
ecc: 0c f0 brlt .+2 ; 0xed0 <_printf_P+0x10a>
ece: be cf rjmp .-132 ; 0xe4c <_printf_P+0x86>
goto rflag;
width = -width;
ed0: 21 94 neg r2
}
flags |= LADJUST;
ed2: 50 e1 ldi r21, 0x10 ; 16
ed4: 55 2a or r5, r21
flags &= ~ZEROPAD; /* '-' disables '0' */
ed6: 8f ed ldi r24, 0xDF ; 223
ed8: 58 22 and r5, r24
goto rflag;
eda: b8 cf rjmp .-144 ; 0xe4c <_printf_P+0x86>
} else if (ch=='+') {
edc: 0b 32 cpi r16, 0x2B ; 43
ede: 11 f4 brne .+4 ; 0xee4 <_printf_P+0x11e>
sign = '+';
ee0: 09 a7 std Y+41, r16 ; 0x29
goto rflag;
ee2: b4 cf rjmp .-152 ; 0xe4c <_printf_P+0x86>
} else if (ch=='.') {
ee4: 0e 32 cpi r16, 0x2E ; 46
ee6: c1 f5 brne .+112 ; 0xf58 <_printf_P+0x192>
if ((ch = PRG_RDB(fmt++)) == '*') {
ee8: f5 01 movw r30, r10
eea: 08 94 sec
eec: a1 1c adc r10, r1
eee: b1 1c adc r11, r1
ef0: 04 91 lpm r16, Z
ef2: 0a 32 cpi r16, 0x2A ; 42
ef4: 79 f4 brne .+30 ; 0xf14 <_printf_P+0x14e>
n = va_arg(ap, int);
ef6: f3 01 movw r30, r6
ef8: a2 e0 ldi r26, 0x02 ; 2
efa: b0 e0 ldi r27, 0x00 ; 0
efc: 6a 0e add r6, r26
efe: 7b 1e adc r7, r27
f00: 60 81 ld r22, Z
f02: 71 81 ldd r23, Z+1 ; 0x01
prec = n < 0 ? -1 : n;
f04: bf ef ldi r27, 0xFF ; 255
f06: 6f 3f cpi r22, 0xFF ; 255
f08: 7b 07 cpc r23, r27
f0a: 14 f4 brge .+4 ; 0xf10 <_printf_P+0x14a>
f0c: 6f ef ldi r22, 0xFF ; 255
f0e: 7f ef ldi r23, 0xFF ; 255
f10: 16 2f mov r17, r22
goto rflag;
f12: 9c cf rjmp .-200 ; 0xe4c <_printf_P+0x86>
}
n = 0;
f14: 60 e0 ldi r22, 0x00 ; 0
f16: 70 e0 ldi r23, 0x00 ; 0
while (is_digit(ch)) {
n = n*10 + to_digit(ch);
ch = PRG_RDB(fmt++);
f18: 80 2f mov r24, r16
f1a: 80 53 subi r24, 0x30 ; 48
f1c: 8a 30 cpi r24, 0x0A ; 10
f1e: a0 f4 brcc .+40 ; 0xf48 <_printf_P+0x182>
f20: cb 01 movw r24, r22
f22: f3 e0 ldi r31, 0x03 ; 3
f24: 88 0f add r24, r24
f26: 99 1f adc r25, r25
f28: fa 95 dec r31
f2a: e1 f7 brne .-8 ; 0xf24 <_printf_P+0x15e>
f2c: 86 0f add r24, r22
f2e: 97 1f adc r25, r23
f30: 68 0f add r22, r24
f32: 79 1f adc r23, r25
f34: 60 0f add r22, r16
f36: 71 1d adc r23, r1
f38: 60 53 subi r22, 0x30 ; 48
f3a: 70 40 sbci r23, 0x00 ; 0
f3c: f5 01 movw r30, r10
f3e: 08 94 sec
f40: a1 1c adc r10, r1
f42: b1 1c adc r11, r1
f44: 04 91 lpm r16, Z
f46: e8 cf rjmp .-48 ; 0xf18 <_printf_P+0x152>
}
prec = n < 0 ? -1 : n;
f48: ef ef ldi r30, 0xFF ; 255
f4a: 6f 3f cpi r22, 0xFF ; 255
f4c: 7e 07 cpc r23, r30
f4e: 14 f4 brge .+4 ; 0xf54 <_printf_P+0x18e>
f50: 6f ef ldi r22, 0xFF ; 255
f52: 7f ef ldi r23, 0xFF ; 255
f54: 16 2f mov r17, r22
goto reswitch;
f56: 7f cf rjmp .-258 ; 0xe56 <_printf_P+0x90>
} else
#endif /* LIGHTPRINTF */
if (ch=='0') {
f58: 00 33 cpi r16, 0x30 ; 48
f5a: 29 f4 brne .+10 ; 0xf66 <_printf_P+0x1a0>
/*
* ``Note that 0 is taken as a flag, not as the
* beginning of a field width.''
* -- ANSI X3J11
*/
if (!(flags & LADJUST))
f5c: 54 fc sbrc r5, 4
f5e: 76 cf rjmp .-276 ; 0xe4c <_printf_P+0x86>
flags |= ZEROPAD; /* '-' disables '0' */
f60: f0 e2 ldi r31, 0x20 ; 32
f62: 5f 2a or r5, r31
goto rflag;
f64: 73 cf rjmp .-282 ; 0xe4c <_printf_P+0x86>
} else if (ch>='1' && ch<='9') {
f66: 80 2f mov r24, r16
f68: 81 53 subi r24, 0x31 ; 49
f6a: 89 30 cpi r24, 0x09 ; 9
f6c: d8 f4 brcc .+54 ; 0xfa4 <_printf_P+0x1de>
n = 0;
f6e: 60 e0 ldi r22, 0x00 ; 0
f70: 70 e0 ldi r23, 0x00 ; 0
do {
n = 10 * n + to_digit(ch);
f72: cb 01 movw r24, r22
f74: e3 e0 ldi r30, 0x03 ; 3
f76: 88 0f add r24, r24
f78: 99 1f adc r25, r25
f7a: ea 95 dec r30
f7c: e1 f7 brne .-8 ; 0xf76 <_printf_P+0x1b0>
f7e: 86 0f add r24, r22
f80: 97 1f adc r25, r23
f82: 68 0f add r22, r24
f84: 79 1f adc r23, r25
f86: 60 0f add r22, r16
f88: 71 1d adc r23, r1
f8a: 60 53 subi r22, 0x30 ; 48
f8c: 70 40 sbci r23, 0x00 ; 0
ch = PRG_RDB(fmt++);
f8e: f5 01 movw r30, r10
f90: 08 94 sec
f92: a1 1c adc r10, r1
f94: b1 1c adc r11, r1
f96: 04 91 lpm r16, Z
} while (is_digit(ch));
f98: 80 2f mov r24, r16
f9a: 80 53 subi r24, 0x30 ; 48
f9c: 8a 30 cpi r24, 0x0A ; 10
f9e: 48 f3 brcs .-46 ; 0xf72 <_printf_P+0x1ac>
width = n;
fa0: 26 2e mov r2, r22
goto reswitch;
fa2: 59 cf rjmp .-334 ; 0xe56 <_printf_P+0x90>
} else if (ch=='h') {
fa4: 08 36 cpi r16, 0x68 ; 104
fa6: 19 f4 brne .+6 ; 0xfae <_printf_P+0x1e8>
flags |= SHORTINT;
fa8: 24 e0 ldi r18, 0x04 ; 4
faa: 52 2a or r5, r18
goto rflag;
fac: 4f cf rjmp .-354 ; 0xe4c <_printf_P+0x86>
} else if (ch=='l') {
fae: 0c 36 cpi r16, 0x6C ; 108
fb0: 19 f4 brne .+6 ; 0xfb8 <_printf_P+0x1f2>
flags |= LONGINT;
fb2: 31 e0 ldi r19, 0x01 ; 1
fb4: 53 2a or r5, r19
goto rflag;
fb6: 4a cf rjmp .-364 ; 0xe4c <_printf_P+0x86>
} else if (ch=='c') {
fb8: 03 36 cpi r16, 0x63 ; 99
fba: 61 f4 brne .+24 ; 0xfd4 <_printf_P+0x20e>
*(cp = buf) = va_arg(ap, int);
fbc: 4e 01 movw r8, r28
fbe: 08 94 sec
fc0: 81 1c adc r8, r1
fc2: 91 1c adc r9, r1
fc4: f3 01 movw r30, r6
fc6: 42 e0 ldi r20, 0x02 ; 2
fc8: 50 e0 ldi r21, 0x00 ; 0
fca: 64 0e add r6, r20
fcc: 75 1e adc r7, r21
fce: 80 81 ld r24, Z
fd0: 89 83 std Y+1, r24 ; 0x01
fd2: 1b c1 rjmp .+566 ; 0x120a <_printf_P+0x444>
size = 1;
sign = '\0';
} else if (ch=='D'||ch=='d'||ch=='i') {
fd4: 04 34 cpi r16, 0x44 ; 68
fd6: 21 f0 breq .+8 ; 0xfe0 <_printf_P+0x21a>
fd8: 04 36 cpi r16, 0x64 ; 100
fda: 11 f0 breq .+4 ; 0xfe0 <_printf_P+0x21a>
fdc: 09 36 cpi r16, 0x69 ; 105
fde: b1 f5 brne .+108 ; 0x104c <_printf_P+0x286>
if(ch=='D')
fe0: 04 34 cpi r16, 0x44 ; 68
fe2: 11 f4 brne .+4 ; 0xfe8 <_printf_P+0x222>
flags |= LONGINT;
fe4: 51 e0 ldi r21, 0x01 ; 1
fe6: 55 2a or r5, r21
if (flags&LONGINT) {
fe8: 50 fe sbrs r5, 0
fea: 0a c0 rjmp .+20 ; 0x1000 <_printf_P+0x23a>
_ulong=va_arg(ap, long);
fec: f3 01 movw r30, r6
fee: 84 e0 ldi r24, 0x04 ; 4
ff0: 90 e0 ldi r25, 0x00 ; 0
ff2: 68 0e add r6, r24
ff4: 79 1e adc r7, r25
ff6: 20 81 ld r18, Z
ff8: 31 81 ldd r19, Z+1 ; 0x01
ffa: 42 81 ldd r20, Z+2 ; 0x02
ffc: 53 81 ldd r21, Z+3 ; 0x03
ffe: 0c c0 rjmp .+24 ; 0x1018 <_printf_P+0x252>
} else {
register int _d;
_d=va_arg(ap, int);
1000: f3 01 movw r30, r6
1002: 42 e0 ldi r20, 0x02 ; 2
1004: 50 e0 ldi r21, 0x00 ; 0
1006: 64 0e add r6, r20
1008: 75 1e adc r7, r21
100a: 80 81 ld r24, Z
100c: 91 81 ldd r25, Z+1 ; 0x01
_ulong = flags&SHORTINT ? (long)(short)_d : (long)_d;
100e: 9c 01 movw r18, r24
1010: 44 27 eor r20, r20
1012: 37 fd sbrc r19, 7
1014: 40 95 com r20
1016: 54 2f mov r21, r20
1018: 2c a7 std Y+44, r18 ; 0x2c
101a: 3d a7 std Y+45, r19 ; 0x2d
101c: 4e a7 std Y+46, r20 ; 0x2e
101e: 5f a7 std Y+47, r21 ; 0x2f
}
if ((long)_ulong < 0) {
1020: 8c a5 ldd r24, Y+44 ; 0x2c
1022: 9d a5 ldd r25, Y+45 ; 0x2d
1024: ae a5 ldd r26, Y+46 ; 0x2e
1026: bf a5 ldd r27, Y+47 ; 0x2f
1028: b7 ff sbrs r27, 7
102a: 0d c0 rjmp .+26 ; 0x1046 <_printf_P+0x280>
_ulong = -_ulong;
102c: b0 95 com r27
102e: a0 95 com r26
1030: 90 95 com r25
1032: 81 95 neg r24
1034: 9f 4f sbci r25, 0xFF ; 255
1036: af 4f sbci r26, 0xFF ; 255
1038: bf 4f sbci r27, 0xFF ; 255
103a: 8c a7 std Y+44, r24 ; 0x2c
103c: 9d a7 std Y+45, r25 ; 0x2d
103e: ae a7 std Y+46, r26 ; 0x2e
1040: bf a7 std Y+47, r27 ; 0x2f
sign = '-';
1042: 8d e2 ldi r24, 0x2D ; 45
1044: 89 a7 std Y+41, r24 ; 0x29
}
base = DEC;
1046: 7a e0 ldi r23, 0x0A ; 10
1048: 47 2e mov r4, r23
goto number;
104a: 7b c0 rjmp .+246 ; 0x1142 <_printf_P+0x37c>
} else
/*
if (ch=='n') {
if (flags & LONGINT)
*va_arg(ap, long *) = ret;
else if (flags & SHORTINT)
*va_arg(ap, short *) = ret;
else
*va_arg(ap, int *) = ret;
continue; // no output
} else
*/
#ifndef LIGHTPRINTF
if (ch=='O'||ch=='o') {
104c: 0f 34 cpi r16, 0x4F ; 79
104e: 11 f0 breq .+4 ; 0x1054 <_printf_P+0x28e>
1050: 0f 36 cpi r16, 0x6F ; 111
1052: 39 f4 brne .+14 ; 0x1062 <_printf_P+0x29c>
if (ch=='O')
1054: 0f 34 cpi r16, 0x4F ; 79
1056: 11 f4 brne .+4 ; 0x105c <_printf_P+0x296>
flags |= LONGINT;
1058: 91 e0 ldi r25, 0x01 ; 1
105a: 59 2a or r5, r25
base = OCT;
105c: 68 e0 ldi r22, 0x08 ; 8
105e: 46 2e mov r4, r22
goto nosign;
1060: 6f c0 rjmp .+222 ; 0x1140 <_printf_P+0x37a>
} else if (ch=='p') {
1062: 00 37 cpi r16, 0x70 ; 112
1064: a1 f4 brne .+40 ; 0x108e <_printf_P+0x2c8>
/*
* ``The argument shall be a pointer to void. The
* value of the pointer is converted to a sequence
* of printable characters, in an implementation-
* defined manner.''
* -- ANSI X3J11
*/
/* NOSTRICT */
_ulong = (unsigned int)va_arg(ap, void *);
1066: f3 01 movw r30, r6
1068: a2 e0 ldi r26, 0x02 ; 2
106a: b0 e0 ldi r27, 0x00 ; 0
106c: 6a 0e add r6, r26
106e: 7b 1e adc r7, r27
1070: 80 81 ld r24, Z
1072: 91 81 ldd r25, Z+1 ; 0x01
1074: 9c 01 movw r18, r24
1076: 44 27 eor r20, r20
1078: 55 27 eor r21, r21
107a: 2c a7 std Y+44, r18 ; 0x2c
107c: 3d a7 std Y+45, r19 ; 0x2d
107e: 4e a7 std Y+46, r20 ; 0x2e
1080: 5f a7 std Y+47, r21 ; 0x2f
base = HEX;
1082: 50 e1 ldi r21, 0x10 ; 16
1084: 45 2e mov r4, r21
flags |= HEXPREFIX;
1086: 30 e4 ldi r19, 0x40 ; 64
1088: 53 2a or r5, r19
ch = 'x';
108a: 08 e7 ldi r16, 0x78 ; 120
goto nosign;
108c: 59 c0 rjmp .+178 ; 0x1140 <_printf_P+0x37a>
} else if (ch=='s') { // print a string from RAM
108e: 03 37 cpi r16, 0x73 ; 115
1090: c1 f5 brne .+112 ; 0x1102 <_printf_P+0x33c>
if ((cp = va_arg(ap, char *)) == NULL) {
1092: f3 01 movw r30, r6
1094: 42 e0 ldi r20, 0x02 ; 2
1096: 50 e0 ldi r21, 0x00 ; 0
1098: 64 0e add r6, r20
109a: 75 1e adc r7, r21
109c: 80 80 ld r8, Z
109e: 91 80 ldd r9, Z+1 ; 0x01
10a0: 81 14 cp r8, r1
10a2: 91 04 cpc r9, r1
10a4: 89 f4 brne .+34 ; 0x10c8 <_printf_P+0x302>
cp=buf;
10a6: 4e 01 movw r8, r28
10a8: 08 94 sec
10aa: 81 1c adc r8, r1
10ac: 91 1c adc r9, r1
cp[0] = '(';
10ae: 88 e2 ldi r24, 0x28 ; 40
10b0: 89 83 std Y+1, r24 ; 0x01
cp[1] = 'n';
10b2: 8e e6 ldi r24, 0x6E ; 110
10b4: f4 01 movw r30, r8
10b6: 81 83 std Z+1, r24 ; 0x01
cp[2] = 'u';
10b8: 85 e7 ldi r24, 0x75 ; 117
10ba: 8b 83 std Y+3, r24 ; 0x03
cp[4] = cp[3] = 'l';
10bc: 8c e6 ldi r24, 0x6C ; 108
10be: 8c 83 std Y+4, r24 ; 0x04
10c0: 8d 83 std Y+5, r24 ; 0x05
cp[5] = ')';
10c2: 89 e2 ldi r24, 0x29 ; 41
10c4: 8e 83 std Y+6, r24 ; 0x06
cp[6] = '\0';
10c6: 1f 82 std Y+7, r1 ; 0x07
}
if (prec >= 0) {
10c8: 17 fd sbrc r17, 7
10ca: 13 c0 rjmp .+38 ; 0x10f2 <_printf_P+0x32c>
/*
* can't use strlen; can only look for the
* NUL in the first `prec' characters, and
* strlen() will go further.
*/
char *p = (char*)memchr(cp, 0, prec);
10cc: 81 2f mov r24, r17
10ce: 99 27 eor r25, r25
10d0: 87 fd sbrc r24, 7
10d2: 90 95 com r25
10d4: ac 01 movw r20, r24
10d6: 60 e0 ldi r22, 0x00 ; 0
10d8: 70 e0 ldi r23, 0x00 ; 0
10da: c4 01 movw r24, r8
10dc: 0e 94 64 0c call 0x18c8 <memchr>
if (p != NULL) {
10e0: 00 97 sbiw r24, 0x00 ; 0
10e2: 29 f0 breq .+10 ; 0x10ee <_printf_P+0x328>
size = p - cp;
10e4: d8 2e mov r13, r24
10e6: d8 18 sub r13, r8
if (size > prec)
10e8: 1d 15 cp r17, r13
10ea: 0c f0 brlt .+2 ; 0x10ee <_printf_P+0x328>
10ec: 90 c0 rjmp .+288 ; 0x120e <_printf_P+0x448>
size = prec;
} else
size = prec;
10ee: d1 2e mov r13, r17
10f0: 8e c0 rjmp .+284 ; 0x120e <_printf_P+0x448>
} else
size = strlen(cp);
10f2: f4 01 movw r30, r8
10f4: 01 90 ld r0, Z+
10f6: 00 20 and r0, r0
10f8: e9 f7 brne .-6 ; 0x10f4 <_printf_P+0x32e>
10fa: 31 97 sbiw r30, 0x01 ; 1
10fc: de 2e mov r13, r30
10fe: d8 18 sub r13, r8
1100: 86 c0 rjmp .+268 ; 0x120e <_printf_P+0x448>
sign = '\0';
} else
#endif /* LIGHTPRINTF */
if(ch=='U'||ch=='u') {
1102: 05 35 cpi r16, 0x55 ; 85
1104: 11 f0 breq .+4 ; 0x110a <_printf_P+0x344>
1106: 05 37 cpi r16, 0x75 ; 117
1108: 39 f4 brne .+14 ; 0x1118 <_printf_P+0x352>
if (ch=='U')
110a: 05 35 cpi r16, 0x55 ; 85
110c: 11 f4 brne .+4 ; 0x1112 <_printf_P+0x34c>
flags |= LONGINT;
110e: f1 e0 ldi r31, 0x01 ; 1
1110: 5f 2a or r5, r31
base = DEC;
1112: 4a e0 ldi r20, 0x0A ; 10
1114: 44 2e mov r4, r20
goto nosign;
1116: 14 c0 rjmp .+40 ; 0x1140 <_printf_P+0x37a>
} else if (ch=='X'||ch=='x') {
1118: 08 35 cpi r16, 0x58 ; 88
111a: 19 f0 breq .+6 ; 0x1122 <_printf_P+0x35c>
111c: 08 37 cpi r16, 0x78 ; 120
111e: 09 f0 breq .+2 ; 0x1122 <_printf_P+0x35c>
1120: 6c c0 rjmp .+216 ; 0x11fa <_printf_P+0x434>
base = HEX;
1122: 30 e1 ldi r19, 0x10 ; 16
1124: 43 2e mov r4, r19
/* leading 0x/X only if non-zero */
if (flags & ALT && _ulong != 0)
1126: 53 fe sbrs r5, 3
1128: 0b c0 rjmp .+22 ; 0x1140 <_printf_P+0x37a>
112a: 2c a5 ldd r18, Y+44 ; 0x2c
112c: 3d a5 ldd r19, Y+45 ; 0x2d
112e: 4e a5 ldd r20, Y+46 ; 0x2e
1130: 5f a5 ldd r21, Y+47 ; 0x2f
1132: 21 15 cp r18, r1
1134: 31 05 cpc r19, r1
1136: 41 05 cpc r20, r1
1138: 51 05 cpc r21, r1
113a: 11 f0 breq .+4 ; 0x1140 <_printf_P+0x37a>
flags |= HEXPREFIX;
113c: 30 e4 ldi r19, 0x40 ; 64
113e: 53 2a or r5, r19
/* unsigned conversions */
nosign: sign = '\0';
1140: 19 a6 std Y+41, r1 ; 0x29
/*
* ``... diouXx conversions ... if a precision is
* specified, the 0 flag will be ignored.''
* -- ANSI X3J11
*/
number: if ((dprec = prec) >= 0)
1142: 18 ab std Y+48, r17 ; 0x30
1144: 17 fd sbrc r17, 7
1146: 02 c0 rjmp .+4 ; 0x114c <_printf_P+0x386>
flags &= ~ZEROPAD;
1148: 4f ed ldi r20, 0xDF ; 223
114a: 54 22 and r5, r20
/*
* ``The result of converting a zero value with an
* explicit precision of zero is no characters.''
* -- ANSI X3J11
*/
cp = buf + BUF;
114c: 29 e2 ldi r18, 0x29 ; 41
114e: 82 2e mov r8, r18
1150: 91 2c mov r9, r1
1152: 8c 0e add r8, r28
1154: 9d 1e adc r9, r29
if (_ulong != 0 || prec != 0) {
1156: 8c a5 ldd r24, Y+44 ; 0x2c
1158: 9d a5 ldd r25, Y+45 ; 0x2d
115a: ae a5 ldd r26, Y+46 ; 0x2e
115c: bf a5 ldd r27, Y+47 ; 0x2f
115e: 00 97 sbiw r24, 0x00 ; 0
1160: a1 05 cpc r26, r1
1162: b1 05 cpc r27, r1
1164: 21 f4 brne .+8 ; 0x116e <_printf_P+0x3a8>
1166: 98 a9 ldd r25, Y+48 ; 0x30
1168: 99 23 and r25, r25
116a: 09 f4 brne .+2 ; 0x116e <_printf_P+0x3a8>
116c: 3f c0 rjmp .+126 ; 0x11ec <_printf_P+0x426>
116e: c4 2c mov r12, r4
1170: dd 24 eor r13, r13
1172: ee 24 eor r14, r14
1174: ff 24 eor r15, r15
register unsigned char _d,notlastdigit;
do {
notlastdigit=(_ulong>=base);
1176: 33 24 eor r3, r3
1178: 2c a5 ldd r18, Y+44 ; 0x2c
117a: 3d a5 ldd r19, Y+45 ; 0x2d
117c: 4e a5 ldd r20, Y+46 ; 0x2e
117e: 5f a5 ldd r21, Y+47 ; 0x2f
1180: 2c 15 cp r18, r12
1182: 3d 05 cpc r19, r13
1184: 4e 05 cpc r20, r14
1186: 5f 05 cpc r21, r15
1188: 10 f0 brcs .+4 ; 0x118e <_printf_P+0x3c8>
118a: 91 e0 ldi r25, 0x01 ; 1
118c: 39 2e mov r3, r25
_d = _ulong % base;
118e: 6c a5 ldd r22, Y+44 ; 0x2c
1190: 7d a5 ldd r23, Y+45 ; 0x2d
1192: 8e a5 ldd r24, Y+46 ; 0x2e
1194: 9f a5 ldd r25, Y+47 ; 0x2f
1196: a7 01 movw r20, r14
1198: 96 01 movw r18, r12
119a: 0e 94 d4 0d call 0x1ba8 <__udivmodsi4>
119e: dc 01 movw r26, r24
11a0: cb 01 movw r24, r22
11a2: 18 2f mov r17, r24
if (_d<10) {
11a4: 8a 30 cpi r24, 0x0A ; 10
11a6: 10 f4 brcc .+4 ; 0x11ac <_printf_P+0x3e6>
_d+='0';
11a8: 10 5d subi r17, 0xD0 ; 208
11aa: 04 c0 rjmp .+8 ; 0x11b4 <_printf_P+0x3ee>
} else {
_d+='a'-10;
11ac: 19 5a subi r17, 0xA9 ; 169
if (ch=='X') _d&=~0x20;
11ae: 08 35 cpi r16, 0x58 ; 88
11b0: 09 f4 brne .+2 ; 0x11b4 <_printf_P+0x3ee>
11b2: 1f 7d andi r17, 0xDF ; 223
}
*--cp=_d;
11b4: d4 01 movw r26, r8
11b6: 1e 93 st -X, r17
11b8: 4d 01 movw r8, r26
_ulong /= base;
11ba: 6c a5 ldd r22, Y+44 ; 0x2c
11bc: 7d a5 ldd r23, Y+45 ; 0x2d
11be: 8e a5 ldd r24, Y+46 ; 0x2e
11c0: 9f a5 ldd r25, Y+47 ; 0x2f
11c2: a7 01 movw r20, r14
11c4: 96 01 movw r18, r12
11c6: 0e 94 d4 0d call 0x1ba8 <__udivmodsi4>
11ca: 2c a7 std Y+44, r18 ; 0x2c
11cc: 3d a7 std Y+45, r19 ; 0x2d
11ce: 4e a7 std Y+46, r20 ; 0x2e
11d0: 5f a7 std Y+47, r21 ; 0x2f
} while (notlastdigit);
11d2: 33 20 and r3, r3
11d4: 81 f6 brne .-96 ; 0x1176 <_printf_P+0x3b0>
#ifndef LIGHTPRINTF
// handle octal leading 0
if (base==OCT && flags & ALT && *cp != '0')
11d6: b8 e0 ldi r27, 0x08 ; 8
11d8: 4b 16 cp r4, r27
11da: 41 f4 brne .+16 ; 0x11ec <_printf_P+0x426>
11dc: 53 fe sbrs r5, 3
11de: 06 c0 rjmp .+12 ; 0x11ec <_printf_P+0x426>
11e0: 10 33 cpi r17, 0x30 ; 48
11e2: 21 f0 breq .+8 ; 0x11ec <_printf_P+0x426>
*--cp = '0';
11e4: 80 e3 ldi r24, 0x30 ; 48
11e6: f4 01 movw r30, r8
11e8: 82 93 st -Z, r24
11ea: 4f 01 movw r8, r30
#endif
}
size = buf + BUF - cp;
11ec: ce 01 movw r24, r28
11ee: 01 96 adiw r24, 0x01 ; 1
11f0: d8 2e mov r13, r24
11f2: d8 18 sub r13, r8
11f4: f8 e2 ldi r31, 0x28 ; 40
11f6: df 0e add r13, r31
11f8: 0b c0 rjmp .+22 ; 0x1210 <_printf_P+0x44a>
} else { //default
/* "%?" prints ?, unless ? is NUL */
if (ch == '\0')
11fa: 00 23 and r16, r16
11fc: 09 f4 brne .+2 ; 0x1200 <_printf_P+0x43a>
11fe: 4e c0 rjmp .+156 ; 0x129c <_printf_P+0x4d6>
goto done;
/* pretend it was %c with argument ch */
cp = buf;
1200: 4e 01 movw r8, r28
1202: 08 94 sec
1204: 81 1c adc r8, r1
1206: 91 1c adc r9, r1
*cp = ch;
1208: 09 83 std Y+1, r16 ; 0x01
size = 1;
120a: 81 e0 ldi r24, 0x01 ; 1
120c: d8 2e mov r13, r24
sign = '\0';
120e: 19 a6 std Y+41, r1 ; 0x29
}
/*
* All reasonable formats wind up here. At this point,
* `cp' points to a string which (if not flags&LADJUST)
* should be padded out to `width' places. If
* flags&ZEROPAD, it should first be prefixed by any
* sign or other prefix; otherwise, it should be blank
* padded before the prefix is emitted. After any
* left-hand padding and prefixing, emit zeroes
* required by a decimal [diouxX] precision, then print
* the string proper, then emit zeroes required by any
* leftover floating precision; finally, if LADJUST,
* pad with blanks.
*/
/*
* compute actual size, so we know how much to pad.
*/
fieldsz = size;
1210: 1d 2d mov r17, r13
dpad = dprec - size;
1212: c8 a8 ldd r12, Y+48 ; 0x30
1214: cd 18 sub r12, r13
if (dpad < 0)
1216: c7 fc sbrc r12, 7
dpad = 0;
1218: cc 24 eor r12, r12
if (sign)
121a: 89 a5 ldd r24, Y+41 ; 0x29
121c: 88 23 and r24, r24
121e: 11 f0 breq .+4 ; 0x1224 <_printf_P+0x45e>
fieldsz++;
1220: 1f 5f subi r17, 0xFF ; 255
1222: 02 c0 rjmp .+4 ; 0x1228 <_printf_P+0x462>
else if (flags & HEXPREFIX)
1224: 56 fc sbrc r5, 6
fieldsz += 2;
1226: 1e 5f subi r17, 0xFE ; 254
fieldsz += dpad;
1228: 1c 0d add r17, r12
/* right-adjusting blank padding */
if ((flags & (LADJUST|ZEROPAD)) == 0)
122a: e5 2c mov r14, r5
122c: ff 24 eor r15, r15
122e: c7 01 movw r24, r14
1230: 80 73 andi r24, 0x30 ; 48
1232: 90 70 andi r25, 0x00 ; 0
1234: 89 2b or r24, r25
1236: 21 f4 brne .+8 ; 0x1240 <_printf_P+0x47a>
PAD_SP(width - fieldsz);
1238: 82 2d mov r24, r2
123a: 81 1b sub r24, r17
123c: 0e 94 cb 06 call 0xd96 <PAD_SP>
/* prefix */
if (sign) {
1240: 89 a5 ldd r24, Y+41 ; 0x29
1242: 88 23 and r24, r24
1244: 29 f0 breq .+10 ; 0x1250 <_printf_P+0x48a>
PRINT(&sign, 1);
1246: 61 e0 ldi r22, 0x01 ; 1
1248: 70 e0 ldi r23, 0x00 ; 0
124a: ce 01 movw r24, r28
124c: 89 96 adiw r24, 0x29 ; 41
124e: 09 c0 rjmp .+18 ; 0x1262 <_printf_P+0x49c>
} else if (flags & HEXPREFIX) {
1250: e6 fe sbrs r14, 6
1252: 09 c0 rjmp .+18 ; 0x1266 <_printf_P+0x4a0>
ox[0] = '0';
1254: 80 e3 ldi r24, 0x30 ; 48
1256: 8a a7 std Y+42, r24 ; 0x2a
ox[1] = ch;
1258: 0b a7 std Y+43, r16 ; 0x2b
PRINT(ox, 2);
125a: 62 e0 ldi r22, 0x02 ; 2
125c: 70 e0 ldi r23, 0x00 ; 0
125e: ce 01 movw r24, r28
1260: 8a 96 adiw r24, 0x2a ; 42
1262: 0e 94 a2 06 call 0xd44 <PRINT>
}
/* right-adjusting zero padding */
if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD)
1266: c7 01 movw r24, r14
1268: 80 73 andi r24, 0x30 ; 48
126a: 90 70 andi r25, 0x00 ; 0
126c: 80 97 sbiw r24, 0x20 ; 32
126e: 21 f4 brne .+8 ; 0x1278 <_printf_P+0x4b2>
PAD_0(width - fieldsz);
1270: 82 2d mov r24, r2
1272: 81 1b sub r24, r17
1274: 0e 94 d7 06 call 0xdae <PAD_0>
/* leading zeroes from decimal precision */
PAD_0(dpad);
1278: 8c 2d mov r24, r12
127a: 0e 94 d7 06 call 0xdae <PAD_0>
/* the string or number proper */
PRINT(cp, size);
127e: 8d 2d mov r24, r13
1280: 99 27 eor r25, r25
1282: 87 fd sbrc r24, 7
1284: 90 95 com r25
1286: bc 01 movw r22, r24
1288: c4 01 movw r24, r8
128a: 0e 94 a2 06 call 0xd44 <PRINT>
/* left-adjusting padding (always blank) */
if (flags & LADJUST)
128e: e4 fe sbrs r14, 4
1290: c1 cd rjmp .-1150 ; 0xe14 <_printf_P+0x4e>
PAD_SP(width - fieldsz);
1292: 82 2d mov r24, r2
1294: 81 1b sub r24, r17
1296: 0e 94 cb 06 call 0xd96 <PAD_SP>
129a: bc cd rjmp .-1160 ; 0xe14 <_printf_P+0x4e>
129c: e0 96 adiw r28, 0x30 ; 48
129e: 0f b6 in r0, 0x3f ; 63
12a0: f8 94 cli
12a2: de bf out 0x3e, r29 ; 62
12a4: 0f be out 0x3f, r0 ; 63
12a6: cd bf out 0x3d, r28 ; 61
12a8: df 91 pop r29
12aa: cf 91 pop r28
12ac: 1f 91 pop r17
12ae: 0f 91 pop r16
12b0: ff 90 pop r15
12b2: ef 90 pop r14
12b4: df 90 pop r13
12b6: cf 90 pop r12
12b8: bf 90 pop r11
12ba: af 90 pop r10
12bc: 9f 90 pop r9
12be: 8f 90 pop r8
12c0: 7f 90 pop r7
12c2: 6f 90 pop r6
12c4: 5f 90 pop r5
12c6: 4f 90 pop r4
12c8: 3f 90 pop r3
12ca: 2f 90 pop r2
12cc: 08 95 ret
000012ce <__vector_9>:
};
SIGNAL (SIG_OVERFLOW1)
{
12ce: 1f 92 push r1
12d0: 0f 92 push r0
12d2: 0f b6 in r0, 0x3f ; 63
12d4: 0f 92 push r0
12d6: 11 24 eor r1, r1
12d8: 8f 93 push r24
12da: 9f 93 push r25
static unsigned char cnt_10ms = 0;
TCNT1 -= TIMER_RELOAD_VALUE;
12dc: 8c b5 in r24, 0x2c ; 44
12de: 9d b5 in r25, 0x2d ; 45
12e0: 8a 5f subi r24, 0xFA ; 250
12e2: 90 40 sbci r25, 0x00 ; 0
12e4: 9d bd out 0x2d, r25 ; 45
12e6: 8c bd out 0x2c, r24 ; 44
CountMilliseconds++;
12e8: 80 91 a5 00 lds r24, 0x00A5
12ec: 90 91 a6 00 lds r25, 0x00A6
12f0: 01 96 adiw r24, 0x01 ; 1
12f2: 90 93 a6 00 sts 0x00A6, r25
12f6: 80 93 a5 00 sts 0x00A5, r24
if(DisplayBusy) DisplayBusy--;
12fa: 80 91 93 00 lds r24, 0x0093
12fe: 88 23 and r24, r24
1300: 29 f0 breq .+10 ; 0x130c <__vector_9+0x3e>
1302: 80 91 93 00 lds r24, 0x0093
1306: 81 50 subi r24, 0x01 ; 1
1308: 80 93 93 00 sts 0x0093, r24
if(LoescheIrCodeTimer)
130c: 80 91 7c 00 lds r24, 0x007C
1310: 90 91 7d 00 lds r25, 0x007D
1314: 00 97 sbiw r24, 0x00 ; 0
1316: 59 f0 breq .+22 ; 0x132e <__vector_9+0x60>
{
if(--LoescheIrCodeTimer == 0) IR_Code = 0;
1318: 01 97 sbiw r24, 0x01 ; 1
131a: 90 93 7d 00 sts 0x007D, r25
131e: 80 93 7c 00 sts 0x007C, r24
1322: 00 97 sbiw r24, 0x00 ; 0
1324: 21 f4 brne .+8 ; 0x132e <__vector_9+0x60>
1326: 90 93 c8 01 sts 0x01C8, r25
132a: 80 93 c7 01 sts 0x01C7, r24
132e: 9f 91 pop r25
1330: 8f 91 pop r24
1332: 0f 90 pop r0
1334: 0f be out 0x3f, r0 ; 63
1336: 0f 90 pop r0
1338: 1f 90 pop r1
133a: 18 95 reti
0000133c <Timer1_Init>:
}
}
void Timer1_Init(void)
{
TCCR1B = TIMER_TEILER;
133c: 83 e0 ldi r24, 0x03 ; 3
133e: 8e bd out 0x2e, r24 ; 46
TCNT1 = -TIMER_RELOAD_VALUE; // reload
1340: 86 e0 ldi r24, 0x06 ; 6
1342: 9f ef ldi r25, 0xFF ; 255
1344: 9d bd out 0x2d, r25 ; 45
1346: 8c bd out 0x2c, r24 ; 44
//OCR1 = 0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
#if defined (__AVR_ATmega32__)
TIMSK |= 0x04;
1348: 89 b7 in r24, 0x39 ; 57
134a: 84 60 ori r24, 0x04 ; 4
134c: 89 bf out 0x39, r24 ; 57
134e: 08 95 ret
00001350 <SetDelay>:
#endif
#if defined (__AVR_ATmega644__)
TIMSK1 |= _BV(TOIE1);
#endif
}
unsigned int SetDelay (unsigned int t)
{
return(CountMilliseconds + t - 1);
1350: 20 91 a5 00 lds r18, 0x00A5
1354: 30 91 a6 00 lds r19, 0x00A6
1358: 28 0f add r18, r24
135a: 39 1f adc r19, r25
}
135c: c9 01 movw r24, r18
135e: 01 97 sbiw r24, 0x01 ; 1
1360: 08 95 ret
00001362 <CheckDelay>:
char CheckDelay (unsigned int t)
{
return(((t - CountMilliseconds) & 0x8000) >> 8);
1362: 20 91 a5 00 lds r18, 0x00A5
1366: 30 91 a6 00 lds r19, 0x00A6
136a: 82 1b sub r24, r18
136c: 93 0b sbc r25, r19
136e: 89 2f mov r24, r25
1370: 99 27 eor r25, r25
1372: 80 78 andi r24, 0x80 ; 128
}
1374: 99 27 eor r25, r25
1376: 08 95 ret
00001378 <Delay_ms>:
void Delay_ms(unsigned int w)
{
1378: cf 93 push r28
137a: df 93 push r29
unsigned int akt;
akt = SetDelay(w);
137c: 0e 94 a8 09 call 0x1350 <SetDelay>
1380: ec 01 movw r28, r24
while (!CheckDelay(akt));
1382: ce 01 movw r24, r28
1384: 0e 94 b1 09 call 0x1362 <CheckDelay>
1388: 88 23 and r24, r24
138a: d9 f3 breq .-10 ; 0x1382 <Delay_ms+0xa>
138c: df 91 pop r29
138e: cf 91 pop r28
1390: 08 95 ret
00001392 <Keyboard_Init>:
unsigned int KeyTimer = 0;
void Keyboard_Init(void)
{
KeyTimer = SetDelay(KEY_DELAY_MS);
1392: 82 e3 ldi r24, 0x32 ; 50
1394: 90 e0 ldi r25, 0x00 ; 0
1396: 0e 94 a8 09 call 0x1350 <SetDelay>
139a: 90 93 a9 00 sts 0x00A9, r25
139e: 80 93 a8 00 sts 0x00A8, r24
13a2: 08 95 ret
000013a4 <GetKeyboard>:
}
unsigned char GetKeyboard(void)
{
13a4: cf 93 push r28
static char taste1 = 0, taste2 = 0,taste3 = 0,taste4 = 0,taste5 = 0;
unsigned char ret = 0;
13a6: c0 e0 ldi r28, 0x00 ; 0
if(CheckDelay(KeyTimer))
13a8: 80 91 a8 00 lds r24, 0x00A8
13ac: 90 91 a9 00 lds r25, 0x00A9
13b0: 0e 94 b1 09 call 0x1362 <CheckDelay>
13b4: 88 23 and r24, r24
13b6: 09 f4 brne .+2 ; 0x13ba <GetKeyboard+0x16>
13b8: 76 c0 rjmp .+236 ; 0x14a6 <GetKeyboard+0x102>
{
if(_TASTE1) { if(taste1++ == 0 || taste1 == CNT_TASTE) ret |= KEY1; if(taste1 == CNT_TASTE) taste1 = CNT_TASTE-CNT_TASTE/3;} else taste1 = 0;
13ba: cf 9b sbis 0x19, 7 ; 25
13bc: 12 c0 rjmp .+36 ; 0x13e2 <GetKeyboard+0x3e>
13be: 80 91 aa 00 lds r24, 0x00AA
13c2: 8f 5f subi r24, 0xFF ; 255
13c4: 80 93 aa 00 sts 0x00AA, r24
13c8: 81 30 cpi r24, 0x01 ; 1
13ca: 11 f0 breq .+4 ; 0x13d0 <GetKeyboard+0x2c>
13cc: 8a 30 cpi r24, 0x0A ; 10
13ce: 09 f4 brne .+2 ; 0x13d2 <GetKeyboard+0x2e>
13d0: c1 e0 ldi r28, 0x01 ; 1
13d2: 80 91 aa 00 lds r24, 0x00AA
13d6: 8a 30 cpi r24, 0x0A ; 10
13d8: 31 f4 brne .+12 ; 0x13e6 <GetKeyboard+0x42>
13da: 87 e0 ldi r24, 0x07 ; 7
13dc: 80 93 aa 00 sts 0x00AA, r24
13e0: 02 c0 rjmp .+4 ; 0x13e6 <GetKeyboard+0x42>
13e2: c0 93 aa 00 sts 0x00AA, r28
if(_TASTE2) { if(taste2++ == 0 || taste2 == CNT_TASTE) ret |= KEY2; if(taste2 == CNT_TASTE) taste2 = CNT_TASTE-CNT_TASTE/3;} else taste2 = 0;
13e6: ce 9b sbis 0x19, 6 ; 25
13e8: 12 c0 rjmp .+36 ; 0x140e <GetKeyboard+0x6a>
13ea: 80 91 ab 00 lds r24, 0x00AB
13ee: 8f 5f subi r24, 0xFF ; 255
13f0: 80 93 ab 00 sts 0x00AB, r24
13f4: 81 30 cpi r24, 0x01 ; 1
13f6: 11 f0 breq .+4 ; 0x13fc <GetKeyboard+0x58>
13f8: 8a 30 cpi r24, 0x0A ; 10
13fa: 09 f4 brne .+2 ; 0x13fe <GetKeyboard+0x5a>
13fc: c2 60 ori r28, 0x02 ; 2
13fe: 80 91 ab 00 lds r24, 0x00AB
1402: 8a 30 cpi r24, 0x0A ; 10
1404: 31 f4 brne .+12 ; 0x1412 <GetKeyboard+0x6e>
1406: 87 e0 ldi r24, 0x07 ; 7
1408: 80 93 ab 00 sts 0x00AB, r24
140c: 02 c0 rjmp .+4 ; 0x1412 <GetKeyboard+0x6e>
140e: 10 92 ab 00 sts 0x00AB, r1
if(_TASTE3) { if(taste3++ == 0 || taste3 == CNT_TASTE) ret |= KEY3; if(taste3 == CNT_TASTE) taste3 = CNT_TASTE-CNT_TASTE/3;} else taste3 = 0;
1412: cd 9b sbis 0x19, 5 ; 25
1414: 12 c0 rjmp .+36 ; 0x143a <GetKeyboard+0x96>
1416: 80 91 ac 00 lds r24, 0x00AC
141a: 8f 5f subi r24, 0xFF ; 255
141c: 80 93 ac 00 sts 0x00AC, r24
1420: 81 30 cpi r24, 0x01 ; 1
1422: 11 f0 breq .+4 ; 0x1428 <GetKeyboard+0x84>
1424: 8a 30 cpi r24, 0x0A ; 10
1426: 09 f4 brne .+2 ; 0x142a <GetKeyboard+0x86>
1428: c4 60 ori r28, 0x04 ; 4
142a: 80 91 ac 00 lds r24, 0x00AC
142e: 8a 30 cpi r24, 0x0A ; 10
1430: 31 f4 brne .+12 ; 0x143e <GetKeyboard+0x9a>
1432: 87 e0 ldi r24, 0x07 ; 7
1434: 80 93 ac 00 sts 0x00AC, r24
1438: 02 c0 rjmp .+4 ; 0x143e <GetKeyboard+0x9a>
143a: 10 92 ac 00 sts 0x00AC, r1
if(_TASTE4) { if(taste4++ == 0 || taste4 == CNT_TASTE) ret |= KEY4; if(taste4 == CNT_TASTE) taste4 = CNT_TASTE-CNT_TASTE/3;} else taste4 = 0;
143e: cc 9b sbis 0x19, 4 ; 25
1440: 12 c0 rjmp .+36 ; 0x1466 <GetKeyboard+0xc2>
1442: 80 91 ad 00 lds r24, 0x00AD
1446: 8f 5f subi r24, 0xFF ; 255
1448: 80 93 ad 00 sts 0x00AD, r24
144c: 81 30 cpi r24, 0x01 ; 1
144e: 11 f0 breq .+4 ; 0x1454 <GetKeyboard+0xb0>
1450: 8a 30 cpi r24, 0x0A ; 10
1452: 09 f4 brne .+2 ; 0x1456 <GetKeyboard+0xb2>
1454: c8 60 ori r28, 0x08 ; 8
1456: 80 91 ad 00 lds r24, 0x00AD
145a: 8a 30 cpi r24, 0x0A ; 10
145c: 31 f4 brne .+12 ; 0x146a <GetKeyboard+0xc6>
145e: 87 e0 ldi r24, 0x07 ; 7
1460: 80 93 ad 00 sts 0x00AD, r24
1464: 02 c0 rjmp .+4 ; 0x146a <GetKeyboard+0xc6>
1466: 10 92 ad 00 sts 0x00AD, r1
if(_TASTE5) { if(taste5++ == 0 || taste5 == CNT_TASTE) ret |= KEY5; if(taste5 == CNT_TASTE) taste5 = CNT_TASTE-CNT_TASTE/3;} else taste5 = 0;
146a: cb 9b sbis 0x19, 3 ; 25
146c: 12 c0 rjmp .+36 ; 0x1492 <GetKeyboard+0xee>
146e: 80 91 ae 00 lds r24, 0x00AE
1472: 8f 5f subi r24, 0xFF ; 255
1474: 80 93 ae 00 sts 0x00AE, r24
1478: 81 30 cpi r24, 0x01 ; 1
147a: 11 f0 breq .+4 ; 0x1480 <GetKeyboard+0xdc>
147c: 8a 30 cpi r24, 0x0A ; 10
147e: 09 f4 brne .+2 ; 0x1482 <GetKeyboard+0xde>
1480: c0 61 ori r28, 0x10 ; 16
1482: 80 91 ae 00 lds r24, 0x00AE
1486: 8a 30 cpi r24, 0x0A ; 10
1488: 31 f4 brne .+12 ; 0x1496 <GetKeyboard+0xf2>
148a: 87 e0 ldi r24, 0x07 ; 7
148c: 80 93 ae 00 sts 0x00AE, r24
1490: 02 c0 rjmp .+4 ; 0x1496 <GetKeyboard+0xf2>
1492: 10 92 ae 00 sts 0x00AE, r1
KeyTimer = SetDelay(KEY_DELAY_MS);
1496: 82 e3 ldi r24, 0x32 ; 50
1498: 90 e0 ldi r25, 0x00 ; 0
149a: 0e 94 a8 09 call 0x1350 <SetDelay>
149e: 90 93 a9 00 sts 0x00A9, r25
14a2: 80 93 a8 00 sts 0x00A8, r24
}
return(ret);
}
14a6: 8c 2f mov r24, r28
14a8: 99 27 eor r25, r25
14aa: cf 91 pop r28
14ac: 08 95 ret
000014ae <GetKeyboard2>:
unsigned char GetKeyboard2(void)
{
unsigned char ret = 0;
14ae: 80 e0 ldi r24, 0x00 ; 0
if(_TASTE1) ret |= KEY1;
14b0: cf 99 sbic 0x19, 7 ; 25
14b2: 81 e0 ldi r24, 0x01 ; 1
if(_TASTE2) ret |= KEY2;
14b4: ce 99 sbic 0x19, 6 ; 25
14b6: 82 60 ori r24, 0x02 ; 2
if(_TASTE3) ret |= KEY3;
14b8: cd 99 sbic 0x19, 5 ; 25
14ba: 84 60 ori r24, 0x04 ; 4
if(_TASTE4) ret |= KEY4;
14bc: cc 99 sbic 0x19, 4 ; 25
14be: 88 60 ori r24, 0x08 ; 8
if(_TASTE5) ret |= KEY5;
14c0: cb 99 sbic 0x19, 3 ; 25
14c2: 80 61 ori r24, 0x10 ; 16
return(ret);
}
14c4: 99 27 eor r25, r25
14c6: 08 95 ret
000014c8 <Menu>:
unsigned char KanalVon[MAX_KANAL];
unsigned char KanalAn[MAX_KANAL];
void Menu(unsigned char key)
{
14c8: 0f 93 push r16
14ca: 1f 93 push r17
14cc: cf 93 push r28
14ce: df 93 push r29
static unsigned int arr = 0;
static unsigned char MaxMenue = 2,MenuePunkt=0;
unsigned char kanal = 0;
if(key & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LCD_Clear; }
14d0: c8 2f mov r28, r24
14d2: dd 27 eor r29, r29
14d4: c0 ff sbrs r28, 0
14d6: 0f c0 rjmp .+30 ; 0x14f6 <Menu+0x2e>
14d8: 80 91 b3 00 lds r24, 0x00B3
14dc: 88 23 and r24, r24
14de: 11 f0 breq .+4 ; 0x14e4 <Menu+0x1c>
14e0: 81 50 subi r24, 0x01 ; 1
14e2: 02 c0 rjmp .+4 ; 0x14e8 <Menu+0x20>
14e4: 80 91 7b 00 lds r24, 0x007B
14e8: 80 93 b3 00 sts 0x00B3, r24
14ec: 81 e0 ldi r24, 0x01 ; 1
14ee: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
14f2: 0e 94 c9 05 call 0xb92 <_long_delay>
if(key & KEY2) { MenuePunkt++; LCD_Clear; }
14f6: 8e 01 movw r16, r28
14f8: 02 70 andi r16, 0x02 ; 2
14fa: 10 70 andi r17, 0x00 ; 0
14fc: c1 ff sbrs r28, 1
14fe: 0a c0 rjmp .+20 ; 0x1514 <Menu+0x4c>
1500: 80 91 b3 00 lds r24, 0x00B3
1504: 8f 5f subi r24, 0xFF ; 255
1506: 80 93 b3 00 sts 0x00B3, r24
150a: 81 e0 ldi r24, 0x01 ; 1
150c: 0e 94 e1 05 call 0xbc2 <_lcd_write_command>
1510: 0e 94 c9 05 call 0xb92 <_long_delay>
if((key & KEY1) && (key & KEY2)) MenuePunkt = 0;
1514: c0 ff sbrs r28, 0
1516: 04 c0 rjmp .+8 ; 0x1520 <Menu+0x58>
1518: 01 2b or r16, r17
151a: 11 f0 breq .+4 ; 0x1520 <Menu+0x58>
151c: 10 92 b3 00 sts 0x00B3, r1
// LCD_printfxy(13,0,"[%i]",MenuePunkt);
switch(MenuePunkt)
1520: 20 91 b3 00 lds r18, 0x00B3
1524: 82 2f mov r24, r18
1526: 99 27 eor r25, r25
1528: 81 30 cpi r24, 0x01 ; 1
152a: 91 05 cpc r25, r1
152c: 09 f4 brne .+2 ; 0x1530 <Menu+0x68>
152e: 41 c0 rjmp .+130 ; 0x15b2 <Menu+0xea>
1530: 82 30 cpi r24, 0x02 ; 2
1532: 91 05 cpc r25, r1
1534: 1c f4 brge .+6 ; 0x153c <Menu+0x74>
1536: 89 2b or r24, r25
1538: 49 f0 breq .+18 ; 0x154c <Menu+0x84>
153a: bf c0 rjmp .+382 ; 0x16ba <Menu+0x1f2>
153c: 82 30 cpi r24, 0x02 ; 2
153e: 91 05 cpc r25, r1
1540: 09 f4 brne .+2 ; 0x1544 <Menu+0x7c>
1542: 6a c0 rjmp .+212 ; 0x1618 <Menu+0x150>
1544: 03 97 sbiw r24, 0x03 ; 3
1546: 09 f4 brne .+2 ; 0x154a <Menu+0x82>
1548: 8e c0 rjmp .+284 ; 0x1666 <Menu+0x19e>
154a: b7 c0 rjmp .+366 ; 0x16ba <Menu+0x1f2>
{
case 0:
LCD_printfxy(0,0,"Verbinden mit");
154c: 60 e0 ldi r22, 0x00 ; 0
154e: 86 2f mov r24, r22
1550: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
1554: 84 eb ldi r24, 0xB4 ; 180
1556: 90 e0 ldi r25, 0x00 ; 0
1558: 9f 93 push r25
155a: 8f 93 push r24
155c: 0e 94 e3 06 call 0xdc6 <_printf_P>
LCD_printfxy(0,1,"MicroSPS:%2i ",SlaveAdresse);
1560: 61 e0 ldi r22, 0x01 ; 1
1562: 80 e0 ldi r24, 0x00 ; 0
1564: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
1568: 0f 90 pop r0
156a: 0f 90 pop r0
156c: 80 91 64 00 lds r24, 0x0064
1570: 99 27 eor r25, r25
1572: 9f 93 push r25
1574: 8f 93 push r24
1576: 82 ec ldi r24, 0xC2 ; 194
1578: 90 e0 ldi r25, 0x00 ; 0
157a: 9f 93 push r25
157c: 8f 93 push r24
157e: 0e 94 e3 06 call 0xdc6 <_printf_P>
if(key & KEY3 && SlaveAdresse > 1) SlaveAdresse--;
1582: 0f 90 pop r0
1584: 0f 90 pop r0
1586: 0f 90 pop r0
1588: 0f 90 pop r0
158a: c2 ff sbrs r28, 2
158c: 07 c0 rjmp .+14 ; 0x159c <Menu+0xd4>
158e: 80 91 64 00 lds r24, 0x0064
1592: 82 30 cpi r24, 0x02 ; 2
1594: 18 f0 brcs .+6 ; 0x159c <Menu+0xd4>
1596: 81 50 subi r24, 0x01 ; 1
1598: 80 93 64 00 sts 0x0064, r24
if(key & KEY4 && SlaveAdresse < 26) SlaveAdresse++;
159c: c3 ff sbrs r28, 3
159e: 92 c0 rjmp .+292 ; 0x16c4 <Menu+0x1fc>
15a0: 80 91 64 00 lds r24, 0x0064
15a4: 8a 31 cpi r24, 0x1A ; 26
15a6: 08 f0 brcs .+2 ; 0x15aa <Menu+0xe2>
15a8: 8d c0 rjmp .+282 ; 0x16c4 <Menu+0x1fc>
15aa: 8f 5f subi r24, 0xFF ; 255
15ac: 80 93 64 00 sts 0x0064, r24
break;
15b0: 89 c0 rjmp .+274 ; 0x16c4 <Menu+0x1fc>
case 1:
LCD_printfxy(0,0,"Max Adresse");
15b2: 60 e0 ldi r22, 0x00 ; 0
15b4: 86 2f mov r24, r22
15b6: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
15ba: 80 ed ldi r24, 0xD0 ; 208
15bc: 90 e0 ldi r25, 0x00 ; 0
15be: 9f 93 push r25
15c0: 8f 93 push r24
15c2: 0e 94 e3 06 call 0xdc6 <_printf_P>
LCD_printfxy(0,1,"%2i ",AnzahlTeilnehmer);
15c6: 61 e0 ldi r22, 0x01 ; 1
15c8: 80 e0 ldi r24, 0x00 ; 0
15ca: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
15ce: 0f 90 pop r0
15d0: 0f 90 pop r0
15d2: 80 91 6c 00 lds r24, 0x006C
15d6: 99 27 eor r25, r25
15d8: 9f 93 push r25
15da: 8f 93 push r24
15dc: 8c ed ldi r24, 0xDC ; 220
15de: 90 e0 ldi r25, 0x00 ; 0
15e0: 9f 93 push r25
15e2: 8f 93 push r24
15e4: 0e 94 e3 06 call 0xdc6 <_printf_P>
if(key & KEY3 && AnzahlTeilnehmer > 1) AnzahlTeilnehmer--;
15e8: 0f 90 pop r0
15ea: 0f 90 pop r0
15ec: 0f 90 pop r0
15ee: 0f 90 pop r0
15f0: c2 ff sbrs r28, 2
15f2: 07 c0 rjmp .+14 ; 0x1602 <Menu+0x13a>
15f4: 80 91 6c 00 lds r24, 0x006C
15f8: 82 30 cpi r24, 0x02 ; 2
15fa: 18 f0 brcs .+6 ; 0x1602 <Menu+0x13a>
15fc: 81 50 subi r24, 0x01 ; 1
15fe: 80 93 6c 00 sts 0x006C, r24
if(key & KEY4 && AnzahlTeilnehmer < 26) AnzahlTeilnehmer++;
1602: c3 ff sbrs r28, 3
1604: 5f c0 rjmp .+190 ; 0x16c4 <Menu+0x1fc>
1606: 80 91 6c 00 lds r24, 0x006C
160a: 8a 31 cpi r24, 0x1A ; 26
160c: 08 f0 brcs .+2 ; 0x1610 <Menu+0x148>
160e: 5a c0 rjmp .+180 ; 0x16c4 <Menu+0x1fc>
1610: 8f 5f subi r24, 0xFF ; 255
1612: 80 93 6c 00 sts 0x006C, r24
break;
1616: 56 c0 rjmp .+172 ; 0x16c4 <Menu+0x1fc>
case 2:
LCD_printfxy(0,0,"Checksum");
1618: 60 e0 ldi r22, 0x00 ; 0
161a: 86 2f mov r24, r22
161c: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
1620: 81 ee ldi r24, 0xE1 ; 225
1622: 90 e0 ldi r25, 0x00 ; 0
1624: 9f 93 push r25
1626: 8f 93 push r24
1628: 0e 94 e3 06 call 0xdc6 <_printf_P>
LCD_printfxy(0,1,"Errors:%5i ",CntCrcError);
162c: 61 e0 ldi r22, 0x01 ; 1
162e: 80 e0 ldi r24, 0x00 ; 0
1630: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
1634: 0f 90 pop r0
1636: 0f 90 pop r0
1638: 80 91 99 00 lds r24, 0x0099
163c: 90 91 9a 00 lds r25, 0x009A
1640: 9f 93 push r25
1642: 8f 93 push r24
1644: 8a ee ldi r24, 0xEA ; 234
1646: 90 e0 ldi r25, 0x00 ; 0
1648: 9f 93 push r25
164a: 8f 93 push r24
164c: 0e 94 e3 06 call 0xdc6 <_printf_P>
if(key & KEY3) CntCrcError = 0;
1650: 0f 90 pop r0
1652: 0f 90 pop r0
1654: 0f 90 pop r0
1656: 0f 90 pop r0
1658: c2 ff sbrs r28, 2
165a: 34 c0 rjmp .+104 ; 0x16c4 <Menu+0x1fc>
165c: 10 92 9a 00 sts 0x009A, r1
1660: 10 92 99 00 sts 0x0099, r1
break;
1664: 2f c0 rjmp .+94 ; 0x16c4 <Menu+0x1fc>
case 3:
LCD_printfxy(0,0,"Display");
1666: 60 e0 ldi r22, 0x00 ; 0
1668: 86 2f mov r24, r22
166a: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
166e: 86 ef ldi r24, 0xF6 ; 246
1670: 90 e0 ldi r25, 0x00 ; 0
1672: 9f 93 push r25
1674: 8f 93 push r24
1676: 0e 94 e3 06 call 0xdc6 <_printf_P>
LCD_printfxy(0,1,"Zeilen:%1i ",DisplayZeilen);
167a: 61 e0 ldi r22, 0x01 ; 1
167c: 80 e0 ldi r24, 0x00 ; 0
167e: 0e 94 55 06 call 0xcaa <LCD_Gotoxy>
1682: 0f 90 pop r0
1684: 0f 90 pop r0
1686: 80 91 65 00 lds r24, 0x0065
168a: 99 27 eor r25, r25
168c: 9f 93 push r25
168e: 8f 93 push r24
1690: 8e ef ldi r24, 0xFE ; 254
1692: 90 e0 ldi r25, 0x00 ; 0
1694: 9f 93 push r25
1696: 8f 93 push r24
1698: 0e 94 e3 06 call 0xdc6 <_printf_P>
if(key & KEY3) DisplayZeilen = 4;
169c: 0f 90 pop r0
169e: 0f 90 pop r0
16a0: 0f 90 pop r0
16a2: 0f 90 pop r0
16a4: c2 ff sbrs r28, 2
16a6: 03 c0 rjmp .+6 ; 0x16ae <Menu+0x1e6>
16a8: 84 e0 ldi r24, 0x04 ; 4
16aa: 80 93 65 00 sts 0x0065, r24
if(key & KEY4) DisplayZeilen = 2;
16ae: c3 ff sbrs r28, 3
16b0: 09 c0 rjmp .+18 ; 0x16c4 <Menu+0x1fc>
16b2: 82 e0 ldi r24, 0x02 ; 2
16b4: 80 93 65 00 sts 0x0065, r24
break;
16b8: 05 c0 rjmp .+10 ; 0x16c4 <Menu+0x1fc>
/* case 1:
case 2:
case 3:
case 4:
kanal = MenuePunkt - 1;
LCD_printfxy(0,0,"Datenkanal:%2i",kanal);
LCD_printfxy(0,1,"Von:%2i an %2i ",KanalVon[kanal],KanalAn[kanal]);
if(key & KEY3) KanalVon[kanal]++;
if(key & KEY4) KanalAn[kanal]++;
KanalVon[kanal] % MAX_KANAL;
KanalAn[kanal] % MAX_KANAL;
break;
*/
/*
case 1:
LCD_printfxy(0,0,"Intervall");
LCD_printfxy(0,1,"Display:%3ims ",IntervallDisplay);
if(key & KEY3 && IntervallDisplay > 25) IntervallDisplay -= 5;
if(key & KEY4 && IntervallDisplay < 990) IntervallDisplay += 5;
break;
case 2:
LCD_printfxy(0,0,"Intervall");
LCD_printfxy(0,1,"Debug:%3ims ",IntervallDebug);
if(key & KEY3 && IntervallDebug > 25) IntervallDebug -= 5;
if(key & KEY4 && IntervallDebug < 990) IntervallDebug += 5;
break;
case 1:
LCD_printfxy(0,0,"Time");
LCD_printfxy(0,1,"%3i:%02i",Minute,Sekunde);
if(key & KEY3) if(Minute) Minute--;
if(key & KEY4) Minute++;
if(key & KEY5) Sekunde = 0;
break;
case 2:
LCD_printfxy(0,0,"Testvariable");
LCD_printfxy(0,1,"TestInt:%5i",TestInt);
if(key & KEY3) TestInt--;
if(key & KEY4) TestInt++;
break;
case 3:
LCD_printfxy(0,0,"Testarray");
LCD_printfxy(0,1,"Array[%i]=%3i",arr,Array[arr]);
if(key & KEY5) if(++arr == ARRAYGROESSE) arr = 0;
if(key & KEY3) Array[arr]--;
if(key & KEY4) Array[arr]++;
break;
case 4:
LCD_printfxy(0,0,"Infrarot RC5:");
LCD_printfxy(0,1,"Adr:%2i Cmd:%3i",(IR_Code >> 8), IR_Code & 0xff);
break;
*/
default: MaxMenue = MenuePunkt - 1;
16ba: 21 50 subi r18, 0x01 ; 1
16bc: 20 93 7b 00 sts 0x007B, r18
MenuePunkt = 0;
16c0: 10 92 b3 00 sts 0x00B3, r1
16c4: df 91 pop r29
16c6: cf 91 pop r28
16c8: 1f 91 pop r17
16ca: 0f 91 pop r16
16cc: 08 95 ret
000016ce <InitIR>:
// Init IR
// ************************************************************************
void InitIR(void)
{
INT0_ENABLE; // ext. Int0 enable
16ce: 8b b7 in r24, 0x3b ; 59
16d0: 80 64 ori r24, 0x40 ; 64
16d2: 8b bf out 0x3b, r24 ; 59
CLR_INT0_FLAG; // war |= 0x40
16d4: 8a b7 in r24, 0x3a ; 58
16d6: 8f 7b andi r24, 0xBF ; 191
16d8: 8a bf out 0x3a, r24 ; 58
INIT_INT0_FLANKE;
16da: 85 b7 in r24, 0x35 ; 53
16dc: 8c 7f andi r24, 0xFC ; 252
16de: 85 bf out 0x35, r24 ; 53
16e0: 85 b7 in r24, 0x35 ; 53
16e2: 82 60 ori r24, 0x02 ; 2
16e4: 85 bf out 0x35, r24 ; 53
TIMER0_PRESCALER = 0x04; // Timer0: Clk div 256
16e6: 84 e0 ldi r24, 0x04 ; 4
16e8: 83 bf out 0x33, r24 ; 51
Decodierung_Lauft = 0;
16ea: 10 92 c9 01 sts 0x01C9, r1
New_IR_Code = 0;
16ee: 10 92 c6 01 sts 0x01C6, r1
IR_Code = 0;
16f2: 10 92 c8 01 sts 0x01C8, r1
16f6: 10 92 c7 01 sts 0x01C7, r1
16fa: 08 95 ret
000016fc <__vector_1>:
}
// **************************************************************************
// * aufgerufen durch: externer Interrupt
// **************************************************************************
// * Die Funktion wird durch einen externen Interrupt aufgerufen.
// * Sie dient nur zum Starten der Abtastsequenz und zum Triggern auf die
// * Signalflanken in der Mitte der Daten.
// **************************************************************************
SIGNAL (SIG_INTERRUPT0)
{
16fc: 1f 92 push r1
16fe: 0f 92 push r0
1700: 0f b6 in r0, 0x3f ; 63
1702: 0f 92 push r0
1704: 11 24 eor r1, r1
1706: 8f 93 push r24
// Zeitbasis fuer Timer einstellen
// Entspricht 1,5 mal einer Bitlaenge
// PORTB++;
TCNT0 = -41;
1708: 87 ed ldi r24, 0xD7 ; 215
170a: 82 bf out 0x32, r24 ; 50
TIM0_START; // Timer 0 starten,
170c: 89 b7 in r24, 0x39 ; 57
170e: 81 60 ori r24, 0x01 ; 1
1710: 89 bf out 0x39, r24 ; 57
if(Decodierung_Lauft) INT0_DISABLE; // die erneute Int.-Auslsung soll
1712: 80 91 c9 01 lds r24, 0x01C9
1716: 88 23 and r24, r24
1718: 19 f0 breq .+6 ; 0x1720 <__vector_1+0x24>
171a: 8b b7 in r24, 0x3b ; 59
171c: 8f 7b andi r24, 0xBF ; 191
171e: 8b bf out 0x3b, r24 ; 59
1720: 8f 91 pop r24
1722: 0f 90 pop r0
1724: 0f be out 0x3f, r0 ; 63
1726: 0f 90 pop r0
1728: 1f 90 pop r1
172a: 18 95 reti
0000172c <__vector_11>:
// nur die Timer-Routine erlauben
}
// **************************************************************************
// * aufgerufen durch: Timerueberlauf Timer 0
// **************************************************************************
// * Die Funktion wird durch einen Timer0-Interrupt aufgerufen.
// * Der Timer wird vom ext. Int0 gestartet.
// * Das Infrarotsignal wird hier abgetastet und die Wertigkeiten der
// * Bits entsprechend aufaddiert. Das empfangende Zeichen wird in der
// * globalen Variablen IR_Code gespeichert. Nach Empfang wird das Bit
// * Neues_Zeichen gesetzt.
// **************************************************************************
SIGNAL (SIG_OVERFLOW0)
{
172c: 1f 92 push r1
172e: 0f 92 push r0
1730: 0f b6 in r0, 0x3f ; 63
1732: 0f 92 push r0
1734: 11 24 eor r1, r1
1736: 2f 93 push r18
1738: 3f 93 push r19
173a: 4f 93 push r20
173c: 8f 93 push r24
173e: 9f 93 push r25
static unsigned int Shift,IR_Code_tmp;
static unsigned char IR_Zaehler=0,IRSperrCounter=0;
// Reinitialize Timer's 0 value
TCNT1 = -41;
1740: 87 ed ldi r24, 0xD7 ; 215
1742: 9f ef ldi r25, 0xFF ; 255
1744: 9d bd out 0x2d, r25 ; 45
1746: 8c bd out 0x2c, r24 ; 44
if (IRSperrCounter)
1748: 80 91 b9 00 lds r24, 0x00B9
174c: 88 23 and r24, r24
174e: 69 f0 breq .+26 ; 0x176a <__vector_11+0x3e>
{ IRSperrCounter--;
1750: 81 50 subi r24, 0x01 ; 1
1752: 80 93 b9 00 sts 0x00B9, r24
if (!IRSperrCounter)
1756: 88 23 and r24, r24
1758: 09 f0 breq .+2 ; 0x175c <__vector_11+0x30>
175a: 8a c0 rjmp .+276 ; 0x1870 <__vector_11+0x144>
{
TIM0_STOPP; // Timer0 sperre wird durch ExtInt0 gestartet
175c: 89 b7 in r24, 0x39 ; 57
175e: 8e 7f andi r24, 0xFE ; 254
1760: 89 bf out 0x39, r24 ; 57
CLR_INT0_FLAG; // IntFlag Loeschen
1762: 8a b7 in r24, 0x3a ; 58
1764: 8f 7b andi r24, 0xBF ; 191
1766: 8a bf out 0x3a, r24 ; 58
1768: 80 c0 rjmp .+256 ; 0x186a <__vector_11+0x13e>
INT0_ENABLE; // externen Interrupt wieder freigenben
}
}
else
{
if(IR_Zaehler > 1)
176a: 40 91 b8 00 lds r20, 0x00B8
176e: 42 30 cpi r20, 0x02 ; 2
1770: 88 f0 brcs .+34 ; 0x1794 <__vector_11+0x68>
{
Decodierung_Lauft = 1;
1772: 81 e0 ldi r24, 0x01 ; 1
1774: 80 93 c9 01 sts 0x01C9, r24
{
CLR_INT0_FLAG; // Interrupt Flag loeschen
1778: 8a b7 in r24, 0x3a ; 58
177a: 8f 7b andi r24, 0xBF ; 191
177c: 8a bf out 0x3a, r24 ; 58
if(IR_PP) INT0_NEG_FLANKE; // naechste fallende Flanke soll Int0 ausloesen
177e: 82 9b sbis 0x10, 2 ; 16
1780: 03 c0 rjmp .+6 ; 0x1788 <__vector_11+0x5c>
1782: 85 b7 in r24, 0x35 ; 53
1784: 8e 7f andi r24, 0xFE ; 254
1786: 02 c0 rjmp .+4 ; 0x178c <__vector_11+0x60>
else INT0_POS_FLANKE; // naechste steigende Flanke soll Int0 ausloesen
1788: 85 b7 in r24, 0x35 ; 53
178a: 81 60 ori r24, 0x01 ; 1
178c: 85 bf out 0x35, r24 ; 53
INT0_ENABLE; // externen Int frei
178e: 8b b7 in r24, 0x3b ; 59
1790: 80 64 ori r24, 0x40 ; 64
1792: 8b bf out 0x3b, r24 ; 59
}
}
if(!IR_Zaehler) // es beginnt eine neue Abtastung
1794: 44 23 and r20, r20
1796: 59 f4 brne .+22 ; 0x17ae <__vector_11+0x82>
{ // es handelt sich um das 1. Sync-Bit
IR_Code_tmp=0; // Merker löschen
1798: 10 92 b7 00 sts 0x00B7, r1
179c: 10 92 b6 00 sts 0x00B6, r1
Shift=0x8000; //;8192; // Maske auf MSB
17a0: 80 e0 ldi r24, 0x00 ; 0
17a2: 90 e8 ldi r25, 0x80 ; 128
17a4: 90 93 b5 00 sts 0x00B5, r25
17a8: 80 93 b4 00 sts 0x00B4, r24
17ac: 14 c0 rjmp .+40 ; 0x17d6 <__vector_11+0xaa>
}
else
if(IR_PP==1) // das empfangende Bit ist logisch High
17ae: 82 9b sbis 0x10, 2 ; 16
17b0: 10 c0 rjmp .+32 ; 0x17d2 <__vector_11+0xa6>
{ if(IR_Zaehler>2) // (IR_Zaehler ist gleich 1 beim 2. Sync-Bit)
17b2: 43 30 cpi r20, 0x03 ; 3
17b4: 70 f0 brcs .+28 ; 0x17d2 <__vector_11+0xa6>
{ // 2 --> Toggle-Bit (wird übersprungen)
IR_Code_tmp |= Shift; // entsprechendse Bit setzen
17b6: 80 91 b6 00 lds r24, 0x00B6
17ba: 90 91 b7 00 lds r25, 0x00B7
17be: 20 91 b4 00 lds r18, 0x00B4
17c2: 30 91 b5 00 lds r19, 0x00B5
17c6: 82 2b or r24, r18
17c8: 93 2b or r25, r19
17ca: 90 93 b7 00 sts 0x00B7, r25
17ce: 80 93 b6 00 sts 0x00B6, r24
}
}
if ((IR_Zaehler < 2) && !(IR_PP==1)) // startbits überprüfen
17d2: 42 30 cpi r20, 0x02 ; 2
17d4: 20 f4 brcc .+8 ; 0x17de <__vector_11+0xb2>
17d6: 82 99 sbic 0x10, 2 ; 16
17d8: 02 c0 rjmp .+4 ; 0x17de <__vector_11+0xb2>
{
IR_Zaehler = 0;
17da: 10 92 b8 00 sts 0x00B8, r1
}
Shift >>=1; // Shiftregister um 1 nach rechts schieben
17de: 80 91 b4 00 lds r24, 0x00B4
17e2: 90 91 b5 00 lds r25, 0x00B5
17e6: 96 95 lsr r25
17e8: 87 95 ror r24
17ea: 90 93 b5 00 sts 0x00B5, r25
17ee: 80 93 b4 00 sts 0x00B4, r24
// (für das nächste empf. Bit
if (Shift == 128) Shift = 32; // Adresse ins HighByte, Kommando ins LowByte
17f2: 80 38 cpi r24, 0x80 ; 128
17f4: 91 05 cpc r25, r1
17f6: 31 f4 brne .+12 ; 0x1804 <__vector_11+0xd8>
17f8: 80 e2 ldi r24, 0x20 ; 32
17fa: 90 e0 ldi r25, 0x00 ; 0
17fc: 90 93 b5 00 sts 0x00B5, r25
1800: 80 93 b4 00 sts 0x00B4, r24
if(IR_Zaehler++==15) // Das IR-Wort wurde vollstaendig abgetastet
1804: 80 91 b8 00 lds r24, 0x00B8
1808: 8f 5f subi r24, 0xFF ; 255
180a: 80 93 b8 00 sts 0x00B8, r24
180e: 80 31 cpi r24, 0x10 ; 16
1810: 79 f5 brne .+94 ; 0x1870 <__vector_11+0x144>
{
CLR_INT0_FLAG; // IntFlag Loeschen
1812: 8a b7 in r24, 0x3a ; 58
1814: 8f 7b andi r24, 0xBF ; 191
1816: 8a bf out 0x3a, r24 ; 58
INT0_NEG_FLANKE; // fallende Flanke
1818: 85 b7 in r24, 0x35 ; 53
181a: 8e 7f andi r24, 0xFE ; 254
181c: 85 bf out 0x35, r24 ; 53
IR_Zaehler = 0;
181e: 10 92 b8 00 sts 0x00B8, r1
Decodierung_Lauft=0;
1822: 10 92 c9 01 sts 0x01C9, r1
/* if ((HIGH(IR_Code_tmp)==ALLOWED1)|| (HIGH(IR_Code_tmp)==ALLOWED2)||
(HIGH(IR_Code_tmp)==ALLOWED3)||(HIGH(IR_Code_tmp)==ALLOWED4)||
(HIGH(IR_Code_tmp)==ALLOWED5) )
if ((HIGH(IR_Code_tmp)< 10))*/
if ((HIGH(IR_Code_tmp)< 10 ) && (LOW(IR_Code_tmp)!=0x3F) )
1826: 80 91 b7 00 lds r24, 0x00B7
182a: 8a 30 cpi r24, 0x0A ; 10
182c: d8 f4 brcc .+54 ; 0x1864 <__vector_11+0x138>
182e: 80 91 b6 00 lds r24, 0x00B6
1832: 8f 33 cpi r24, 0x3F ; 63
1834: b9 f0 breq .+46 ; 0x1864 <__vector_11+0x138>
{ // nur erlaubt Adressen werden akzepetiert
IR_Code=IR_Code_tmp; // IR-Wort in die globale Variable schreiben
1836: 80 91 b6 00 lds r24, 0x00B6
183a: 90 91 b7 00 lds r25, 0x00B7
183e: 90 93 c8 01 sts 0x01C8, r25
1842: 80 93 c7 01 sts 0x01C7, r24
New_IR_Code = 1; // Es ist ein neues Zeichen eingetragen worden
1846: 81 e0 ldi r24, 0x01 ; 1
1848: 80 93 c6 01 sts 0x01C6, r24
IRSperrCounter = 4; // weitere Kommandos für 200 * 1,3ms unterdrücken
184c: 84 e0 ldi r24, 0x04 ; 4
184e: 80 93 b9 00 sts 0x00B9, r24
INT0_ENABLE; // externen Interrupt wieder freigenben
1852: 8b b7 in r24, 0x3b ; 59
1854: 80 64 ori r24, 0x40 ; 64
1856: 8b bf out 0x3b, r24 ; 59
LoescheIrCodeTimer = 250;
1858: 8a ef ldi r24, 0xFA ; 250
185a: 90 e0 ldi r25, 0x00 ; 0
185c: 90 93 7d 00 sts 0x007D, r25
1860: 80 93 7c 00 sts 0x007C, r24
}
IRSperrCounter = 4; // weitere Kommandos für 200 * 1,3ms unterdrücken
1864: 84 e0 ldi r24, 0x04 ; 4
1866: 80 93 b9 00 sts 0x00B9, r24
INT0_ENABLE; // externen Interrupt wieder freigenben
186a: 8b b7 in r24, 0x3b ; 59
186c: 80 64 ori r24, 0x40 ; 64
186e: 8b bf out 0x3b, r24 ; 59
1870: 9f 91 pop r25
1872: 8f 91 pop r24
1874: 4f 91 pop r20
1876: 3f 91 pop r19
1878: 2f 91 pop r18
187a: 0f 90 pop r0
187c: 0f be out 0x3f, r0 ; 63
187e: 0f 90 pop r0
1880: 1f 90 pop r1
1882: 18 95 reti
00001884 <ADC_Init>:
// ---------------------------------------------------------------------------------------
void ADC_Init(void)
{
ADMUX = 0;
1884: 17 b8 out 0x07, r1 ; 7
ADCSRA = 0x86;
1886: 86 e8 ldi r24, 0x86 ; 134
1888: 86 b9 out 0x06, r24 ; 6
188a: 08 95 ret
0000188c <ReadADC>:
}
// ---------------------------------------------------------------------------------------
unsigned int ReadADC(unsigned char adc_input)
{
ADMUX = adc_input;
188c: 87 b9 out 0x07, r24 ; 7
ADCSRA |= 0x40;
188e: 36 9a sbi 0x06, 6 ; 6
//Delay_ms(10);
while ((ADCSRA & 0x10) == 0);
1890: 34 9b sbis 0x06, 4 ; 6
1892: fe cf rjmp .-4 ; 0x1890 <ReadADC+0x4>
ADCSRA |= 0x10;
1894: 34 9a sbi 0x06, 4 ; 6
return ADCW; // read ad and calc. temp.
1896: 84 b1 in r24, 0x04 ; 4
1898: 95 b1 in r25, 0x05 ; 5
189a: 08 95 ret
0000189c <GetAnalogWerte>:
}
void GetAnalogWerte(void)
{
AnalogWerte[0] = ReadADC(0);
189c: 80 e0 ldi r24, 0x00 ; 0
189e: 0e 94 46 0c call 0x188c <ReadADC>
18a2: 90 93 cb 01 sts 0x01CB, r25
18a6: 80 93 ca 01 sts 0x01CA, r24
AnalogWerte[1] = ReadADC(1);
18aa: 81 e0 ldi r24, 0x01 ; 1
18ac: 0e 94 46 0c call 0x188c <ReadADC>
18b0: 90 93 cd 01 sts 0x01CD, r25
18b4: 80 93 cc 01 sts 0x01CC, r24
AnalogWerte[2] = ReadADC(2);
18b8: 82 e0 ldi r24, 0x02 ; 2
18ba: 0e 94 46 0c call 0x188c <ReadADC>
18be: 90 93 cf 01 sts 0x01CF, r25
18c2: 80 93 ce 01 sts 0x01CE, r24
18c6: 08 95 ret
000018c8 <memchr>:
18c8: fc 01 movw r30, r24
18ca: 41 50 subi r20, 0x01 ; 1
18cc: 50 40 sbci r21, 0x00 ; 0
18ce: 30 f0 brcs .+12 ; 0x18dc <memchr+0x14>
18d0: 01 90 ld r0, Z+
18d2: 06 16 cp r0, r22
18d4: d1 f7 brne .-12 ; 0x18ca <memchr+0x2>
18d6: 31 97 sbiw r30, 0x01 ; 1
18d8: cf 01 movw r24, r30
18da: 08 95 ret
18dc: 88 27 eor r24, r24
18de: 99 27 eor r25, r25
18e0: 08 95 ret
000018e2 <fdevopen>:
18e2: 0f 93 push r16
18e4: 1f 93 push r17
18e6: cf 93 push r28
18e8: df 93 push r29
18ea: 8c 01 movw r16, r24
18ec: eb 01 movw r28, r22
18ee: 00 97 sbiw r24, 0x00 ; 0
18f0: 11 f4 brne .+4 ; 0x18f6 <fdevopen+0x14>
18f2: 67 2b or r22, r23
18f4: c1 f1 breq .+112 ; 0x1966 <fdevopen+0x84>
18f6: 6e e0 ldi r22, 0x0E ; 14
18f8: 70 e0 ldi r23, 0x00 ; 0
18fa: 81 e0 ldi r24, 0x01 ; 1
18fc: 90 e0 ldi r25, 0x00 ; 0
18fe: 0e 94 b8 0c call 0x1970 <calloc>
1902: fc 01 movw r30, r24
1904: 89 2b or r24, r25
1906: 71 f1 breq .+92 ; 0x1964 <fdevopen+0x82>
1908: 80 e8 ldi r24, 0x80 ; 128
190a: 83 83 std Z+3, r24 ; 0x03
190c: 20 97 sbiw r28, 0x00 ; 0
190e: 71 f0 breq .+28 ; 0x192c <fdevopen+0x4a>
1910: d3 87 std Z+11, r29 ; 0x0b
1912: c2 87 std Z+10, r28 ; 0x0a
1914: 81 e8 ldi r24, 0x81 ; 129
1916: 83 83 std Z+3, r24 ; 0x03
1918: 80 91 d0 01 lds r24, 0x01D0
191c: 90 91 d1 01 lds r25, 0x01D1
1920: 89 2b or r24, r25
1922: 21 f4 brne .+8 ; 0x192c <fdevopen+0x4a>
1924: f0 93 d1 01 sts 0x01D1, r31
1928: e0 93 d0 01 sts 0x01D0, r30
192c: 01 15 cp r16, r1
192e: 11 05 cpc r17, r1
1930: c9 f0 breq .+50 ; 0x1964 <fdevopen+0x82>
1932: 11 87 std Z+9, r17 ; 0x09
1934: 00 87 std Z+8, r16 ; 0x08
1936: 83 81 ldd r24, Z+3 ; 0x03
1938: 82 60 ori r24, 0x02 ; 2
193a: 83 83 std Z+3, r24 ; 0x03
193c: 80 91 d2 01 lds r24, 0x01D2
1940: 90 91 d3 01 lds r25, 0x01D3
1944: 89 2b or r24, r25
1946: 71 f4 brne .+28 ; 0x1964 <fdevopen+0x82>
1948: f0 93 d3 01 sts 0x01D3, r31
194c: e0 93 d2 01 sts 0x01D2, r30
1950: 80 91 d4 01 lds r24, 0x01D4
1954: 90 91 d5 01 lds r25, 0x01D5
1958: 89 2b or r24, r25
195a: 21 f4 brne .+8 ; 0x1964 <fdevopen+0x82>
195c: f0 93 d5 01 sts 0x01D5, r31
1960: e0 93 d4 01 sts 0x01D4, r30
1964: cf 01 movw r24, r30
1966: df 91 pop r29
1968: cf 91 pop r28
196a: 1f 91 pop r17
196c: 0f 91 pop r16
196e: 08 95 ret
00001970 <calloc>:
1970: 0f 93 push r16
1972: 1f 93 push r17
1974: cf 93 push r28
1976: df 93 push r29
1978: 86 9f mul r24, r22
197a: 80 01 movw r16, r0
197c: 87 9f mul r24, r23
197e: 10 0d add r17, r0
1980: 96 9f mul r25, r22
1982: 10 0d add r17, r0
1984: 11 24 eor r1, r1
1986: c8 01 movw r24, r16
1988: 0e 94 d4 0c call 0x19a8 <malloc>
198c: ec 01 movw r28, r24
198e: 00 97 sbiw r24, 0x00 ; 0
1990: 29 f0 breq .+10 ; 0x199c <calloc+0x2c>
1992: a8 01 movw r20, r16
1994: 60 e0 ldi r22, 0x00 ; 0
1996: 70 e0 ldi r23, 0x00 ; 0
1998: 0e 94 ca 0d call 0x1b94 <memset>
199c: ce 01 movw r24, r28
199e: df 91 pop r29
19a0: cf 91 pop r28
19a2: 1f 91 pop r17
19a4: 0f 91 pop r16
19a6: 08 95 ret
000019a8 <malloc>:
19a8: cf 93 push r28
19aa: df 93 push r29
19ac: ac 01 movw r20, r24
19ae: 02 97 sbiw r24, 0x02 ; 2
19b0: 10 f4 brcc .+4 ; 0x19b6 <malloc+0xe>
19b2: 42 e0 ldi r20, 0x02 ; 2
19b4: 50 e0 ldi r21, 0x00 ; 0
19b6: 20 e0 ldi r18, 0x00 ; 0
19b8: 30 e0 ldi r19, 0x00 ; 0
19ba: a0 91 d8 01 lds r26, 0x01D8
19be: b0 91 d9 01 lds r27, 0x01D9
19c2: bd 01 movw r22, r26
19c4: f9 01 movw r30, r18
19c6: 10 97 sbiw r26, 0x00 ; 0
19c8: 09 f4 brne .+2 ; 0x19cc <malloc+0x24>
19ca: 4c c0 rjmp .+152 ; 0x1a64 <malloc+0xbc>
19cc: 8d 91 ld r24, X+
19ce: 9c 91 ld r25, X
19d0: 11 97 sbiw r26, 0x01 ; 1
19d2: 84 17 cp r24, r20
19d4: 95 07 cpc r25, r21
19d6: 31 f1 breq .+76 ; 0x1a24 <malloc+0x7c>
19d8: 48 17 cp r20, r24
19da: 59 07 cpc r21, r25
19dc: 38 f4 brcc .+14 ; 0x19ec <malloc+0x44>
19de: 21 15 cp r18, r1
19e0: 31 05 cpc r19, r1
19e2: 19 f0 breq .+6 ; 0x19ea <malloc+0x42>
19e4: 82 17 cp r24, r18
19e6: 93 07 cpc r25, r19
19e8: 08 f4 brcc .+2 ; 0x19ec <malloc+0x44>
19ea: 9c 01 movw r18, r24
19ec: fd 01 movw r30, r26
19ee: a2 81 ldd r26, Z+2 ; 0x02
19f0: b3 81 ldd r27, Z+3 ; 0x03
19f2: 10 97 sbiw r26, 0x00 ; 0
19f4: 59 f7 brne .-42 ; 0x19cc <malloc+0x24>
19f6: 21 15 cp r18, r1
19f8: 31 05 cpc r19, r1
19fa: a1 f1 breq .+104 ; 0x1a64 <malloc+0xbc>
19fc: c9 01 movw r24, r18
19fe: 84 1b sub r24, r20
1a00: 95 0b sbc r25, r21
1a02: 04 97 sbiw r24, 0x04 ; 4
1a04: 08 f4 brcc .+2 ; 0x1a08 <malloc+0x60>
1a06: a9 01 movw r20, r18
1a08: db 01 movw r26, r22
1a0a: e0 e0 ldi r30, 0x00 ; 0
1a0c: f0 e0 ldi r31, 0x00 ; 0
1a0e: 10 97 sbiw r26, 0x00 ; 0
1a10: 49 f1 breq .+82 ; 0x1a64 <malloc+0xbc>
1a12: 8d 91 ld r24, X+
1a14: 9c 91 ld r25, X
1a16: 11 97 sbiw r26, 0x01 ; 1
1a18: 82 17 cp r24, r18
1a1a: 93 07 cpc r25, r19
1a1c: f9 f4 brne .+62 ; 0x1a5c <malloc+0xb4>
1a1e: 42 17 cp r20, r18
1a20: 53 07 cpc r21, r19
1a22: 79 f4 brne .+30 ; 0x1a42 <malloc+0x9a>
1a24: ed 01 movw r28, r26
1a26: 8a 81 ldd r24, Y+2 ; 0x02
1a28: 9b 81 ldd r25, Y+3 ; 0x03
1a2a: 30 97 sbiw r30, 0x00 ; 0
1a2c: 19 f0 breq .+6 ; 0x1a34 <malloc+0x8c>
1a2e: 93 83 std Z+3, r25 ; 0x03
1a30: 82 83 std Z+2, r24 ; 0x02
1a32: 04 c0 rjmp .+8 ; 0x1a3c <malloc+0x94>
1a34: 90 93 d9 01 sts 0x01D9, r25
1a38: 80 93 d8 01 sts 0x01D8, r24
1a3c: cd 01 movw r24, r26
1a3e: 02 96 adiw r24, 0x02 ; 2
1a40: 4a c0 rjmp .+148 ; 0x1ad6 <malloc+0x12e>
1a42: 24 1b sub r18, r20
1a44: 35 0b sbc r19, r21
1a46: fd 01 movw r30, r26
1a48: e2 0f add r30, r18
1a4a: f3 1f adc r31, r19
1a4c: 41 93 st Z+, r20
1a4e: 51 93 st Z+, r21
1a50: 22 50 subi r18, 0x02 ; 2
1a52: 30 40 sbci r19, 0x00 ; 0
1a54: 2d 93 st X+, r18
1a56: 3c 93 st X, r19
1a58: cf 01 movw r24, r30
1a5a: 3d c0 rjmp .+122 ; 0x1ad6 <malloc+0x12e>
1a5c: fd 01 movw r30, r26
1a5e: a2 81 ldd r26, Z+2 ; 0x02
1a60: b3 81 ldd r27, Z+3 ; 0x03
1a62: d5 cf rjmp .-86 ; 0x1a0e <malloc+0x66>
1a64: 80 91 d6 01 lds r24, 0x01D6
1a68: 90 91 d7 01 lds r25, 0x01D7
1a6c: 89 2b or r24, r25
1a6e: 41 f4 brne .+16 ; 0x1a80 <malloc+0xd8>
1a70: 80 91 80 00 lds r24, 0x0080
1a74: 90 91 81 00 lds r25, 0x0081
1a78: 90 93 d7 01 sts 0x01D7, r25
1a7c: 80 93 d6 01 sts 0x01D6, r24
1a80: e0 91 7e 00 lds r30, 0x007E
1a84: f0 91 7f 00 lds r31, 0x007F
1a88: 30 97 sbiw r30, 0x00 ; 0
1a8a: 41 f4 brne .+16 ; 0x1a9c <malloc+0xf4>
1a8c: ed b7 in r30, 0x3d ; 61
1a8e: fe b7 in r31, 0x3e ; 62
1a90: 80 91 82 00 lds r24, 0x0082
1a94: 90 91 83 00 lds r25, 0x0083
1a98: e8 1b sub r30, r24
1a9a: f9 0b sbc r31, r25
1a9c: a0 91 d6 01 lds r26, 0x01D6
1aa0: b0 91 d7 01 lds r27, 0x01D7
1aa4: 9f 01 movw r18, r30
1aa6: 2a 1b sub r18, r26
1aa8: 3b 0b sbc r19, r27
1aaa: 24 17 cp r18, r20
1aac: 35 07 cpc r19, r21
1aae: 88 f0 brcs .+34 ; 0x1ad2 <malloc+0x12a>
1ab0: ca 01 movw r24, r20
1ab2: 02 96 adiw r24, 0x02 ; 2
1ab4: 28 17 cp r18, r24
1ab6: 39 07 cpc r19, r25
1ab8: 60 f0 brcs .+24 ; 0x1ad2 <malloc+0x12a>
1aba: cd 01 movw r24, r26
1abc: 84 0f add r24, r20
1abe: 95 1f adc r25, r21
1ac0: 02 96 adiw r24, 0x02 ; 2
1ac2: 90 93 d7 01 sts 0x01D7, r25
1ac6: 80 93 d6 01 sts 0x01D6, r24
1aca: 4d 93 st X+, r20
1acc: 5d 93 st X+, r21
1ace: cd 01 movw r24, r26
1ad0: 02 c0 rjmp .+4 ; 0x1ad6 <malloc+0x12e>
1ad2: 80 e0 ldi r24, 0x00 ; 0
1ad4: 90 e0 ldi r25, 0x00 ; 0
1ad6: df 91 pop r29
1ad8: cf 91 pop r28
1ada: 08 95 ret
00001adc <free>:
1adc: cf 93 push r28
1ade: df 93 push r29
1ae0: 00 97 sbiw r24, 0x00 ; 0
1ae2: 09 f4 brne .+2 ; 0x1ae6 <free+0xa>
1ae4: 54 c0 rjmp .+168 ; 0x1b8e <free+0xb2>
1ae6: dc 01 movw r26, r24
1ae8: 12 97 sbiw r26, 0x02 ; 2
1aea: ed 01 movw r28, r26
1aec: 1b 82 std Y+3, r1 ; 0x03
1aee: 1a 82 std Y+2, r1 ; 0x02
1af0: 80 91 d8 01 lds r24, 0x01D8
1af4: 90 91 d9 01 lds r25, 0x01D9
1af8: 00 97 sbiw r24, 0x00 ; 0
1afa: 21 f1 breq .+72 ; 0x1b44 <free+0x68>
1afc: fc 01 movw r30, r24
1afe: 40 e0 ldi r20, 0x00 ; 0
1b00: 50 e0 ldi r21, 0x00 ; 0
1b02: ea 17 cp r30, r26
1b04: fb 07 cpc r31, r27
1b06: 18 f1 brcs .+70 ; 0x1b4e <free+0x72>
1b08: ed 01 movw r28, r26
1b0a: fb 83 std Y+3, r31 ; 0x03
1b0c: ea 83 std Y+2, r30 ; 0x02
1b0e: 2d 91 ld r18, X+
1b10: 3c 91 ld r19, X
1b12: 11 97 sbiw r26, 0x01 ; 1
1b14: c2 0f add r28, r18
1b16: d3 1f adc r29, r19
1b18: ce 01 movw r24, r28
1b1a: 02 96 adiw r24, 0x02 ; 2
1b1c: 8e 17 cp r24, r30
1b1e: 9f 07 cpc r25, r31
1b20: 71 f4 brne .+28 ; 0x1b3e <free+0x62>
1b22: 8a 81 ldd r24, Y+2 ; 0x02
1b24: 9b 81 ldd r25, Y+3 ; 0x03
1b26: 28 0f add r18, r24
1b28: 39 1f adc r19, r25
1b2a: 2e 5f subi r18, 0xFE ; 254
1b2c: 3f 4f sbci r19, 0xFF ; 255
1b2e: 11 96 adiw r26, 0x01 ; 1
1b30: 3c 93 st X, r19
1b32: 2e 93 st -X, r18
1b34: 82 81 ldd r24, Z+2 ; 0x02
1b36: 93 81 ldd r25, Z+3 ; 0x03
1b38: fd 01 movw r30, r26
1b3a: 93 83 std Z+3, r25 ; 0x03
1b3c: 82 83 std Z+2, r24 ; 0x02
1b3e: 41 15 cp r20, r1
1b40: 51 05 cpc r21, r1
1b42: 59 f4 brne .+22 ; 0x1b5a <free+0x7e>
1b44: b0 93 d9 01 sts 0x01D9, r27
1b48: a0 93 d8 01 sts 0x01D8, r26
1b4c: 20 c0 rjmp .+64 ; 0x1b8e <free+0xb2>
1b4e: af 01 movw r20, r30
1b50: 02 80 ldd r0, Z+2 ; 0x02
1b52: f3 81 ldd r31, Z+3 ; 0x03
1b54: e0 2d mov r30, r0
1b56: 30 97 sbiw r30, 0x00 ; 0
1b58: a1 f6 brne .-88 ; 0x1b02 <free+0x26>
1b5a: ea 01 movw r28, r20
1b5c: bb 83 std Y+3, r27 ; 0x03
1b5e: aa 83 std Y+2, r26 ; 0x02
1b60: ca 01 movw r24, r20
1b62: 02 96 adiw r24, 0x02 ; 2
1b64: 28 81 ld r18, Y
1b66: 39 81 ldd r19, Y+1 ; 0x01
1b68: 82 0f add r24, r18
1b6a: 93 1f adc r25, r19
1b6c: 8a 17 cp r24, r26
1b6e: 9b 07 cpc r25, r27
1b70: 71 f4 brne .+28 ; 0x1b8e <free+0xb2>
1b72: 8d 91 ld r24, X+
1b74: 9c 91 ld r25, X
1b76: 11 97 sbiw r26, 0x01 ; 1
1b78: 28 0f add r18, r24
1b7a: 39 1f adc r19, r25
1b7c: 2e 5f subi r18, 0xFE ; 254
1b7e: 3f 4f sbci r19, 0xFF ; 255
1b80: 39 83 std Y+1, r19 ; 0x01
1b82: 28 83 st Y, r18
1b84: fd 01 movw r30, r26
1b86: 82 81 ldd r24, Z+2 ; 0x02
1b88: 93 81 ldd r25, Z+3 ; 0x03
1b8a: 9b 83 std Y+3, r25 ; 0x03
1b8c: 8a 83 std Y+2, r24 ; 0x02
1b8e: df 91 pop r29
1b90: cf 91 pop r28
1b92: 08 95 ret
00001b94 <memset>:
1b94: dc 01 movw r26, r24
1b96: 40 ff sbrs r20, 0
1b98: 03 c0 rjmp .+6 ; 0x1ba0 <memset+0xc>
1b9a: 01 c0 rjmp .+2 ; 0x1b9e <memset+0xa>
1b9c: 6d 93 st X+, r22
1b9e: 6d 93 st X+, r22
1ba0: 42 50 subi r20, 0x02 ; 2
1ba2: 50 40 sbci r21, 0x00 ; 0
1ba4: d8 f7 brcc .-10 ; 0x1b9c <memset+0x8>
1ba6: 08 95 ret
00001ba8 <__udivmodsi4>:
1ba8: a1 e2 ldi r26, 0x21 ; 33
1baa: 1a 2e mov r1, r26
1bac: aa 1b sub r26, r26
1bae: bb 1b sub r27, r27
1bb0: fd 01 movw r30, r26
1bb2: 0d c0 rjmp .+26 ; 0x1bce <__udivmodsi4_ep>
00001bb4 <__udivmodsi4_loop>:
1bb4: aa 1f adc r26, r26
1bb6: bb 1f adc r27, r27
1bb8: ee 1f adc r30, r30
1bba: ff 1f adc r31, r31
1bbc: a2 17 cp r26, r18
1bbe: b3 07 cpc r27, r19
1bc0: e4 07 cpc r30, r20
1bc2: f5 07 cpc r31, r21
1bc4: 20 f0 brcs .+8 ; 0x1bce <__udivmodsi4_ep>
1bc6: a2 1b sub r26, r18
1bc8: b3 0b sbc r27, r19
1bca: e4 0b sbc r30, r20
1bcc: f5 0b sbc r31, r21
00001bce <__udivmodsi4_ep>:
1bce: 66 1f adc r22, r22
1bd0: 77 1f adc r23, r23
1bd2: 88 1f adc r24, r24
1bd4: 99 1f adc r25, r25
1bd6: 1a 94 dec r1
1bd8: 69 f7 brne .-38 ; 0x1bb4 <__udivmodsi4_loop>
1bda: 60 95 com r22
1bdc: 70 95 com r23
1bde: 80 95 com r24
1be0: 90 95 com r25
1be2: 9b 01 movw r18, r22
1be4: ac 01 movw r20, r24
1be6: bd 01 movw r22, r26
1be8: cf 01 movw r24, r30
1bea: 08 95 ret