Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | ingob | 1 | |
2 | main.elf: file format elf32-avr |
||
3 | |||
4 | Sections: |
||
5 | Idx Name Size VMA LMA File off Algn |
||
6 | |||
7 | CONTENTS, ALLOC, LOAD, READONLY, CODE |
||
8 | 1 .data 00000024 00800060 00001bec 00001c80 2**0 |
||
9 | CONTENTS, ALLOC, LOAD, DATA |
||
10 | 2 .bss 00000156 00800084 00800084 00001ca4 2**0 |
||
11 | ALLOC |
||
12 | 3 .noinit 00000000 008001da 008001da 00001ca4 2**0 |
||
13 | CONTENTS |
||
14 | 4 .eeprom 00000000 00810000 00810000 00001ca4 2**0 |
||
15 | CONTENTS |
||
16 | 5 .stab 0000036c 00000000 00000000 00001ca4 2**2 |
||
17 | CONTENTS, READONLY, DEBUGGING |
||
18 | 6 .stabstr 00000084 00000000 00000000 00002010 2**0 |
||
19 | CONTENTS, READONLY, DEBUGGING |
||
20 | 7 .debug_aranges 000000b4 00000000 00000000 00002094 2**0 |
||
21 | CONTENTS, READONLY, DEBUGGING |
||
22 | 8 .debug_pubnames 000006f5 00000000 00000000 00002148 2**0 |
||
23 | CONTENTS, READONLY, DEBUGGING |
||
24 | 9 .debug_info 00001a41 00000000 00000000 0000283d 2**0 |
||
25 | CONTENTS, READONLY, DEBUGGING |
||
26 | 10 .debug_abbrev 00000774 00000000 00000000 0000427e 2**0 |
||
27 | CONTENTS, READONLY, DEBUGGING |
||
28 | 11 .debug_line 0000169d 00000000 00000000 000049f2 2**0 |
||
29 | CONTENTS, READONLY, DEBUGGING |
||
30 | 12 .debug_str 00000874 00000000 00000000 0000608f 2**0 |
||
31 | CONTENTS, READONLY, DEBUGGING |
||
32 | Disassembly of section .text: |
||
33 | |||
34 | 00000000 <__vectors>: |
||
35 | 0: 0c 94 85 00 jmp 0x10a <__init> |
||
36 | 4: 0c 94 7e 0b jmp 0x16fc <__vector_1> |
||
37 | 8: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
38 | c: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
39 | 10: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
40 | 14: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
41 | 18: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
42 | 1c: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
43 | 20: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
44 | 24: 0c 94 67 09 jmp 0x12ce <__vector_9> |
||
45 | 28: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
46 | 2c: 0c 94 96 0b jmp 0x172c <__vector_11> |
||
47 | 30: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
48 | 34: 0c 94 18 02 jmp 0x430 <__vector_13> |
||
49 | 38: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
50 | 3c: 0c 94 e3 01 jmp 0x3c6 <__vector_15> |
||
51 | 40: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
52 | 44: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
53 | 48: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
54 | 4c: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
55 | 50: 0c 94 a0 00 jmp 0x140 <__bad_interrupt> |
||
56 | |||
57 | 00000054 <__ctors_end>: |
||
58 | 54: 20 2d mov r18, r0 |
||
59 | 56: 2d 20 and r2, r13 |
||
60 | 58: 52 65 ori r21, 0x52 ; 82 |
||
61 | 5a: 6d 6f ori r22, 0xFD ; 253 |
||
62 | 5c: 74 65 ori r23, 0x54 ; 84 |
||
63 | 5e: 20 20 and r2, r0 |
||
64 | 60: 2d 2d mov r18, r13 |
||
65 | 62: 20 20 and r2, r0 |
||
66 | 64: 20 20 and r2, r0 |
||
67 | 66: 20 20 and r2, r0 |
||
68 | ... |
||
69 | |||
70 | 00000069 <__c.1>: |
||
71 | 69: 20 2d 2d 20 44 69 73 70 6c 61 79 20 2d 2d 20 20 -- Display -- |
||
72 | 79: 20 20 20 20 00 . |
||
73 | |||
74 | 0000007e <__c.2>: |
||
75 | 7e: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |
||
76 | 8e: 20 20 20 20 00 . |
||
77 | |||
78 | 00000093 <__c.3>: |
||
79 | 93: 20 20 77 77 77 2e 4d 69 63 72 6f 53 50 53 2e 63 www.MicroSPS.c |
||
80 | a3: 6f 6d 20 20 00 om . |
||
81 | |||
82 | 000000a8 <__c.2>: |
||
83 | a8: 25 73 00 %s. |
||
84 | |||
85 | 000000ab <__c.3>: |
||
86 | ab: 25 73 00 %s. |
||
87 | |||
88 | 000000ae <__c.4>: |
||
89 | ae: 25 73 00 %s. |
||
90 | |||
91 | 000000b1 <__c.5>: |
||
92 | b1: 25 73 00 %s. |
||
93 | |||
94 | 000000b4 <__c.3>: |
||
95 | b4: 56 65 72 62 69 6e 64 65 6e 20 6d 69 74 00 Verbinden mit. |
||
96 | |||
97 | 000000c2 <__c.4>: |
||
98 | c2: 4d 69 63 72 6f 53 50 53 3a 25 32 69 20 00 MicroSPS:%2i . |
||
99 | |||
100 | 000000d0 <__c.5>: |
||
101 | d0: 4d 61 78 20 41 64 72 65 73 73 65 00 Max Adresse. |
||
102 | |||
103 | 000000dc <__c.6>: |
||
104 | dc: 25 32 69 20 00 %2i . |
||
105 | |||
106 | 000000e1 <__c.7>: |
||
107 | e1: 43 68 65 63 6b 73 75 6d 00 Checksum. |
||
108 | |||
109 | 000000ea <__c.8>: |
||
110 | ea: 45 72 72 6f 72 73 3a 25 35 69 20 00 Errors:%5i . |
||
111 | |||
112 | 000000f6 <__c.9>: |
||
113 | f6: 44 69 73 70 6c 61 79 00 Display. |
||
114 | |||
115 | 000000fe <__c.10>: |
||
116 | fe: 5a 65 69 6c 65 6e 3a 25 31 69 20 00 Zeilen:%1i . |
||
117 | |||
118 | 0000010a <__init>: |
||
119 | 10a: 11 24 eor r1, r1 |
||
120 | 10c: 1f be out 0x3f, r1 ; 63 |
||
121 | 10e: cf e5 ldi r28, 0x5F ; 95 |
||
122 | 110: d8 e0 ldi r29, 0x08 ; 8 |
||
123 | 112: de bf out 0x3e, r29 ; 62 |
||
124 | 114: cd bf out 0x3d, r28 ; 61 |
||
125 | |||
126 | 00000116 <__do_copy_data>: |
||
127 | 116: 10 e0 ldi r17, 0x00 ; 0 |
||
128 | 118: a0 e6 ldi r26, 0x60 ; 96 |
||
129 | 11a: b0 e0 ldi r27, 0x00 ; 0 |
||
130 | 11c: ec ee ldi r30, 0xEC ; 236 |
||
131 | 11e: fb e1 ldi r31, 0x1B ; 27 |
||
132 | 120: 02 c0 rjmp .+4 ; 0x126 <.do_copy_data_start> |
||
133 | |||
134 | 00000122 <.do_copy_data_loop>: |
||
135 | 122: 05 90 lpm r0, Z+ |
||
136 | 124: 0d 92 st X+, r0 |
||
137 | |||
138 | 00000126 <.do_copy_data_start>: |
||
139 | 126: a4 38 cpi r26, 0x84 ; 132 |
||
140 | 128: b1 07 cpc r27, r17 |
||
141 | 12a: d9 f7 brne .-10 ; 0x122 <.do_copy_data_loop> |
||
142 | |||
143 | 0000012c <__do_clear_bss>: |
||
144 | 12c: 11 e0 ldi r17, 0x01 ; 1 |
||
145 | 12e: a4 e8 ldi r26, 0x84 ; 132 |
||
146 | 130: b0 e0 ldi r27, 0x00 ; 0 |
||
147 | 132: 01 c0 rjmp .+2 ; 0x136 <.do_clear_bss_start> |
||
148 | |||
149 | 00000134 <.do_clear_bss_loop>: |
||
150 | 134: 1d 92 st X+, r1 |
||
151 | |||
152 | 00000136 <.do_clear_bss_start>: |
||
153 | 136: aa 3d cpi r26, 0xDA ; 218 |
||
154 | 138: b1 07 cpc r27, r17 |
||
155 | 13a: e1 f7 brne .-8 ; 0x134 <.do_clear_bss_loop> |
||
156 | 13c: 0c 94 e5 00 jmp 0x1ca <main> |
||
157 | |||
158 | 00000140 <__bad_interrupt>: |
||
159 | 140: 0c 94 00 00 jmp 0x0 <__vectors> |
||
160 | |||
161 | 00000144 <Sekundentakt_Init>: |
||
162 | unsigned int IntervallDebug = 250, IntervallDisplay = 120; |
||
163 | |||
164 | void Sekundentakt_Init(void) |
||
165 | { |
||
166 | _SekTimer = SetDelay(1000); |
||
167 | 144: 88 ee ldi r24, 0xE8 ; 232 |
||
168 | 146: 93 e0 ldi r25, 0x03 ; 3 |
||
169 | 148: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
170 | 14c: 90 93 91 00 sts 0x0091, r25 |
||
171 | 150: 80 93 90 00 sts 0x0090, r24 |
||
172 | 154: 08 95 ret |
||
173 | |||
174 | 00000156 <Sekundentakt>: |
||
175 | } |
||
176 | |||
177 | void Sekundentakt(void) |
||
178 | { |
||
179 | if(CheckDelay(_SekTimer)) |
||
180 | 156: 80 91 90 00 lds r24, 0x0090 |
||
181 | 15a: 90 91 91 00 lds r25, 0x0091 |
||
182 | 15e: 0e 94 b1 09 call 0x1362 <CheckDelay> |
||
183 | 162: 88 23 and r24, r24 |
||
184 | 164: 31 f1 breq .+76 ; 0x1b2 <Sekundentakt+0x5c> |
||
185 | { |
||
186 | GetKeyboard(); |
||
187 | 166: 0e 94 d2 09 call 0x13a4 <GetKeyboard> |
||
188 | _SekTimer += 1000; |
||
189 | 16a: 80 91 90 00 lds r24, 0x0090 |
||
190 | 16e: 90 91 91 00 lds r25, 0x0091 |
||
191 | 172: 88 51 subi r24, 0x18 ; 24 |
||
192 | 174: 9c 4f sbci r25, 0xFC ; 252 |
||
193 | 176: 90 93 91 00 sts 0x0091, r25 |
||
194 | 17a: 80 93 90 00 sts 0x0090, r24 |
||
195 | if(!CntDatensaetzeProSekunde) UebertragungUnterbrochen = 1; else UebertragungUnterbrochen = 0; |
||
196 | 17e: 80 91 66 00 lds r24, 0x0066 |
||
197 | 182: 88 23 and r24, r24 |
||
198 | 184: 21 f4 brne .+8 ; 0x18e <Sekundentakt+0x38> |
||
199 | 186: 81 e0 ldi r24, 0x01 ; 1 |
||
200 | 188: 80 93 84 00 sts 0x0084, r24 |
||
201 | 18c: 02 c0 rjmp .+4 ; 0x192 <Sekundentakt+0x3c> |
||
202 | 18e: 10 92 84 00 sts 0x0084, r1 |
||
203 | CntDatensaetzeProSekunde = 0; |
||
204 | 192: 10 92 66 00 sts 0x0066, r1 |
||
205 | if(++Sekunde == 60) |
||
206 | 196: 80 91 8d 00 lds r24, 0x008D |
||
207 | 19a: 8f 5f subi r24, 0xFF ; 255 |
||
208 | 19c: 80 93 8d 00 sts 0x008D, r24 |
||
209 | 1a0: 8c 33 cpi r24, 0x3C ; 60 |
||
210 | 1a2: 39 f4 brne .+14 ; 0x1b2 <Sekundentakt+0x5c> |
||
211 | { |
||
212 | Sekunde = 0; |
||
213 | 1a4: 10 92 8d 00 sts 0x008D, r1 |
||
214 | Minute++; |
||
215 | 1a8: 80 91 8c 00 lds r24, 0x008C |
||
216 | 1ac: 8f 5f subi r24, 0xFF ; 255 |
||
217 | 1ae: 80 93 8c 00 sts 0x008C, r24 |
||
218 | 1b2: 08 95 ret |
||
219 | |||
220 | 000001b4 <Init>: |
||
221 | } |
||
222 | } |
||
223 | } |
||
224 | |||
225 | void Init(void) |
||
226 | { |
||
227 | VersionInfo.Hauptversion = 0; |
||
228 | 1b4: 10 92 c9 00 sts 0x00C9, r1 |
||
229 | VersionInfo.Nebenversion = 99; |
||
230 | 1b8: 83 e6 ldi r24, 0x63 ; 99 |
||
231 | 1ba: 80 93 ca 00 sts 0x00CA, r24 |
||
232 | VersionInfo.PCKompatibel = 1; |
||
233 | 1be: 81 e0 ldi r24, 0x01 ; 1 |
||
234 | 1c0: 80 93 cb 00 sts 0x00CB, r24 |
||
235 | VersionInfo.Commercial = 0x00; |
||
236 | 1c4: 10 92 cc 00 sts 0x00CC, r1 |
||
237 | 1c8: 08 95 ret |
||
238 | |||
239 | 000001ca <main>: |
||
240 | } |
||
241 | |||
242 | #define MENU 0 |
||
243 | #define REMOTE 1 |
||
244 | |||
245 | //############################################################################ |
||
246 | //Hauptprogramm |
||
247 | void main (void) |
||
248 | //############################################################################ |
||
249 | { |
||
250 | 1ca: ca e5 ldi r28, 0x5A ; 90 |
||
251 | 1cc: d8 e0 ldi r29, 0x08 ; 8 |
||
252 | 1ce: de bf out 0x3e, r29 ; 62 |
||
253 | 1d0: cd bf out 0x3d, r28 ; 61 |
||
254 | char z,txt[]= {"Moin"},key,key_old = 255; |
||
255 | 1d2: de 01 movw r26, r28 |
||
256 | 1d4: 11 96 adiw r26, 0x01 ; 1 |
||
257 | 1d6: e7 e6 ldi r30, 0x67 ; 103 |
||
258 | 1d8: f0 e0 ldi r31, 0x00 ; 0 |
||
259 | 1da: 85 e0 ldi r24, 0x05 ; 5 |
||
260 | 1dc: 01 90 ld r0, Z+ |
||
261 | 1de: 0d 92 st X+, r0 |
||
262 | 1e0: 81 50 subi r24, 0x01 ; 1 |
||
263 | 1e2: e1 f7 brne .-8 ; 0x1dc <main+0x12> |
||
264 | int test = 0; |
||
265 | unsigned int DelayTast; |
||
266 | unsigned int DelayDaten,DelayDisplay; |
||
267 | |||
268 | |||
269 | unsigned char mode = REMOTE; |
||
270 | 1e4: 91 e0 ldi r25, 0x01 ; 1 |
||
271 | 1e6: b9 2e mov r11, r25 |
||
272 | unsigned char neueDatenuebertragung = 1; |
||
273 | |||
274 | UART_Init(); |
||
275 | 1e8: 0e 94 cc 04 call 0x998 <UART_Init> |
||
276 | LCD_Init(); |
||
277 | 1ec: 0e 94 1f 06 call 0xc3e <LCD_Init> |
||
278 | UART_Init(); |
||
279 | 1f0: 0e 94 cc 04 call 0x998 <UART_Init> |
||
280 | Timer1_Init(); |
||
281 | 1f4: 0e 94 9e 09 call 0x133c <Timer1_Init> |
||
282 | Keyboard_Init(); |
||
283 | 1f8: 0e 94 c9 09 call 0x1392 <Keyboard_Init> |
||
284 | Sekundentakt_Init(); |
||
285 | 1fc: 0e 94 a2 00 call 0x144 <Sekundentakt_Init> |
||
286 | InitIR(); |
||
287 | 200: 0e 94 67 0b call 0x16ce <InitIR> |
||
288 | ADC_Init(); |
||
289 | 204: 0e 94 42 0c call 0x1884 <ADC_Init> |
||
290 | Init(); |
||
291 | 208: 0e 94 da 00 call 0x1b4 <Init> |
||
292 | |||
293 | sei ();//Globale Interrupts Einschalten |
||
294 | 20c: 78 94 sei |
||
295 | DDRB = 0xff; |
||
296 | 20e: 8f ef ldi r24, 0xFF ; 255 |
||
297 | 210: 87 bb out 0x17, r24 ; 23 |
||
298 | PORTB = 0x00; |
||
299 | 212: 18 ba out 0x18, r1 ; 24 |
||
300 | LCD_Clear; |
||
301 | 214: 81 e0 ldi r24, 0x01 ; 1 |
||
302 | 216: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
303 | 21a: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
304 | |||
305 | /* while(1) |
||
306 | */ |
||
307 | |||
308 | DelayTast = SetDelay(80); |
||
309 | 21e: 80 e5 ldi r24, 0x50 ; 80 |
||
310 | 220: 90 e0 ldi r25, 0x00 ; 0 |
||
311 | 222: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
312 | 226: 7c 01 movw r14, r24 |
||
313 | DelayDaten = SetDelay(200); |
||
314 | 228: 88 ec ldi r24, 0xC8 ; 200 |
||
315 | 22a: 90 e0 ldi r25, 0x00 ; 0 |
||
316 | 22c: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
317 | 230: 8c 01 movw r16, r24 |
||
318 | DelayDisplay = SetDelay(300); |
||
319 | 232: 8c e2 ldi r24, 0x2C ; 44 |
||
320 | 234: 91 e0 ldi r25, 0x01 ; 1 |
||
321 | 236: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
322 | 23a: 6c 01 movw r12, r24 |
||
323 | ClearIntervalle(); |
||
324 | 23c: 0e 94 2e 05 call 0xa5c <ClearIntervalle> |
||
325 | while (1) |
||
326 | { |
||
327 | if(mode == MENU) |
||
328 | 240: bb 20 and r11, r11 |
||
329 | 242: 11 f5 brne .+68 ; 0x288 <main+0xbe> |
||
330 | { |
||
331 | Delay_ms(10); |
||
332 | 244: 8a e0 ldi r24, 0x0A ; 10 |
||
333 | 246: 90 e0 ldi r25, 0x00 ; 0 |
||
334 | 248: 0e 94 bc 09 call 0x1378 <Delay_ms> |
||
335 | key = GetKeyboard(); |
||
336 | 24c: 0e 94 d2 09 call 0x13a4 <GetKeyboard> |
||
337 | Menu(key); |
||
338 | 250: 99 27 eor r25, r25 |
||
339 | 252: 0e 94 64 0a call 0x14c8 <Menu> |
||
340 | if(_TASTE5) |
||
341 | 256: cb 9b sbis 0x19, 3 ; 25 |
||
342 | 258: f5 cf rjmp .-22 ; 0x244 <main+0x7a> |
||
343 | { |
||
344 | do { Delay_ms(10);} while(_TASTE5); |
||
345 | 25a: 8a e0 ldi r24, 0x0A ; 10 |
||
346 | 25c: 90 e0 ldi r25, 0x00 ; 0 |
||
347 | 25e: 0e 94 bc 09 call 0x1378 <Delay_ms> |
||
348 | 262: cb 99 sbic 0x19, 3 ; 25 |
||
349 | 264: fa cf rjmp .-12 ; 0x25a <main+0x90> |
||
350 | mode = REMOTE; |
||
351 | 266: 81 e0 ldi r24, 0x01 ; 1 |
||
352 | 268: b8 2e mov r11, r24 |
||
353 | DelayTast = SetDelay(100); |
||
354 | 26a: 84 e6 ldi r24, 0x64 ; 100 |
||
355 | 26c: 90 e0 ldi r25, 0x00 ; 0 |
||
356 | 26e: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
357 | 272: 7c 01 movw r14, r24 |
||
358 | DelayDaten = SetDelay(200); |
||
359 | 274: 88 ec ldi r24, 0xC8 ; 200 |
||
360 | 276: 90 e0 ldi r25, 0x00 ; 0 |
||
361 | 278: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
362 | 27c: 8c 01 movw r16, r24 |
||
363 | LCD_Clear; |
||
364 | 27e: 8b 2d mov r24, r11 |
||
365 | 280: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
366 | 284: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
367 | } |
||
368 | } |
||
369 | else |
||
370 | if(mode == REMOTE) |
||
371 | 288: 81 e0 ldi r24, 0x01 ; 1 |
||
372 | 28a: b8 16 cp r11, r24 |
||
373 | 28c: c9 f6 brne .-78 ; 0x240 <main+0x76> |
||
374 | { |
||
375 | BearbeiteRxDaten(); |
||
376 | 28e: 0e 94 fe 03 call 0x7fc <BearbeiteRxDaten> |
||
377 | |||
378 | if(CheckDelay(DelayDaten)) |
||
379 | 292: c8 01 movw r24, r16 |
||
380 | 294: 0e 94 b1 09 call 0x1362 <CheckDelay> |
||
381 | 298: 88 23 and r24, r24 |
||
382 | 29a: c9 f3 breq .-14 ; 0x28e <main+0xc4> |
||
383 | { |
||
384 | Sekundentakt(); |
||
385 | 29c: 0e 94 ab 00 call 0x156 <Sekundentakt> |
||
386 | DelayDaten = SetDelay(10); |
||
387 | 2a0: 8a e0 ldi r24, 0x0A ; 10 |
||
388 | 2a2: 90 e0 ldi r25, 0x00 ; 0 |
||
389 | 2a4: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
390 | 2a8: 8c 01 movw r16, r24 |
||
391 | |||
392 | if(CheckDelay(DelayDisplay)) |
||
393 | 2aa: c6 01 movw r24, r12 |
||
394 | 2ac: 0e 94 b1 09 call 0x1362 <CheckDelay> |
||
395 | 2b0: 88 23 and r24, r24 |
||
396 | 2b2: 39 f0 breq .+14 ; 0x2c2 <main+0xf8> |
||
397 | { |
||
398 | DelayDisplay = SetDelay(300); |
||
399 | 2b4: 8c e2 ldi r24, 0x2C ; 44 |
||
400 | 2b6: 91 e0 ldi r25, 0x01 ; 1 |
||
401 | 2b8: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
402 | 2bc: 6c 01 movw r12, r24 |
||
403 | PollDisplay = 1; |
||
404 | 2be: b0 92 ed 00 sts 0x00ED, r11 |
||
405 | } |
||
406 | key = GetKeyboard2(); |
||
407 | 2c2: 0e 94 57 0a call 0x14ae <GetKeyboard2> |
||
408 | DatenUebertragung(key); |
||
409 | 2c6: 99 27 eor r25, r25 |
||
410 | 2c8: 0e 94 51 05 call 0xaa2 <DatenUebertragung> |
||
411 | |||
412 | if(UebertragungUnterbrochen) |
||
413 | 2cc: 80 91 84 00 lds r24, 0x0084 |
||
414 | 2d0: 88 23 and r24, r24 |
||
415 | 2d2: 81 f1 breq .+96 ; 0x334 <main+0x16a> |
||
416 | { |
||
417 | //01234567890123456789 |
||
418 | LCD_printfxy(0,0," -- Remote -- "); |
||
419 | 2d4: 60 e0 ldi r22, 0x00 ; 0 |
||
420 | 2d6: 86 2f mov r24, r22 |
||
421 | 2d8: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
422 | 2dc: 84 e5 ldi r24, 0x54 ; 84 |
||
423 | 2de: 90 e0 ldi r25, 0x00 ; 0 |
||
424 | 2e0: 9f 93 push r25 |
||
425 | 2e2: 8f 93 push r24 |
||
426 | 2e4: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
427 | LCD_printfxy(0,1," -- Display -- "); |
||
428 | 2e8: 61 e0 ldi r22, 0x01 ; 1 |
||
429 | 2ea: 80 e0 ldi r24, 0x00 ; 0 |
||
430 | 2ec: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
431 | 2f0: 0f 90 pop r0 |
||
432 | 2f2: 0f 90 pop r0 |
||
433 | 2f4: 89 e6 ldi r24, 0x69 ; 105 |
||
434 | 2f6: 90 e0 ldi r25, 0x00 ; 0 |
||
435 | 2f8: 9f 93 push r25 |
||
436 | 2fa: 8f 93 push r24 |
||
437 | 2fc: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
438 | LCD_printfxy(0,2," "); |
||
439 | 300: 62 e0 ldi r22, 0x02 ; 2 |
||
440 | 302: 80 e0 ldi r24, 0x00 ; 0 |
||
441 | 304: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
442 | 308: 0f 90 pop r0 |
||
443 | 30a: 0f 90 pop r0 |
||
444 | 30c: 8e e7 ldi r24, 0x7E ; 126 |
||
445 | 30e: 90 e0 ldi r25, 0x00 ; 0 |
||
446 | 310: 9f 93 push r25 |
||
447 | 312: 8f 93 push r24 |
||
448 | 314: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
449 | LCD_printfxy(0,3," www.MicroSPS.com "); |
||
450 | 318: 63 e0 ldi r22, 0x03 ; 3 |
||
451 | 31a: 80 e0 ldi r24, 0x00 ; 0 |
||
452 | 31c: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
453 | 320: 0f 90 pop r0 |
||
454 | 322: 0f 90 pop r0 |
||
455 | 324: 83 e9 ldi r24, 0x93 ; 147 |
||
456 | 326: 90 e0 ldi r25, 0x00 ; 0 |
||
457 | 328: 9f 93 push r25 |
||
458 | 32a: 8f 93 push r24 |
||
459 | 32c: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
460 | 330: 0f 90 pop r0 |
||
461 | 332: 0f 90 pop r0 |
||
462 | } |
||
463 | |||
464 | if(CheckDelay(DelayTast)) |
||
465 | 334: c7 01 movw r24, r14 |
||
466 | 336: 0e 94 b1 09 call 0x1362 <CheckDelay> |
||
467 | 33a: 88 23 and r24, r24 |
||
468 | 33c: 09 f4 brne .+2 ; 0x340 <main+0x176> |
||
469 | 33e: a7 cf rjmp .-178 ; 0x28e <main+0xc4> |
||
470 | { |
||
471 | DelayTast = SetDelay(100); |
||
472 | 340: 84 e6 ldi r24, 0x64 ; 100 |
||
473 | 342: 90 e0 ldi r25, 0x00 ; 0 |
||
474 | 344: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
475 | 348: 7c 01 movw r14, r24 |
||
476 | |||
477 | if(_TASTE5) |
||
478 | 34a: cb 9b sbis 0x19, 3 ; 25 |
||
479 | 34c: 0c c0 rjmp .+24 ; 0x366 <main+0x19c> |
||
480 | { |
||
481 | do { Delay_ms(10);} while(_TASTE5); |
||
482 | 34e: 8a e0 ldi r24, 0x0A ; 10 |
||
483 | 350: 90 e0 ldi r25, 0x00 ; 0 |
||
484 | 352: 0e 94 bc 09 call 0x1378 <Delay_ms> |
||
485 | 356: cb 99 sbic 0x19, 3 ; 25 |
||
486 | 358: fa cf rjmp .-12 ; 0x34e <main+0x184> |
||
487 | mode = MENU; |
||
488 | 35a: bb 24 eor r11, r11 |
||
489 | LCD_Clear; |
||
490 | 35c: 81 e0 ldi r24, 0x01 ; 1 |
||
491 | 35e: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
492 | 362: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
493 | 366: 80 91 be 00 lds r24, 0x00BE |
||
494 | } |
||
495 | // if(key & 0x10) DebugIn.Digital[0] |= 0x01; else DebugIn.Digital[0] &= ~0x01; |
||
496 | if(PIND & 0x08) DebugIn.Digital[0] |= 0x02; else DebugIn.Digital[0] &= ~0x02; |
||
497 | 36a: 83 9b sbis 0x10, 3 ; 16 |
||
498 | 36c: 02 c0 rjmp .+4 ; 0x372 <main+0x1a8> |
||
499 | 36e: 82 60 ori r24, 0x02 ; 2 |
||
500 | 370: 01 c0 rjmp .+2 ; 0x374 <main+0x1aa> |
||
501 | 372: 8d 7f andi r24, 0xFD ; 253 |
||
502 | 374: 80 93 be 00 sts 0x00BE, r24 |
||
503 | 378: 80 91 be 00 lds r24, 0x00BE |
||
504 | if(PIND & 0x10) DebugIn.Digital[0] |= 0x04; else DebugIn.Digital[0] &= ~0x04; |
||
505 | 37c: 84 9b sbis 0x10, 4 ; 16 |
||
506 | 37e: 02 c0 rjmp .+4 ; 0x384 <main+0x1ba> |
||
507 | 380: 84 60 ori r24, 0x04 ; 4 |
||
508 | 382: 01 c0 rjmp .+2 ; 0x386 <main+0x1bc> |
||
509 | 384: 8b 7f andi r24, 0xFB ; 251 |
||
510 | 386: 80 93 be 00 sts 0x00BE, r24 |
||
511 | 38a: 80 91 be 00 lds r24, 0x00BE |
||
512 | if(PIND & 0x20) DebugIn.Digital[0] |= 0x08; else DebugIn.Digital[0] &= ~0x08; |
||
513 | 38e: 85 9b sbis 0x10, 5 ; 16 |
||
514 | 390: 02 c0 rjmp .+4 ; 0x396 <main+0x1cc> |
||
515 | 392: 88 60 ori r24, 0x08 ; 8 |
||
516 | 394: 01 c0 rjmp .+2 ; 0x398 <main+0x1ce> |
||
517 | 396: 87 7f andi r24, 0xF7 ; 247 |
||
518 | 398: 80 93 be 00 sts 0x00BE, r24 |
||
519 | 39c: 80 91 be 00 lds r24, 0x00BE |
||
520 | if(PIND & 0x40) DebugIn.Digital[0] |= 0x10; else DebugIn.Digital[0] &= ~0x10; |
||
521 | 3a0: 86 9b sbis 0x10, 6 ; 16 |
||
522 | 3a2: 02 c0 rjmp .+4 ; 0x3a8 <main+0x1de> |
||
523 | 3a4: 80 61 ori r24, 0x10 ; 16 |
||
524 | 3a6: 01 c0 rjmp .+2 ; 0x3aa <main+0x1e0> |
||
525 | 3a8: 8f 7e andi r24, 0xEF ; 239 |
||
526 | 3aa: 80 93 be 00 sts 0x00BE, r24 |
||
527 | 3ae: 80 91 be 00 lds r24, 0x00BE |
||
528 | if(PIND & 0x80) DebugIn.Digital[0] |= 0x20; else DebugIn.Digital[0] &= ~0x20; |
||
529 | 3b2: 87 9b sbis 0x10, 7 ; 16 |
||
530 | 3b4: 02 c0 rjmp .+4 ; 0x3ba <main+0x1f0> |
||
531 | 3b6: 80 62 ori r24, 0x20 ; 32 |
||
532 | 3b8: 01 c0 rjmp .+2 ; 0x3bc <main+0x1f2> |
||
533 | 3ba: 8f 7d andi r24, 0xDF ; 223 |
||
534 | 3bc: 80 93 be 00 sts 0x00BE, r24 |
||
535 | GetAnalogWerte(); |
||
536 | 3c0: 0e 94 4e 0c call 0x189c <GetAnalogWerte> |
||
537 | 3c4: 3d cf rjmp .-390 ; 0x240 <main+0x76> |
||
538 | |||
539 | 000003c6 <__vector_15>: |
||
540 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
541 | //++ Sende-Part der Datenübertragung |
||
542 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
543 | SIGNAL(INT_VEC_TX) |
||
544 | { |
||
545 | 3c6: 1f 92 push r1 |
||
546 | 3c8: 0f 92 push r0 |
||
547 | 3ca: 0f b6 in r0, 0x3f ; 63 |
||
548 | 3cc: 0f 92 push r0 |
||
549 | 3ce: 11 24 eor r1, r1 |
||
550 | 3d0: 8f 93 push r24 |
||
551 | 3d2: 9f 93 push r25 |
||
552 | 3d4: ef 93 push r30 |
||
553 | 3d6: ff 93 push r31 |
||
554 | static unsigned int ptr = 0; |
||
555 | unsigned char tmp_tx; |
||
556 | if(!UebertragungAbgeschlossen) |
||
557 | 3d8: 80 91 6e 00 lds r24, 0x006E |
||
558 | 3dc: 88 23 and r24, r24 |
||
559 | 3de: d9 f4 brne .+54 ; 0x416 <__vector_15+0x50> |
||
560 | { |
||
561 | ptr++; // die [0] wurde schon gesendet |
||
562 | 3e0: 80 91 9d 00 lds r24, 0x009D |
||
563 | 3e4: 90 91 9e 00 lds r25, 0x009E |
||
564 | 3e8: 01 96 adiw r24, 0x01 ; 1 |
||
565 | 3ea: 90 93 9e 00 sts 0x009E, r25 |
||
566 | 3ee: 80 93 9d 00 sts 0x009D, r24 |
||
567 | tmp_tx = SendeBuffer[ptr]; |
||
568 | 3f2: fc 01 movw r30, r24 |
||
569 | 3f4: e2 51 subi r30, 0x12 ; 18 |
||
570 | 3f6: ff 4f sbci r31, 0xFF ; 255 |
||
571 | 3f8: e0 81 ld r30, Z |
||
572 | if((tmp_tx == '\r') || (ptr == MAX_SENDE_BUFF)) |
||
573 | 3fa: ed 30 cpi r30, 0x0D ; 13 |
||
574 | 3fc: 19 f0 breq .+6 ; 0x404 <__vector_15+0x3e> |
||
575 | 3fe: 84 36 cpi r24, 0x64 ; 100 |
||
576 | 400: 91 05 cpc r25, r1 |
||
577 | 402: 39 f4 brne .+14 ; 0x412 <__vector_15+0x4c> |
||
578 | { |
||
579 | ptr = 0; |
||
580 | 404: 10 92 9e 00 sts 0x009E, r1 |
||
581 | 408: 10 92 9d 00 sts 0x009D, r1 |
||
582 | UebertragungAbgeschlossen = 1; |
||
583 | 40c: 81 e0 ldi r24, 0x01 ; 1 |
||
584 | 40e: 80 93 6e 00 sts 0x006E, r24 |
||
585 | } |
||
586 | UDR = tmp_tx; |
||
587 | 412: ec b9 out 0x0c, r30 ; 12 |
||
588 | 414: 04 c0 rjmp .+8 ; 0x41e <__vector_15+0x58> |
||
589 | } |
||
590 | else ptr = 0; |
||
591 | 416: 10 92 9e 00 sts 0x009E, r1 |
||
592 | 41a: 10 92 9d 00 sts 0x009D, r1 |
||
593 | 41e: ff 91 pop r31 |
||
594 | 420: ef 91 pop r30 |
||
595 | 422: 9f 91 pop r25 |
||
596 | 424: 8f 91 pop r24 |
||
597 | 426: 0f 90 pop r0 |
||
598 | 428: 0f be out 0x3f, r0 ; 63 |
||
599 | 42a: 0f 90 pop r0 |
||
600 | 42c: 1f 90 pop r1 |
||
601 | 42e: 18 95 reti |
||
602 | |||
603 | 00000430 <__vector_13>: |
||
604 | } |
||
605 | |||
606 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
607 | //++ Empfangs-Part der Datenübertragung, incl. CRC-Auswertung |
||
608 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
||
609 | SIGNAL(INT_VEC_RX) |
||
610 | { |
||
611 | 430: 1f 92 push r1 |
||
612 | 432: 0f 92 push r0 |
||
613 | 434: 0f b6 in r0, 0x3f ; 63 |
||
614 | 436: 0f 92 push r0 |
||
615 | 438: 11 24 eor r1, r1 |
||
616 | 43a: 2f 93 push r18 |
||
617 | 43c: 3f 93 push r19 |
||
618 | 43e: 4f 93 push r20 |
||
619 | 440: 5f 93 push r21 |
||
620 | 442: 8f 93 push r24 |
||
621 | 444: 9f 93 push r25 |
||
622 | 446: af 93 push r26 |
||
623 | 448: bf 93 push r27 |
||
624 | 44a: ef 93 push r30 |
||
625 | 44c: ff 93 push r31 |
||
626 | static unsigned int crc; |
||
627 | static unsigned char crc1,crc2,buf_ptr; |
||
628 | static unsigned char UartState = 0; |
||
629 | unsigned char CrcOkay = 0; |
||
630 | 44e: 20 e0 ldi r18, 0x00 ; 0 |
||
631 | |||
632 | SioTmp = UDR; |
||
633 | 450: 8c b1 in r24, 0x0c ; 12 |
||
634 | 452: 80 93 9c 00 sts 0x009C, r24 |
||
635 | if(buf_ptr >= MAX_EMPFANGS_BUFF) UartState = 0; |
||
636 | 456: 50 91 a3 00 lds r21, 0x00A3 |
||
637 | 45a: 54 36 cpi r21, 0x64 ; 100 |
||
638 | 45c: 10 f0 brcs .+4 ; 0x462 <__vector_13+0x32> |
||
639 | 45e: 20 93 a4 00 sts 0x00A4, r18 |
||
640 | if(SioTmp == '\r' && UartState == 2) |
||
641 | 462: 80 91 9c 00 lds r24, 0x009C |
||
642 | 466: 8d 30 cpi r24, 0x0D ; 13 |
||
643 | 468: 09 f0 breq .+2 ; 0x46c <__vector_13+0x3c> |
||
644 | 46a: 5b c0 rjmp .+182 ; 0x522 <__vector_13+0xf2> |
||
645 | 46c: 80 91 a4 00 lds r24, 0x00A4 |
||
646 | 470: 82 30 cpi r24, 0x02 ; 2 |
||
647 | 472: 09 f0 breq .+2 ; 0x476 <__vector_13+0x46> |
||
648 | 474: 56 c0 rjmp .+172 ; 0x522 <__vector_13+0xf2> |
||
649 | { |
||
650 | UartState = 0; |
||
651 | 476: 20 93 a4 00 sts 0x00A4, r18 |
||
652 | crc -= RxdBuffer[buf_ptr-2]; |
||
653 | 47a: 85 2f mov r24, r21 |
||
654 | 47c: 99 27 eor r25, r25 |
||
655 | 47e: 8e 5a subi r24, 0xAE ; 174 |
||
656 | 480: 9e 4f sbci r25, 0xFE ; 254 |
||
657 | 482: fc 01 movw r30, r24 |
||
658 | 484: 32 97 sbiw r30, 0x02 ; 2 |
||
659 | 486: 40 81 ld r20, Z |
||
660 | 488: 20 91 9f 00 lds r18, 0x009F |
||
661 | 48c: 30 91 a0 00 lds r19, 0x00A0 |
||
662 | 490: 24 1b sub r18, r20 |
||
663 | 492: 31 09 sbc r19, r1 |
||
664 | crc -= RxdBuffer[buf_ptr-1]; |
||
665 | 494: dc 01 movw r26, r24 |
||
666 | 496: 11 97 sbiw r26, 0x01 ; 1 |
||
667 | 498: 8c 91 ld r24, X |
||
668 | 49a: 28 1b sub r18, r24 |
||
669 | 49c: 31 09 sbc r19, r1 |
||
670 | crc %= 4096; |
||
671 | 49e: c9 01 movw r24, r18 |
||
672 | 4a0: 9f 70 andi r25, 0x0F ; 15 |
||
673 | 4a2: 90 93 a0 00 sts 0x00A0, r25 |
||
674 | 4a6: 80 93 9f 00 sts 0x009F, r24 |
||
675 | crc1 = '=' + crc / 64; |
||
676 | 4aa: 46 e0 ldi r20, 0x06 ; 6 |
||
677 | 4ac: 96 95 lsr r25 |
||
678 | 4ae: 87 95 ror r24 |
||
679 | 4b0: 4a 95 dec r20 |
||
680 | 4b2: e1 f7 brne .-8 ; 0x4ac <__vector_13+0x7c> |
||
681 | 4b4: 98 2f mov r25, r24 |
||
682 | 4b6: 93 5c subi r25, 0xC3 ; 195 |
||
683 | 4b8: 90 93 a1 00 sts 0x00A1, r25 |
||
684 | crc2 = '=' + crc % 64; |
||
685 | 4bc: 2f 73 andi r18, 0x3F ; 63 |
||
686 | 4be: 30 70 andi r19, 0x00 ; 0 |
||
687 | 4c0: 23 5c subi r18, 0xC3 ; 195 |
||
688 | 4c2: 20 93 a2 00 sts 0x00A2, r18 |
||
689 | CrcOkay = 0; |
||
690 | if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; CntCrcError++;}; |
||
691 | 4c6: 80 81 ld r24, Z |
||
692 | 4c8: 98 17 cp r25, r24 |
||
693 | 4ca: 29 f4 brne .+10 ; 0x4d6 <__vector_13+0xa6> |
||
694 | 4cc: 8c 91 ld r24, X |
||
695 | 4ce: 28 17 cp r18, r24 |
||
696 | 4d0: 11 f4 brne .+4 ; 0x4d6 <__vector_13+0xa6> |
||
697 | 4d2: 21 e0 ldi r18, 0x01 ; 1 |
||
698 | 4d4: 0a c0 rjmp .+20 ; 0x4ea <__vector_13+0xba> |
||
699 | 4d6: 20 e0 ldi r18, 0x00 ; 0 |
||
700 | 4d8: 80 91 99 00 lds r24, 0x0099 |
||
701 | 4dc: 90 91 9a 00 lds r25, 0x009A |
||
702 | 4e0: 01 96 adiw r24, 0x01 ; 1 |
||
703 | 4e2: 90 93 9a 00 sts 0x009A, r25 |
||
704 | 4e6: 80 93 99 00 sts 0x0099, r24 |
||
705 | if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet |
||
706 | 4ea: 80 91 9b 00 lds r24, 0x009B |
||
707 | 4ee: 88 23 and r24, r24 |
||
708 | 4f0: 09 f0 breq .+2 ; 0x4f4 <__vector_13+0xc4> |
||
709 | 4f2: 66 c0 rjmp .+204 ; 0x5c0 <__vector_13+0x190> |
||
710 | 4f4: 22 23 and r18, r18 |
||
711 | 4f6: 09 f4 brne .+2 ; 0x4fa <__vector_13+0xca> |
||
712 | 4f8: 63 c0 rjmp .+198 ; 0x5c0 <__vector_13+0x190> |
||
713 | { |
||
714 | CntDatensaetzeProSekunde++; |
||
715 | 4fa: 80 91 66 00 lds r24, 0x0066 |
||
716 | 4fe: 8f 5f subi r24, 0xFF ; 255 |
||
717 | 500: 80 93 66 00 sts 0x0066, r24 |
||
718 | PC_DebugTimeout = 10; |
||
719 | 504: 8a e0 ldi r24, 0x0A ; 10 |
||
720 | 506: 80 93 97 00 sts 0x0097, r24 |
||
721 | NeuerDatensatzEmpfangen = 1; |
||
722 | 50a: 81 e0 ldi r24, 0x01 ; 1 |
||
723 | 50c: 80 93 9b 00 sts 0x009B, r24 |
||
724 | AnzahlEmpfangsBytes = buf_ptr; |
||
725 | 510: 50 93 98 00 sts 0x0098, r21 |
||
726 | RxdBuffer[buf_ptr] = '\r'; |
||
727 | 514: e5 2f mov r30, r21 |
||
728 | 516: ff 27 eor r31, r31 |
||
729 | 518: ee 5a subi r30, 0xAE ; 174 |
||
730 | 51a: fe 4f sbci r31, 0xFE ; 254 |
||
731 | 51c: 8d e0 ldi r24, 0x0D ; 13 |
||
732 | 51e: 80 83 st Z, r24 |
||
733 | 520: 4f c0 rjmp .+158 ; 0x5c0 <__vector_13+0x190> |
||
734 | // if((RxdBuffer[1] == 's') && (RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando |
||
735 | } |
||
736 | } |
||
737 | else |
||
738 | switch(UartState) |
||
739 | 522: 20 91 a4 00 lds r18, 0x00A4 |
||
740 | 526: 82 2f mov r24, r18 |
||
741 | 528: 99 27 eor r25, r25 |
||
742 | 52a: 81 30 cpi r24, 0x01 ; 1 |
||
743 | 52c: 91 05 cpc r25, r1 |
||
744 | 52e: f9 f0 breq .+62 ; 0x56e <__vector_13+0x13e> |
||
745 | 530: 82 30 cpi r24, 0x02 ; 2 |
||
746 | 532: 91 05 cpc r25, r1 |
||
747 | 534: 1c f4 brge .+6 ; 0x53c <__vector_13+0x10c> |
||
748 | 536: 89 2b or r24, r25 |
||
749 | 538: 21 f0 breq .+8 ; 0x542 <__vector_13+0x112> |
||
750 | 53a: 40 c0 rjmp .+128 ; 0x5bc <__vector_13+0x18c> |
||
751 | 53c: 02 97 sbiw r24, 0x02 ; 2 |
||
752 | 53e: 11 f1 breq .+68 ; 0x584 <__vector_13+0x154> |
||
753 | 540: 3d c0 rjmp .+122 ; 0x5bc <__vector_13+0x18c> |
||
754 | { |
||
755 | case 0: |
||
756 | if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1; // Startzeichen und Daten schon verarbeitet |
||
757 | 542: 80 91 9c 00 lds r24, 0x009C |
||
758 | 546: 83 32 cpi r24, 0x23 ; 35 |
||
759 | 548: 39 f4 brne .+14 ; 0x558 <__vector_13+0x128> |
||
760 | 54a: 80 91 9b 00 lds r24, 0x009B |
||
761 | 54e: 88 23 and r24, r24 |
||
762 | 550: 19 f4 brne .+6 ; 0x558 <__vector_13+0x128> |
||
763 | 552: 81 e0 ldi r24, 0x01 ; 1 |
||
764 | 554: 80 93 a4 00 sts 0x00A4, r24 |
||
765 | buf_ptr = 0; |
||
766 | RxdBuffer[buf_ptr++] = SioTmp; |
||
767 | 558: 80 91 9c 00 lds r24, 0x009C |
||
768 | 55c: 80 93 52 01 sts 0x0152, r24 |
||
769 | 560: 81 e0 ldi r24, 0x01 ; 1 |
||
770 | 562: 80 93 a3 00 sts 0x00A3, r24 |
||
771 | crc = SioTmp; |
||
772 | 566: 80 91 9c 00 lds r24, 0x009C |
||
773 | 56a: 99 27 eor r25, r25 |
||
774 | 56c: 22 c0 rjmp .+68 ; 0x5b2 <__vector_13+0x182> |
||
775 | break; |
||
776 | case 1: // Adresse auswerten |
||
777 | UartState++; |
||
778 | 56e: 2f 5f subi r18, 0xFF ; 255 |
||
779 | 570: 20 93 a4 00 sts 0x00A4, r18 |
||
780 | RxdBuffer[buf_ptr++] = SioTmp; |
||
781 | 574: e5 2f mov r30, r21 |
||
782 | 576: ff 27 eor r31, r31 |
||
783 | 578: ee 5a subi r30, 0xAE ; 174 |
||
784 | 57a: fe 4f sbci r31, 0xFE ; 254 |
||
785 | 57c: 80 91 9c 00 lds r24, 0x009C |
||
786 | 580: 80 83 st Z, r24 |
||
787 | 582: 09 c0 rjmp .+18 ; 0x596 <__vector_13+0x166> |
||
788 | crc += SioTmp; |
||
789 | break; |
||
790 | case 2: // Eingangsdaten sammeln |
||
791 | RxdBuffer[buf_ptr] = SioTmp; |
||
792 | 584: e5 2f mov r30, r21 |
||
793 | 586: ff 27 eor r31, r31 |
||
794 | 588: ee 5a subi r30, 0xAE ; 174 |
||
795 | 58a: fe 4f sbci r31, 0xFE ; 254 |
||
796 | 58c: 80 91 9c 00 lds r24, 0x009C |
||
797 | 590: 80 83 st Z, r24 |
||
798 | if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++; |
||
799 | 592: 54 36 cpi r21, 0x64 ; 100 |
||
800 | 594: 20 f4 brcc .+8 ; 0x59e <__vector_13+0x16e> |
||
801 | 596: 5f 5f subi r21, 0xFF ; 255 |
||
802 | 598: 50 93 a3 00 sts 0x00A3, r21 |
||
803 | 59c: 02 c0 rjmp .+4 ; 0x5a2 <__vector_13+0x172> |
||
804 | else UartState = 0; |
||
805 | 59e: 10 92 a4 00 sts 0x00A4, r1 |
||
806 | crc += SioTmp; |
||
807 | 5a2: 20 91 9c 00 lds r18, 0x009C |
||
808 | 5a6: 80 91 9f 00 lds r24, 0x009F |
||
809 | 5aa: 90 91 a0 00 lds r25, 0x00A0 |
||
810 | 5ae: 82 0f add r24, r18 |
||
811 | 5b0: 91 1d adc r25, r1 |
||
812 | 5b2: 90 93 a0 00 sts 0x00A0, r25 |
||
813 | 5b6: 80 93 9f 00 sts 0x009F, r24 |
||
814 | break; |
||
815 | 5ba: 02 c0 rjmp .+4 ; 0x5c0 <__vector_13+0x190> |
||
816 | default: |
||
817 | UartState = 0; |
||
818 | 5bc: 10 92 a4 00 sts 0x00A4, r1 |
||
819 | 5c0: ff 91 pop r31 |
||
820 | 5c2: ef 91 pop r30 |
||
821 | 5c4: bf 91 pop r27 |
||
822 | 5c6: af 91 pop r26 |
||
823 | 5c8: 9f 91 pop r25 |
||
824 | 5ca: 8f 91 pop r24 |
||
825 | 5cc: 5f 91 pop r21 |
||
826 | 5ce: 4f 91 pop r20 |
||
827 | 5d0: 3f 91 pop r19 |
||
828 | 5d2: 2f 91 pop r18 |
||
829 | 5d4: 0f 90 pop r0 |
||
830 | 5d6: 0f be out 0x3f, r0 ; 63 |
||
831 | 5d8: 0f 90 pop r0 |
||
832 | 5da: 1f 90 pop r1 |
||
833 | 5dc: 18 95 reti |
||
834 | |||
835 | 000005de <AddCRC>: |
||
836 | break; |
||
837 | } |
||
838 | }; |
||
839 | |||
840 | // -------------------------------------------------------------------------- |
||
841 | void AddCRC(unsigned int wieviele) |
||
842 | { |
||
843 | 5de: ac 01 movw r20, r24 |
||
844 | unsigned int tmpCRC = 0,i; |
||
845 | 5e0: a0 e0 ldi r26, 0x00 ; 0 |
||
846 | 5e2: b0 e0 ldi r27, 0x00 ; 0 |
||
847 | for(i = 0; i < wieviele;i++) |
||
848 | 5e4: 9d 01 movw r18, r26 |
||
849 | 5e6: a8 17 cp r26, r24 |
||
850 | 5e8: b9 07 cpc r27, r25 |
||
851 | 5ea: 48 f4 brcc .+18 ; 0x5fe <AddCRC+0x20> |
||
852 | 5ec: ee ee ldi r30, 0xEE ; 238 |
||
853 | 5ee: f0 e0 ldi r31, 0x00 ; 0 |
||
854 | { |
||
855 | tmpCRC += SendeBuffer[i]; |
||
856 | 5f0: 81 91 ld r24, Z+ |
||
857 | 5f2: 28 0f add r18, r24 |
||
858 | 5f4: 31 1d adc r19, r1 |
||
859 | 5f6: 11 96 adiw r26, 0x01 ; 1 |
||
860 | 5f8: a4 17 cp r26, r20 |
||
861 | 5fa: b5 07 cpc r27, r21 |
||
862 | 5fc: c8 f3 brcs .-14 ; 0x5f0 <AddCRC+0x12> |
||
863 | } |
||
864 | tmpCRC %= 4096; |
||
865 | 5fe: 3f 70 andi r19, 0x0F ; 15 |
||
866 | SendeBuffer[i++] = '=' + tmpCRC / 64; |
||
867 | 600: fd 01 movw r30, r26 |
||
868 | 602: e2 51 subi r30, 0x12 ; 18 |
||
869 | 604: ff 4f sbci r31, 0xFF ; 255 |
||
870 | 606: c9 01 movw r24, r18 |
||
871 | 608: 56 e0 ldi r21, 0x06 ; 6 |
||
872 | 60a: 96 95 lsr r25 |
||
873 | 60c: 87 95 ror r24 |
||
874 | 60e: 5a 95 dec r21 |
||
875 | 610: e1 f7 brne .-8 ; 0x60a <AddCRC+0x2c> |
||
876 | 612: 83 5c subi r24, 0xC3 ; 195 |
||
877 | 614: 80 83 st Z, r24 |
||
878 | 616: 11 96 adiw r26, 0x01 ; 1 |
||
879 | SendeBuffer[i++] = '=' + tmpCRC % 64; |
||
880 | 618: fd 01 movw r30, r26 |
||
881 | 61a: e2 51 subi r30, 0x12 ; 18 |
||
882 | 61c: ff 4f sbci r31, 0xFF ; 255 |
||
883 | 61e: 2f 73 andi r18, 0x3F ; 63 |
||
884 | 620: 30 70 andi r19, 0x00 ; 0 |
||
885 | 622: 82 2f mov r24, r18 |
||
886 | 624: 83 5c subi r24, 0xC3 ; 195 |
||
887 | 626: 80 83 st Z, r24 |
||
888 | SendeBuffer[i++] = '\r'; |
||
889 | 628: a1 51 subi r26, 0x11 ; 17 |
||
890 | 62a: bf 4f sbci r27, 0xFF ; 255 |
||
891 | 62c: 8d e0 ldi r24, 0x0D ; 13 |
||
892 | 62e: 8c 93 st X, r24 |
||
893 | UebertragungAbgeschlossen = 0; |
||
894 | 630: 10 92 6e 00 sts 0x006E, r1 |
||
895 | UDR = SendeBuffer[0]; |
||
896 | 634: 80 91 ee 00 lds r24, 0x00EE |
||
897 | 638: 8c b9 out 0x0c, r24 ; 12 |
||
898 | 63a: 08 95 ret |
||
899 | |||
900 | 0000063c <SendOutData>: |
||
901 | // PrintSendeBuffer(); |
||
902 | } |
||
903 | |||
904 | |||
905 | // -------------------------------------------------------------------------- |
||
906 | void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len) |
||
907 | { |
||
908 | 63c: 1f 93 push r17 |
||
909 | 63e: cf 93 push r28 |
||
910 | 640: df 93 push r29 |
||
911 | 642: 38 2f mov r19, r24 |
||
912 | 644: 96 2f mov r25, r22 |
||
913 | 646: ea 01 movw r28, r20 |
||
914 | 648: 72 2f mov r23, r18 |
||
915 | unsigned int pt = 0,i; |
||
916 | unsigned char a,b,c,d; |
||
917 | unsigned char ptr = 0; |
||
918 | 64a: 10 e0 ldi r17, 0x00 ; 0 |
||
919 | unsigned char x,y,z; |
||
920 | //while(!UebertragungAbgeschlossen); |
||
921 | SendeBuffer[pt++] = '#'; // Startzeichen |
||
922 | 64c: 83 e2 ldi r24, 0x23 ; 35 |
||
923 | 64e: 80 93 ee 00 sts 0x00EE, r24 |
||
924 | SendeBuffer[pt++] = modul+'a'; // Adresse (a=0; b=1,...) |
||
925 | 652: 9f 59 subi r25, 0x9F ; 159 |
||
926 | 654: 90 93 ef 00 sts 0x00EF, r25 |
||
927 | SendeBuffer[pt++] = cmd; // Commando |
||
928 | 658: 30 93 f0 00 sts 0x00F0, r19 |
||
929 | 65c: a3 e0 ldi r26, 0x03 ; 3 |
||
930 | 65e: b0 e0 ldi r27, 0x00 ; 0 |
||
931 | |||
932 | while(len) |
||
933 | { |
||
934 | if(len) { a = snd[ptr++]; len--;} else a = 0; |
||
935 | if(len) { b = snd[ptr++]; len--;} else b = 0; |
||
936 | if(len) { c = snd[ptr++]; len--;} else c = 0; |
||
937 | SendeBuffer[pt++] = '=' + (a >> 2); |
||
938 | SendeBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
||
939 | SendeBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
||
940 | SendeBuffer[pt++] = '=' + ( c & 0x3f); |
||
941 | 660: 77 23 and r23, r23 |
||
942 | 662: 09 f4 brne .+2 ; 0x666 <SendOutData+0x2a> |
||
943 | 664: 58 c0 rjmp .+176 ; 0x716 <SendOutData+0xda> |
||
944 | 666: 77 23 and r23, r23 |
||
945 | 668: 11 f4 brne .+4 ; 0x66e <SendOutData+0x32> |
||
946 | 66a: 97 2f mov r25, r23 |
||
947 | 66c: 07 c0 rjmp .+14 ; 0x67c <SendOutData+0x40> |
||
948 | 66e: fe 01 movw r30, r28 |
||
949 | 670: e1 0f add r30, r17 |
||
950 | 672: f1 1d adc r31, r1 |
||
951 | 674: 1f 5f subi r17, 0xFF ; 255 |
||
952 | 676: 90 81 ld r25, Z |
||
953 | 678: 71 50 subi r23, 0x01 ; 1 |
||
954 | 67a: 11 f4 brne .+4 ; 0x680 <SendOutData+0x44> |
||
955 | 67c: 47 2f mov r20, r23 |
||
956 | 67e: 0e c0 rjmp .+28 ; 0x69c <SendOutData+0x60> |
||
957 | 680: fe 01 movw r30, r28 |
||
958 | 682: e1 0f add r30, r17 |
||
959 | 684: f1 1d adc r31, r1 |
||
960 | 686: 1f 5f subi r17, 0xFF ; 255 |
||
961 | 688: 40 81 ld r20, Z |
||
962 | 68a: 71 50 subi r23, 0x01 ; 1 |
||
963 | 68c: 39 f0 breq .+14 ; 0x69c <SendOutData+0x60> |
||
964 | 68e: fe 01 movw r30, r28 |
||
965 | 690: e1 0f add r30, r17 |
||
966 | 692: f1 1d adc r31, r1 |
||
967 | 694: 1f 5f subi r17, 0xFF ; 255 |
||
968 | 696: 60 81 ld r22, Z |
||
969 | 698: 71 50 subi r23, 0x01 ; 1 |
||
970 | 69a: 01 c0 rjmp .+2 ; 0x69e <SendOutData+0x62> |
||
971 | 69c: 67 2f mov r22, r23 |
||
972 | 69e: fd 01 movw r30, r26 |
||
973 | 6a0: e2 51 subi r30, 0x12 ; 18 |
||
974 | 6a2: ff 4f sbci r31, 0xFF ; 255 |
||
975 | 6a4: 89 2f mov r24, r25 |
||
976 | 6a6: 86 95 lsr r24 |
||
977 | 6a8: 86 95 lsr r24 |
||
978 | 6aa: 83 5c subi r24, 0xC3 ; 195 |
||
979 | 6ac: 80 83 st Z, r24 |
||
980 | 6ae: 11 96 adiw r26, 0x01 ; 1 |
||
981 | 6b0: fd 01 movw r30, r26 |
||
982 | 6b2: e2 51 subi r30, 0x12 ; 18 |
||
983 | 6b4: ff 4f sbci r31, 0xFF ; 255 |
||
984 | 6b6: 89 2f mov r24, r25 |
||
985 | 6b8: 99 27 eor r25, r25 |
||
986 | 6ba: 83 70 andi r24, 0x03 ; 3 |
||
987 | 6bc: 90 70 andi r25, 0x00 ; 0 |
||
988 | 6be: 24 e0 ldi r18, 0x04 ; 4 |
||
989 | 6c0: 88 0f add r24, r24 |
||
990 | 6c2: 99 1f adc r25, r25 |
||
991 | 6c4: 2a 95 dec r18 |
||
992 | 6c6: e1 f7 brne .-8 ; 0x6c0 <SendOutData+0x84> |
||
993 | 6c8: 55 27 eor r21, r21 |
||
994 | 6ca: 9a 01 movw r18, r20 |
||
995 | 6cc: 94 e0 ldi r25, 0x04 ; 4 |
||
996 | 6ce: 36 95 lsr r19 |
||
997 | 6d0: 27 95 ror r18 |
||
998 | 6d2: 9a 95 dec r25 |
||
999 | 6d4: e1 f7 brne .-8 ; 0x6ce <SendOutData+0x92> |
||
1000 | 6d6: 82 2b or r24, r18 |
||
1001 | 6d8: 83 5c subi r24, 0xC3 ; 195 |
||
1002 | 6da: 80 83 st Z, r24 |
||
1003 | 6dc: 11 96 adiw r26, 0x01 ; 1 |
||
1004 | 6de: fd 01 movw r30, r26 |
||
1005 | 6e0: e2 51 subi r30, 0x12 ; 18 |
||
1006 | 6e2: ff 4f sbci r31, 0xFF ; 255 |
||
1007 | 6e4: 4f 70 andi r20, 0x0F ; 15 |
||
1008 | 6e6: 50 70 andi r21, 0x00 ; 0 |
||
1009 | 6e8: 44 0f add r20, r20 |
||
1010 | 6ea: 55 1f adc r21, r21 |
||
1011 | 6ec: 44 0f add r20, r20 |
||
1012 | 6ee: 55 1f adc r21, r21 |
||
1013 | 6f0: 86 2f mov r24, r22 |
||
1014 | 6f2: 99 27 eor r25, r25 |
||
1015 | 6f4: 26 e0 ldi r18, 0x06 ; 6 |
||
1016 | 6f6: 96 95 lsr r25 |
||
1017 | 6f8: 87 95 ror r24 |
||
1018 | 6fa: 2a 95 dec r18 |
||
1019 | 6fc: e1 f7 brne .-8 ; 0x6f6 <SendOutData+0xba> |
||
1020 | 6fe: 84 2b or r24, r20 |
||
1021 | 700: 83 5c subi r24, 0xC3 ; 195 |
||
1022 | 702: 80 83 st Z, r24 |
||
1023 | 704: 11 96 adiw r26, 0x01 ; 1 |
||
1024 | 706: fd 01 movw r30, r26 |
||
1025 | 708: e2 51 subi r30, 0x12 ; 18 |
||
1026 | 70a: ff 4f sbci r31, 0xFF ; 255 |
||
1027 | 70c: 6f 73 andi r22, 0x3F ; 63 |
||
1028 | 70e: 63 5c subi r22, 0xC3 ; 195 |
||
1029 | 710: 60 83 st Z, r22 |
||
1030 | 712: 11 96 adiw r26, 0x01 ; 1 |
||
1031 | 714: a5 cf rjmp .-182 ; 0x660 <SendOutData+0x24> |
||
1032 | } |
||
1033 | AddCRC(pt); |
||
1034 | 716: cd 01 movw r24, r26 |
||
1035 | 718: 0e 94 ef 02 call 0x5de <AddCRC> |
||
1036 | 71c: df 91 pop r29 |
||
1037 | 71e: cf 91 pop r28 |
||
1038 | 720: 1f 91 pop r17 |
||
1039 | 722: 08 95 ret |
||
1040 | |||
1041 | 00000724 <Decode64>: |
||
1042 | } |
||
1043 | |||
1044 | // -------------------------------------------------------------------------- |
||
1045 | void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max) // Wohin mit den Daten; Wie lang; Wo im RxdBuffer |
||
1046 | { |
||
1047 | 724: 1f 93 push r17 |
||
1048 | 726: cf 93 push r28 |
||
1049 | 728: df 93 push r29 |
||
1050 | 72a: ec 01 movw r28, r24 |
||
1051 | unsigned char a,b,c,d; |
||
1052 | unsigned char ptr = 0; |
||
1053 | 72c: 10 e0 ldi r17, 0x00 ; 0 |
||
1054 | unsigned char x,y,z; |
||
1055 | while(len) |
||
1056 | { |
||
1057 | a = RxdBuffer[ptrIn++] - '='; |
||
1058 | b = RxdBuffer[ptrIn++] - '='; |
||
1059 | c = RxdBuffer[ptrIn++] - '='; |
||
1060 | d = RxdBuffer[ptrIn++] - '='; |
||
1061 | if(ptrIn > max - 2) break; // nicht mehr Daten verarbeiten, als empfangen wurden |
||
1062 | |||
1063 | x = (a << 2) | (b >> 4); |
||
1064 | y = ((b & 0x0f) << 4) | (c >> 2); |
||
1065 | z = ((c & 0x03) << 6) | d; |
||
1066 | |||
1067 | if(len--) ptrOut[ptr++] = x; else break; |
||
1068 | if(len--) ptrOut[ptr++] = y; else break; |
||
1069 | if(len--) ptrOut[ptr++] = z; else break; |
||
1070 | 72e: 66 23 and r22, r22 |
||
1071 | 730: 09 f4 brne .+2 ; 0x734 <Decode64+0x10> |
||
1072 | 732: 60 c0 rjmp .+192 ; 0x7f4 <Decode64+0xd0> |
||
1073 | 734: a2 2f mov r26, r18 |
||
1074 | 736: bb 27 eor r27, r27 |
||
1075 | 738: 12 97 sbiw r26, 0x02 ; 2 |
||
1076 | 73a: e4 2f mov r30, r20 |
||
1077 | 73c: ff 27 eor r31, r31 |
||
1078 | 73e: ee 5a subi r30, 0xAE ; 174 |
||
1079 | 740: fe 4f sbci r31, 0xFE ; 254 |
||
1080 | 742: 30 81 ld r19, Z |
||
1081 | 744: 3d 53 subi r19, 0x3D ; 61 |
||
1082 | 746: 4f 5f subi r20, 0xFF ; 255 |
||
1083 | 748: e4 2f mov r30, r20 |
||
1084 | 74a: ff 27 eor r31, r31 |
||
1085 | 74c: ee 5a subi r30, 0xAE ; 174 |
||
1086 | 74e: fe 4f sbci r31, 0xFE ; 254 |
||
1087 | 750: 50 81 ld r21, Z |
||
1088 | 752: 5d 53 subi r21, 0x3D ; 61 |
||
1089 | 754: 4f 5f subi r20, 0xFF ; 255 |
||
1090 | 756: e4 2f mov r30, r20 |
||
1091 | 758: ff 27 eor r31, r31 |
||
1092 | 75a: ee 5a subi r30, 0xAE ; 174 |
||
1093 | 75c: fe 4f sbci r31, 0xFE ; 254 |
||
1094 | 75e: 70 81 ld r23, Z |
||
1095 | 760: 7d 53 subi r23, 0x3D ; 61 |
||
1096 | 762: 4f 5f subi r20, 0xFF ; 255 |
||
1097 | 764: e4 2f mov r30, r20 |
||
1098 | 766: ff 27 eor r31, r31 |
||
1099 | 768: ee 5a subi r30, 0xAE ; 174 |
||
1100 | 76a: fe 4f sbci r31, 0xFE ; 254 |
||
1101 | 76c: e0 81 ld r30, Z |
||
1102 | 76e: ed 53 subi r30, 0x3D ; 61 |
||
1103 | 770: 4f 5f subi r20, 0xFF ; 255 |
||
1104 | 772: 84 2f mov r24, r20 |
||
1105 | 774: 99 27 eor r25, r25 |
||
1106 | 776: a8 17 cp r26, r24 |
||
1107 | 778: b9 07 cpc r27, r25 |
||
1108 | 77a: e4 f1 brlt .+120 ; 0x7f4 <Decode64+0xd0> |
||
1109 | 77c: 83 2f mov r24, r19 |
||
1110 | 77e: 99 27 eor r25, r25 |
||
1111 | 780: 88 0f add r24, r24 |
||
1112 | 782: 99 1f adc r25, r25 |
||
1113 | 784: 88 0f add r24, r24 |
||
1114 | 786: 99 1f adc r25, r25 |
||
1115 | 788: 35 2f mov r19, r21 |
||
1116 | 78a: 32 95 swap r19 |
||
1117 | 78c: 3f 70 andi r19, 0x0F ; 15 |
||
1118 | 78e: 38 2b or r19, r24 |
||
1119 | 790: 85 2f mov r24, r21 |
||
1120 | 792: 99 27 eor r25, r25 |
||
1121 | 794: 8f 70 andi r24, 0x0F ; 15 |
||
1122 | 796: 90 70 andi r25, 0x00 ; 0 |
||
1123 | 798: f4 e0 ldi r31, 0x04 ; 4 |
||
1124 | 79a: 88 0f add r24, r24 |
||
1125 | 79c: 99 1f adc r25, r25 |
||
1126 | 79e: fa 95 dec r31 |
||
1127 | 7a0: e1 f7 brne .-8 ; 0x79a <Decode64+0x76> |
||
1128 | 7a2: 57 2f mov r21, r23 |
||
1129 | 7a4: 56 95 lsr r21 |
||
1130 | 7a6: 56 95 lsr r21 |
||
1131 | 7a8: 58 2b or r21, r24 |
||
1132 | 7aa: 87 2f mov r24, r23 |
||
1133 | 7ac: 99 27 eor r25, r25 |
||
1134 | 7ae: 83 70 andi r24, 0x03 ; 3 |
||
1135 | 7b0: 90 70 andi r25, 0x00 ; 0 |
||
1136 | 7b2: 76 e0 ldi r23, 0x06 ; 6 |
||
1137 | 7b4: 88 0f add r24, r24 |
||
1138 | 7b6: 99 1f adc r25, r25 |
||
1139 | 7b8: 7a 95 dec r23 |
||
1140 | 7ba: e1 f7 brne .-8 ; 0x7b4 <Decode64+0x90> |
||
1141 | 7bc: 8e 2b or r24, r30 |
||
1142 | 7be: 61 50 subi r22, 0x01 ; 1 |
||
1143 | 7c0: 6f 3f cpi r22, 0xFF ; 255 |
||
1144 | 7c2: c1 f0 breq .+48 ; 0x7f4 <Decode64+0xd0> |
||
1145 | 7c4: fe 01 movw r30, r28 |
||
1146 | 7c6: e1 0f add r30, r17 |
||
1147 | 7c8: f1 1d adc r31, r1 |
||
1148 | 7ca: 30 83 st Z, r19 |
||
1149 | 7cc: 1f 5f subi r17, 0xFF ; 255 |
||
1150 | 7ce: 61 50 subi r22, 0x01 ; 1 |
||
1151 | 7d0: 6f 3f cpi r22, 0xFF ; 255 |
||
1152 | 7d2: 81 f0 breq .+32 ; 0x7f4 <Decode64+0xd0> |
||
1153 | 7d4: fe 01 movw r30, r28 |
||
1154 | 7d6: e1 0f add r30, r17 |
||
1155 | 7d8: f1 1d adc r31, r1 |
||
1156 | 7da: 50 83 st Z, r21 |
||
1157 | 7dc: 1f 5f subi r17, 0xFF ; 255 |
||
1158 | 7de: 61 50 subi r22, 0x01 ; 1 |
||
1159 | 7e0: 6f 3f cpi r22, 0xFF ; 255 |
||
1160 | 7e2: 41 f0 breq .+16 ; 0x7f4 <Decode64+0xd0> |
||
1161 | 7e4: fe 01 movw r30, r28 |
||
1162 | 7e6: e1 0f add r30, r17 |
||
1163 | 7e8: f1 1d adc r31, r1 |
||
1164 | 7ea: 80 83 st Z, r24 |
||
1165 | 7ec: 1f 5f subi r17, 0xFF ; 255 |
||
1166 | 7ee: 66 23 and r22, r22 |
||
1167 | 7f0: 09 f0 breq .+2 ; 0x7f4 <Decode64+0xd0> |
||
1168 | 7f2: a3 cf rjmp .-186 ; 0x73a <Decode64+0x16> |
||
1169 | 7f4: df 91 pop r29 |
||
1170 | 7f6: cf 91 pop r28 |
||
1171 | 7f8: 1f 91 pop r17 |
||
1172 | 7fa: 08 95 ret |
||
1173 | |||
1174 | 000007fc <BearbeiteRxDaten>: |
||
1175 | } |
||
1176 | |||
1177 | } |
||
1178 | |||
1179 | // -------------------------------------------------------------------------- |
||
1180 | void BearbeiteRxDaten(void) |
||
1181 | { |
||
1182 | 7fc: cf 93 push r28 |
||
1183 | 7fe: df 93 push r29 |
||
1184 | 800: cd b7 in r28, 0x3d ; 61 |
||
1185 | 802: de b7 in r29, 0x3e ; 62 |
||
1186 | 804: ad 97 sbiw r28, 0x2d ; 45 |
||
1187 | 806: 0f b6 in r0, 0x3f ; 63 |
||
1188 | 808: f8 94 cli |
||
1189 | 80a: de bf out 0x3e, r29 ; 62 |
||
1190 | 80c: 0f be out 0x3f, r0 ; 63 |
||
1191 | 80e: cd bf out 0x3d, r28 ; 61 |
||
1192 | unsigned int tmp_int_arr1[1]; |
||
1193 | unsigned int tmp_int_arr2[2]; |
||
1194 | unsigned int tmp_int_arr20[21]; |
||
1195 | unsigned char tmp_char_arr3[3]; |
||
1196 | // unsigned int tmp_int_arr4[4]; |
||
1197 | |||
1198 | if(!NeuerDatensatzEmpfangen) return; |
||
1199 | 810: 80 91 9b 00 lds r24, 0x009B |
||
1200 | 814: 88 23 and r24, r24 |
||
1201 | 816: 09 f4 brne .+2 ; 0x81a <BearbeiteRxDaten+0x1e> |
||
1202 | 818: a7 c0 rjmp .+334 ; 0x968 <__stack+0x109> |
||
1203 | NeuerDatensatzEmpfangen = 0; |
||
1204 | 81a: 10 92 9b 00 sts 0x009B, r1 |
||
1205 | if(ErwarteAntwort == RxdBuffer[2]) AntwortEingetroffen = 1; |
||
1206 | 81e: 90 91 6d 00 lds r25, 0x006D |
||
1207 | 822: 80 91 54 01 lds r24, 0x0154 |
||
1208 | 826: 98 17 cp r25, r24 |
||
1209 | 828: 19 f4 brne .+6 ; 0x830 <BearbeiteRxDaten+0x34> |
||
1210 | 82a: 81 e0 ldi r24, 0x01 ; 1 |
||
1211 | 82c: 80 93 92 00 sts 0x0092, r24 |
||
1212 | switch(RxdBuffer[2]) |
||
1213 | 830: 80 91 54 01 lds r24, 0x0154 |
||
1214 | 834: 99 27 eor r25, r25 |
||
1215 | 836: 82 33 cpi r24, 0x32 ; 50 |
||
1216 | 838: 91 05 cpc r25, r1 |
||
1217 | 83a: 09 f4 brne .+2 ; 0x83e <BearbeiteRxDaten+0x42> |
||
1218 | 83c: 46 c0 rjmp .+140 ; 0x8ca <__stack+0x6b> |
||
1219 | 83e: 83 33 cpi r24, 0x33 ; 51 |
||
1220 | 840: 91 05 cpc r25, r1 |
||
1221 | 842: 34 f4 brge .+12 ; 0x850 <BearbeiteRxDaten+0x54> |
||
1222 | 844: 80 33 cpi r24, 0x30 ; 48 |
||
1223 | 846: 91 05 cpc r25, r1 |
||
1224 | 848: 99 f0 breq .+38 ; 0x870 <__stack+0x11> |
||
1225 | 84a: c1 97 sbiw r24, 0x31 ; 49 |
||
1226 | 84c: 49 f1 breq .+82 ; 0x8a0 <__stack+0x41> |
||
1227 | 84e: 8c c0 rjmp .+280 ; 0x968 <__stack+0x109> |
||
1228 | 850: 84 34 cpi r24, 0x44 ; 68 |
||
1229 | 852: 91 05 cpc r25, r1 |
||
1230 | 854: 09 f4 brne .+2 ; 0x858 <BearbeiteRxDaten+0x5c> |
||
1231 | 856: 6b c0 rjmp .+214 ; 0x92e <__stack+0xcf> |
||
1232 | 858: 85 34 cpi r24, 0x45 ; 69 |
||
1233 | 85a: 91 05 cpc r25, r1 |
||
1234 | 85c: 24 f4 brge .+8 ; 0x866 <__stack+0x7> |
||
1235 | 85e: c3 97 sbiw r24, 0x33 ; 51 |
||
1236 | 860: 09 f4 brne .+2 ; 0x864 <__stack+0x5> |
||
1237 | 862: 48 c0 rjmp .+144 ; 0x8f4 <__stack+0x95> |
||
1238 | 864: 81 c0 rjmp .+258 ; 0x968 <__stack+0x109> |
||
1239 | 866: 8b 34 cpi r24, 0x4B ; 75 |
||
1240 | 868: 91 05 cpc r25, r1 |
||
1241 | 86a: 09 f4 brne .+2 ; 0x86e <__stack+0xf> |
||
1242 | 86c: 6c c0 rjmp .+216 ; 0x946 <__stack+0xe7> |
||
1243 | 86e: 7c c0 rjmp .+248 ; 0x968 <__stack+0x109> |
||
1244 | { |
||
1245 | case '0':// LCD-Zeile0 |
||
1246 | Decode64((unsigned char *) &tmp_int_arr20,sizeof(tmp_int_arr20),3,AnzahlEmpfangsBytes); |
||
1247 | 870: 20 91 98 00 lds r18, 0x0098 |
||
1248 | 874: 43 e0 ldi r20, 0x03 ; 3 |
||
1249 | 876: 6a e2 ldi r22, 0x2A ; 42 |
||
1250 | 878: ce 01 movw r24, r28 |
||
1251 | 87a: 01 96 adiw r24, 0x01 ; 1 |
||
1252 | 87c: 0e 94 92 03 call 0x724 <Decode64> |
||
1253 | tmp_int_arr20[20] = 0; |
||
1254 | 880: 1a a6 std Y+42, r1 ; 0x2a |
||
1255 | 882: 19 a6 std Y+41, r1 ; 0x29 |
||
1256 | DisplayBusy = 1; |
||
1257 | 884: 81 e0 ldi r24, 0x01 ; 1 |
||
1258 | 886: 80 93 93 00 sts 0x0093, r24 |
||
1259 | LCD_printfxy(0,0,"%s",tmp_int_arr20); |
||
1260 | 88a: 60 e0 ldi r22, 0x00 ; 0 |
||
1261 | 88c: 86 2f mov r24, r22 |
||
1262 | 88e: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
1263 | 892: ce 01 movw r24, r28 |
||
1264 | 894: 01 96 adiw r24, 0x01 ; 1 |
||
1265 | 896: 9f 93 push r25 |
||
1266 | 898: 8f 93 push r24 |
||
1267 | 89a: 88 ea ldi r24, 0xA8 ; 168 |
||
1268 | 89c: 90 e0 ldi r25, 0x00 ; 0 |
||
1269 | 89e: 3e c0 rjmp .+124 ; 0x91c <__stack+0xbd> |
||
1270 | break; |
||
1271 | case '1':// LCD-Zeile1 |
||
1272 | Decode64((unsigned char *) &tmp_int_arr20,sizeof(tmp_int_arr20),3,AnzahlEmpfangsBytes); |
||
1273 | 8a0: 20 91 98 00 lds r18, 0x0098 |
||
1274 | 8a4: 43 e0 ldi r20, 0x03 ; 3 |
||
1275 | 8a6: 6a e2 ldi r22, 0x2A ; 42 |
||
1276 | 8a8: ce 01 movw r24, r28 |
||
1277 | 8aa: 01 96 adiw r24, 0x01 ; 1 |
||
1278 | 8ac: 0e 94 92 03 call 0x724 <Decode64> |
||
1279 | tmp_int_arr20[20] = 0; |
||
1280 | 8b0: 1a a6 std Y+42, r1 ; 0x2a |
||
1281 | 8b2: 19 a6 std Y+41, r1 ; 0x29 |
||
1282 | LCD_printfxy(0,1,"%s",tmp_int_arr20); |
||
1283 | 8b4: 61 e0 ldi r22, 0x01 ; 1 |
||
1284 | 8b6: 80 e0 ldi r24, 0x00 ; 0 |
||
1285 | 8b8: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
1286 | 8bc: ce 01 movw r24, r28 |
||
1287 | 8be: 01 96 adiw r24, 0x01 ; 1 |
||
1288 | 8c0: 9f 93 push r25 |
||
1289 | 8c2: 8f 93 push r24 |
||
1290 | 8c4: 8b ea ldi r24, 0xAB ; 171 |
||
1291 | 8c6: 90 e0 ldi r25, 0x00 ; 0 |
||
1292 | 8c8: 29 c0 rjmp .+82 ; 0x91c <__stack+0xbd> |
||
1293 | break; |
||
1294 | case '2':// LCD-Zeile2 |
||
1295 | Decode64((unsigned char *) &tmp_int_arr20,sizeof(tmp_int_arr20),3,AnzahlEmpfangsBytes); |
||
1296 | 8ca: 20 91 98 00 lds r18, 0x0098 |
||
1297 | 8ce: 43 e0 ldi r20, 0x03 ; 3 |
||
1298 | 8d0: 6a e2 ldi r22, 0x2A ; 42 |
||
1299 | 8d2: ce 01 movw r24, r28 |
||
1300 | 8d4: 01 96 adiw r24, 0x01 ; 1 |
||
1301 | 8d6: 0e 94 92 03 call 0x724 <Decode64> |
||
1302 | tmp_int_arr20[20] = 0; |
||
1303 | 8da: 1a a6 std Y+42, r1 ; 0x2a |
||
1304 | 8dc: 19 a6 std Y+41, r1 ; 0x29 |
||
1305 | LCD_printfxy(0,2,"%s",tmp_int_arr20); |
||
1306 | 8de: 62 e0 ldi r22, 0x02 ; 2 |
||
1307 | 8e0: 80 e0 ldi r24, 0x00 ; 0 |
||
1308 | 8e2: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
1309 | 8e6: ce 01 movw r24, r28 |
||
1310 | 8e8: 01 96 adiw r24, 0x01 ; 1 |
||
1311 | 8ea: 9f 93 push r25 |
||
1312 | 8ec: 8f 93 push r24 |
||
1313 | 8ee: 8e ea ldi r24, 0xAE ; 174 |
||
1314 | 8f0: 90 e0 ldi r25, 0x00 ; 0 |
||
1315 | 8f2: 14 c0 rjmp .+40 ; 0x91c <__stack+0xbd> |
||
1316 | break; |
||
1317 | case '3':// LCD-Zeile3 |
||
1318 | Decode64((unsigned char *) &tmp_int_arr20,sizeof(tmp_int_arr20),3,AnzahlEmpfangsBytes); |
||
1319 | 8f4: 20 91 98 00 lds r18, 0x0098 |
||
1320 | 8f8: 43 e0 ldi r20, 0x03 ; 3 |
||
1321 | 8fa: 6a e2 ldi r22, 0x2A ; 42 |
||
1322 | 8fc: ce 01 movw r24, r28 |
||
1323 | 8fe: 01 96 adiw r24, 0x01 ; 1 |
||
1324 | 900: 0e 94 92 03 call 0x724 <Decode64> |
||
1325 | tmp_int_arr20[20] = 0; |
||
1326 | 904: 1a a6 std Y+42, r1 ; 0x2a |
||
1327 | 906: 19 a6 std Y+41, r1 ; 0x29 |
||
1328 | LCD_printfxy(0,3,"%s",tmp_int_arr20); |
||
1329 | 908: 63 e0 ldi r22, 0x03 ; 3 |
||
1330 | 90a: 80 e0 ldi r24, 0x00 ; 0 |
||
1331 | 90c: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
1332 | 910: ce 01 movw r24, r28 |
||
1333 | 912: 01 96 adiw r24, 0x01 ; 1 |
||
1334 | 914: 9f 93 push r25 |
||
1335 | 916: 8f 93 push r24 |
||
1336 | 918: 81 eb ldi r24, 0xB1 ; 177 |
||
1337 | 91a: 90 e0 ldi r25, 0x00 ; 0 |
||
1338 | 91c: 9f 93 push r25 |
||
1339 | 91e: 8f 93 push r24 |
||
1340 | 920: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
1341 | break; |
||
1342 | 924: 0f 90 pop r0 |
||
1343 | 926: 0f 90 pop r0 |
||
1344 | 928: 0f 90 pop r0 |
||
1345 | 92a: 0f 90 pop r0 |
||
1346 | 92c: 1d c0 rjmp .+58 ; 0x968 <__stack+0x109> |
||
1347 | case 'D': // Debug Eingangsdaten |
||
1348 | Decode64((unsigned char *) &DebugOut,sizeof(DebugOut),3,AnzahlEmpfangsBytes); |
||
1349 | 92e: 20 91 98 00 lds r18, 0x0098 |
||
1350 | 932: 43 e0 ldi r20, 0x03 ; 3 |
||
1351 | 934: 6a e1 ldi r22, 0x1A ; 26 |
||
1352 | 936: 83 ed ldi r24, 0xD3 ; 211 |
||
1353 | 938: 90 e0 ldi r25, 0x00 ; 0 |
||
1354 | 93a: 0e 94 92 03 call 0x724 <Decode64> |
||
1355 | PORTB = DebugOut.Digital[1]; |
||
1356 | 93e: 80 91 d4 00 lds r24, 0x00D4 |
||
1357 | 942: 88 bb out 0x18, r24 ; 24 |
||
1358 | break; |
||
1359 | 944: 11 c0 rjmp .+34 ; 0x968 <__stack+0x109> |
||
1360 | case 'K': // Debug Eingangsdaten |
||
1361 | Decode64(tmp_char_arr3,sizeof(tmp_char_arr3),3,AnzahlEmpfangsBytes); |
||
1362 | 946: 20 91 98 00 lds r18, 0x0098 |
||
1363 | 94a: 43 e0 ldi r20, 0x03 ; 3 |
||
1364 | 94c: 64 2f mov r22, r20 |
||
1365 | 94e: ce 01 movw r24, r28 |
||
1366 | 950: 8b 96 adiw r24, 0x2b ; 43 |
||
1367 | 952: 0e 94 92 03 call 0x724 <Decode64> |
||
1368 | TX_DigTransferKanalL = tmp_char_arr3[0]; |
||
1369 | 956: 8b a5 ldd r24, Y+43 ; 0x2b |
||
1370 | 958: 80 93 96 00 sts 0x0096, r24 |
||
1371 | TX_DigTransferKanalH = tmp_char_arr3[1]; |
||
1372 | 95c: 8c a5 ldd r24, Y+44 ; 0x2c |
||
1373 | 95e: 80 93 95 00 sts 0x0095, r24 |
||
1374 | TX_DigTransferKanalDaten = tmp_char_arr3[2]; |
||
1375 | 962: 8d a5 ldd r24, Y+45 ; 0x2d |
||
1376 | 964: 80 93 94 00 sts 0x0094, r24 |
||
1377 | 968: ad 96 adiw r28, 0x2d ; 45 |
||
1378 | 96a: 0f b6 in r0, 0x3f ; 63 |
||
1379 | 96c: f8 94 cli |
||
1380 | 96e: de bf out 0x3e, r29 ; 62 |
||
1381 | 970: 0f be out 0x3f, r0 ; 63 |
||
1382 | 972: cd bf out 0x3d, r28 ; 61 |
||
1383 | 974: df 91 pop r29 |
||
1384 | 976: cf 91 pop r28 |
||
1385 | 978: 08 95 ret |
||
1386 | |||
1387 | 0000097a <uart_putchar>: |
||
1388 | //if(RxdBuffer[1] == 'b') LCD_printfxy(0,0,"b:%4d %2x",(int)TX_DigTransferKanalH * 256 + TX_DigTransferKanalL,TX_DigTransferKanalDaten); |
||
1389 | //if(RxdBuffer[1] == 'c') LCD_printfxy(0,1,"c:%4d %2x",(int)TX_DigTransferKanalH * 256 + TX_DigTransferKanalL,TX_DigTransferKanalDaten); |
||
1390 | break; |
||
1391 | /* |
||
1392 | unsigned char Digital[13]; // 0 = Taster, Hauptkarte |
||
1393 | // 1 + 2 = Debugkanäle |
||
1394 | // 3 = Digin, Hauptkarte |
||
1395 | // 4 = Relais, Hauptkarte |
||
1396 | // 5 + 6 = Extern IO1 (12Bit ein 4 Bit aus) |
||
1397 | // 7 + 8 = Extern IO2 (12Bit ein 4 Bit aus) |
||
1398 | // 9 + 10 = Extern IO3 (12Bit ein 4 Bit aus) |
||
1399 | // 11 + 12= Extern IO4 (12Bit ein 4 Bit aus) |
||
1400 | */ |
||
1401 | |||
1402 | /* case 'd': // Debug Eingangsdaten |
||
1403 | Decode64((unsigned char *) &DebugIn,sizeof(DebugIn),3,AnzahlEmpfangsBytes); |
||
1404 | for(unsigned char i=0; i<4;i++) |
||
1405 | { |
||
1406 | EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2], DebugIn.Analog[i]); |
||
1407 | EE_CheckAndWrite(&EE_Buffer[EE_DEBUGWERTE + i*2 + 1], DebugIn.Analog[i] >> 8); |
||
1408 | } |
||
1409 | break; |
||
1410 | case 'g': // "Get"-Anforderung für Debug-Daten // Bei Get werden die vom PC einstellbaren Werte vom PC zurückgelesen |
||
1411 | DebugGetAnforderung = 1; |
||
1412 | break; |
||
1413 | case 'v': // Version-Anforderung und Ausbaustufe |
||
1414 | GetVersionAnforderung = 1; |
||
1415 | break; |
||
1416 | case 'u': // Uhr stellen |
||
1417 | Decode64((unsigned char *) &tmp_int_arr2[0],sizeof(tmp_int_arr2),3,AnzahlEmpfangsBytes); |
||
1418 | ZEITWERT = tmp_int_arr2[0]; |
||
1419 | SEK = tmp_int_arr2[1]; |
||
1420 | make_time_variables(ZEITWERT); |
||
1421 | RTC_SetTime(STD, MIN, SEK); |
||
1422 | RTC_SetWDay(TAG); |
||
1423 | break; |
||
1424 | case 'i': // Intervalle für die Datenübertragung |
||
1425 | Decode64((unsigned char *) &tmp_int_arr2[0],sizeof(tmp_int_arr2),3,AnzahlEmpfangsBytes); |
||
1426 | Debug_Timer_Intervall = tmp_int_arr2[0]; |
||
1427 | Debug_Display_Intervall = tmp_int_arr2[1]; |
||
1428 | SendeDummyDaten = 1; |
||
1429 | break; |
||
1430 | case 's': // single Step 1 = Stop 2 = noch einen Zyklus 3 = noch 2 Zyklen |
||
1431 | Decode64((unsigned char *) &tmp_int_arr1[0],sizeof(tmp_int_arr2),3,AnzahlEmpfangsBytes); |
||
1432 | SingleStep = tmp_int_arr1[0]; |
||
1433 | break; |
||
1434 | */ |
||
1435 | } |
||
1436 | } |
||
1437 | |||
1438 | //############################################################################ |
||
1439 | //Routine für die Serielle Ausgabe |
||
1440 | int uart_putchar (char c) |
||
1441 | //############################################################################ |
||
1442 | { |
||
1443 | 97a: cf 93 push r28 |
||
1444 | 97c: c8 2f mov r28, r24 |
||
1445 | if (c == '\n') |
||
1446 | 97e: 8a 30 cpi r24, 0x0A ; 10 |
||
1447 | 980: 19 f4 brne .+6 ; 0x988 <uart_putchar+0xe> |
||
1448 | uart_putchar('\r'); |
||
1449 | 982: 8d e0 ldi r24, 0x0D ; 13 |
||
1450 | 984: 0e 94 bd 04 call 0x97a <uart_putchar> |
||
1451 | //Warten solange bis Zeichen gesendet wurde |
||
1452 | loop_until_bit_is_set(USR, UDRE); |
||
1453 | 988: 5d 9b sbis 0x0b, 5 ; 11 |
||
1454 | 98a: fe cf rjmp .-4 ; 0x988 <uart_putchar+0xe> |
||
1455 | //Ausgabe des Zeichens |
||
1456 | UDR = c; |
||
1457 | 98c: cc b9 out 0x0c, r28 ; 12 |
||
1458 | |||
1459 | return (0); |
||
1460 | } |
||
1461 | 98e: 80 e0 ldi r24, 0x00 ; 0 |
||
1462 | 990: 90 e0 ldi r25, 0x00 ; 0 |
||
1463 | 992: cf 91 pop r28 |
||
1464 | 994: 08 95 ret |
||
1465 | |||
1466 | 00000996 <WriteProgramData>: |
||
1467 | |||
1468 | // -------------------------------------------------------------------------- |
||
1469 | void WriteProgramData(unsigned int pos, unsigned char wert) |
||
1470 | { |
||
1471 | 996: 08 95 ret |
||
1472 | |||
1473 | 00000998 <UART_Init>: |
||
1474 | //if (ProgramLocation == IN_RAM) Buffer[pos] = wert; |
||
1475 | // else eeprom_write_byte(&EE_Buffer[pos], wert); |
||
1476 | // Buffer[pos] = wert; |
||
1477 | } |
||
1478 | |||
1479 | //############################################################################ |
||
1480 | //INstallation der Seriellen Schnittstelle |
||
1481 | void UART_Init (void) |
||
1482 | //############################################################################ |
||
1483 | { |
||
1484 | //Enable TXEN im Register UCR TX-Data Enable & RX Enable |
||
1485 | |||
1486 | UCR=(1 << TXEN) | (1 << RXEN); |
||
1487 | 998: 88 e1 ldi r24, 0x18 ; 24 |
||
1488 | 99a: 8a b9 out 0x0a, r24 ; 10 |
||
1489 | // UART Double Speed (U2X) |
||
1490 | USR |= (1<<U2X); |
||
1491 | 99c: 59 9a sbi 0x0b, 1 ; 11 |
||
1492 | // RX-Interrupt Freigabe |
||
1493 | UCSRB |= (1<<RXCIE); |
||
1494 | 99e: 57 9a sbi 0x0a, 7 ; 10 |
||
1495 | // TX-Interrupt Freigabe |
||
1496 | UCSRB |= (1<<TXCIE); |
||
1497 | 9a0: 56 9a sbi 0x0a, 6 ; 10 |
||
1498 | |||
1499 | //Teiler wird gesetzt |
||
1500 | UBRR=(SYSCLK / (BAUD_RATE * 8L) - 1); |
||
1501 | 9a2: 81 e2 ldi r24, 0x21 ; 33 |
||
1502 | 9a4: 89 b9 out 0x09, r24 ; 9 |
||
1503 | //UBRR = 33; |
||
1504 | //öffnet einen Kanal für printf (STDOUT) |
||
1505 | fdevopen (uart_putchar, NULL); |
||
1506 | 9a6: 60 e0 ldi r22, 0x00 ; 0 |
||
1507 | 9a8: 70 e0 ldi r23, 0x00 ; 0 |
||
1508 | 9aa: 8d eb ldi r24, 0xBD ; 189 |
||
1509 | 9ac: 94 e0 ldi r25, 0x04 ; 4 |
||
1510 | 9ae: 0e 94 71 0c call 0x18e2 <fdevopen> |
||
1511 | 9b2: 08 95 ret |
||
1512 | |||
1513 | 000009b4 <SendeRemoteTasten>: |
||
1514 | //sbi(PORTD,4); |
||
1515 | } |
||
1516 | |||
1517 | /* |
||
1518 | struct str_DebugIn |
||
1519 | { |
||
1520 | unsigned char Digital[2]; |
||
1521 | unsigned char RemoteTasten; |
||
1522 | unsigned int Analog[4]; |
||
1523 | }; |
||
1524 | */ |
||
1525 | void SendeRemoteTasten(unsigned char keys) |
||
1526 | { |
||
1527 | 9b4: 98 2f mov r25, r24 |
||
1528 | while(!UebertragungAbgeschlossen); // evtl warten |
||
1529 | 9b6: 80 91 6e 00 lds r24, 0x006E |
||
1530 | 9ba: 88 23 and r24, r24 |
||
1531 | 9bc: e1 f3 breq .-8 ; 0x9b6 <SendeRemoteTasten+0x2> |
||
1532 | DebugIn.RemoteTasten = keys; |
||
1533 | 9be: 90 93 c0 00 sts 0x00C0, r25 |
||
1534 | DebugIn.Analog[0] = AnalogWerte[0]; |
||
1535 | 9c2: 80 91 ca 01 lds r24, 0x01CA |
||
1536 | 9c6: 90 91 cb 01 lds r25, 0x01CB |
||
1537 | 9ca: 90 93 c2 00 sts 0x00C2, r25 |
||
1538 | 9ce: 80 93 c1 00 sts 0x00C1, r24 |
||
1539 | DebugIn.Analog[1] = AnalogWerte[1]; |
||
1540 | 9d2: 80 91 cc 01 lds r24, 0x01CC |
||
1541 | 9d6: 90 91 cd 01 lds r25, 0x01CD |
||
1542 | 9da: 90 93 c4 00 sts 0x00C4, r25 |
||
1543 | 9de: 80 93 c3 00 sts 0x00C3, r24 |
||
1544 | DebugIn.Analog[2] = AnalogWerte[2]; |
||
1545 | 9e2: 80 91 ce 01 lds r24, 0x01CE |
||
1546 | 9e6: 90 91 cf 01 lds r25, 0x01CF |
||
1547 | 9ea: 90 93 c6 00 sts 0x00C6, r25 |
||
1548 | 9ee: 80 93 c5 00 sts 0x00C5, r24 |
||
1549 | DebugIn.Analog[3] = IR_Code; |
||
1550 | 9f2: 80 91 c7 01 lds r24, 0x01C7 |
||
1551 | 9f6: 90 91 c8 01 lds r25, 0x01C8 |
||
1552 | 9fa: 90 93 c8 00 sts 0x00C8, r25 |
||
1553 | 9fe: 80 93 c7 00 sts 0x00C7, r24 |
||
1554 | SendOutData('d',SlaveAdresse,(unsigned char *) &DebugIn,sizeof(DebugIn)); |
||
1555 | a02: 2b e0 ldi r18, 0x0B ; 11 |
||
1556 | a04: 4e eb ldi r20, 0xBE ; 190 |
||
1557 | a06: 50 e0 ldi r21, 0x00 ; 0 |
||
1558 | a08: 60 91 64 00 lds r22, 0x0064 |
||
1559 | a0c: 84 e6 ldi r24, 0x64 ; 100 |
||
1560 | a0e: 0e 94 1e 03 call 0x63c <SendOutData> |
||
1561 | a12: 08 95 ret |
||
1562 | |||
1563 | 00000a14 <SendIntervalle>: |
||
1564 | } |
||
1565 | |||
1566 | void SendIntervalle(unsigned int debug, unsigned int disp) |
||
1567 | { |
||
1568 | a14: cf 93 push r28 |
||
1569 | a16: df 93 push r29 |
||
1570 | a18: cd b7 in r28, 0x3d ; 61 |
||
1571 | a1a: de b7 in r29, 0x3e ; 62 |
||
1572 | a1c: 24 97 sbiw r28, 0x04 ; 4 |
||
1573 | a1e: 0f b6 in r0, 0x3f ; 63 |
||
1574 | a20: f8 94 cli |
||
1575 | a22: de bf out 0x3e, r29 ; 62 |
||
1576 | a24: 0f be out 0x3f, r0 ; 63 |
||
1577 | a26: cd bf out 0x3d, r28 ; 61 |
||
1578 | unsigned int tmp_int_arr2[2]; |
||
1579 | tmp_int_arr2[0] = debug; |
||
1580 | a28: 9a 83 std Y+2, r25 ; 0x02 |
||
1581 | a2a: 89 83 std Y+1, r24 ; 0x01 |
||
1582 | tmp_int_arr2[1] = disp; |
||
1583 | a2c: 7c 83 std Y+4, r23 ; 0x04 |
||
1584 | a2e: 6b 83 std Y+3, r22 ; 0x03 |
||
1585 | while(!UebertragungAbgeschlossen); // evtl warten |
||
1586 | a30: 80 91 6e 00 lds r24, 0x006E |
||
1587 | a34: 88 23 and r24, r24 |
||
1588 | a36: e1 f3 breq .-8 ; 0xa30 <SendIntervalle+0x1c> |
||
1589 | SendOutData('i',SlaveAdresse,(unsigned char *) &tmp_int_arr2,sizeof(tmp_int_arr2)); |
||
1590 | a38: 24 e0 ldi r18, 0x04 ; 4 |
||
1591 | a3a: ae 01 movw r20, r28 |
||
1592 | a3c: 4f 5f subi r20, 0xFF ; 255 |
||
1593 | a3e: 5f 4f sbci r21, 0xFF ; 255 |
||
1594 | a40: 60 91 64 00 lds r22, 0x0064 |
||
1595 | a44: 89 e6 ldi r24, 0x69 ; 105 |
||
1596 | a46: 0e 94 1e 03 call 0x63c <SendOutData> |
||
1597 | a4a: 24 96 adiw r28, 0x04 ; 4 |
||
1598 | a4c: 0f b6 in r0, 0x3f ; 63 |
||
1599 | a4e: f8 94 cli |
||
1600 | a50: de bf out 0x3e, r29 ; 62 |
||
1601 | a52: 0f be out 0x3f, r0 ; 63 |
||
1602 | a54: cd bf out 0x3d, r28 ; 61 |
||
1603 | a56: df 91 pop r29 |
||
1604 | a58: cf 91 pop r28 |
||
1605 | a5a: 08 95 ret |
||
1606 | |||
1607 | 00000a5c <ClearIntervalle>: |
||
1608 | } |
||
1609 | |||
1610 | void ClearIntervalle(void) |
||
1611 | { |
||
1612 | a5c: cf 93 push r28 |
||
1613 | a5e: df 93 push r29 |
||
1614 | a60: cd b7 in r28, 0x3d ; 61 |
||
1615 | a62: de b7 in r29, 0x3e ; 62 |
||
1616 | a64: 24 97 sbiw r28, 0x04 ; 4 |
||
1617 | a66: 0f b6 in r0, 0x3f ; 63 |
||
1618 | a68: f8 94 cli |
||
1619 | a6a: de bf out 0x3e, r29 ; 62 |
||
1620 | a6c: 0f be out 0x3f, r0 ; 63 |
||
1621 | a6e: cd bf out 0x3d, r28 ; 61 |
||
1622 | unsigned int tmp_int_arr2[2]; |
||
1623 | tmp_int_arr2[0] = 0; |
||
1624 | a70: 1a 82 std Y+2, r1 ; 0x02 |
||
1625 | a72: 19 82 std Y+1, r1 ; 0x01 |
||
1626 | tmp_int_arr2[1] = 0; |
||
1627 | a74: 1c 82 std Y+4, r1 ; 0x04 |
||
1628 | a76: 1b 82 std Y+3, r1 ; 0x03 |
||
1629 | while(!UebertragungAbgeschlossen); // evtl warten |
||
1630 | a78: 80 91 6e 00 lds r24, 0x006E |
||
1631 | a7c: 88 23 and r24, r24 |
||
1632 | a7e: e1 f3 breq .-8 ; 0xa78 <ClearIntervalle+0x1c> |
||
1633 | SendOutData('i',0,(unsigned char *) &tmp_int_arr2,sizeof(tmp_int_arr2)); // 0= an alle |
||
1634 | a80: 24 e0 ldi r18, 0x04 ; 4 |
||
1635 | a82: ae 01 movw r20, r28 |
||
1636 | a84: 4f 5f subi r20, 0xFF ; 255 |
||
1637 | a86: 5f 4f sbci r21, 0xFF ; 255 |
||
1638 | a88: 60 e0 ldi r22, 0x00 ; 0 |
||
1639 | a8a: 89 e6 ldi r24, 0x69 ; 105 |
||
1640 | a8c: 0e 94 1e 03 call 0x63c <SendOutData> |
||
1641 | a90: 24 96 adiw r28, 0x04 ; 4 |
||
1642 | a92: 0f b6 in r0, 0x3f ; 63 |
||
1643 | a94: f8 94 cli |
||
1644 | a96: de bf out 0x3e, r29 ; 62 |
||
1645 | a98: 0f be out 0x3f, r0 ; 63 |
||
1646 | a9a: cd bf out 0x3d, r28 ; 61 |
||
1647 | a9c: df 91 pop r29 |
||
1648 | a9e: cf 91 pop r28 |
||
1649 | aa0: 08 95 ret |
||
1650 | |||
1651 | 00000aa2 <DatenUebertragung>: |
||
1652 | } |
||
1653 | |||
1654 | void DatenUebertragung(unsigned char key) |
||
1655 | { |
||
1656 | aa2: cf 93 push r28 |
||
1657 | aa4: df 93 push r29 |
||
1658 | aa6: cd b7 in r28, 0x3d ; 61 |
||
1659 | aa8: de b7 in r29, 0x3e ; 62 |
||
1660 | aaa: 25 97 sbiw r28, 0x05 ; 5 |
||
1661 | aac: 0f b6 in r0, 0x3f ; 63 |
||
1662 | aae: f8 94 cli |
||
1663 | ab0: de bf out 0x3e, r29 ; 62 |
||
1664 | ab2: 0f be out 0x3f, r0 ; 63 |
||
1665 | ab4: cd bf out 0x3d, r28 ; 61 |
||
1666 | ab6: 98 2f mov r25, r24 |
||
1667 | static unsigned char state = 1; |
||
1668 | unsigned char temp_1[1]; |
||
1669 | unsigned char temp_2[2]; |
||
1670 | unsigned char temp_3[3]; |
||
1671 | unsigned int tmp_int_arr2[2]; |
||
1672 | while(!UebertragungAbgeschlossen); // evtl warten |
||
1673 | ab8: 80 91 6e 00 lds r24, 0x006E |
||
1674 | abc: 88 23 and r24, r24 |
||
1675 | abe: e1 f3 breq .-8 ; 0xab8 <DatenUebertragung+0x16> |
||
1676 | static unsigned char KanalSlave = 1; |
||
1677 | |||
1678 | if(PollDisplay) |
||
1679 | ac0: 80 91 ed 00 lds r24, 0x00ED |
||
1680 | ac4: 88 23 and r24, r24 |
||
1681 | ac6: e1 f0 breq .+56 ; 0xb00 <DatenUebertragung+0x5e> |
||
1682 | { |
||
1683 | temp_2[0] = key; |
||
1684 | ac8: 9c 83 std Y+4, r25 ; 0x04 |
||
1685 | temp_2[1] = 6; |
||
1686 | aca: 86 e0 ldi r24, 0x06 ; 6 |
||
1687 | acc: 8d 83 std Y+5, r24 ; 0x05 |
||
1688 | if(DisplayZeilen == 4) temp_2[1] = 4 + 9; // anzahl Zeilen --> + 8 bedeutet: ersten Pollingzyklus freilassen |
||
1689 | ace: 80 91 65 00 lds r24, 0x0065 |
||
1690 | ad2: 84 30 cpi r24, 0x04 ; 4 |
||
1691 | ad4: 11 f4 brne .+4 ; 0xada <DatenUebertragung+0x38> |
||
1692 | ad6: 8d e0 ldi r24, 0x0D ; 13 |
||
1693 | ad8: 01 c0 rjmp .+2 ; 0xadc <DatenUebertragung+0x3a> |
||
1694 | else temp_2[1] = 2 + 9; |
||
1695 | ada: 8b e0 ldi r24, 0x0B ; 11 |
||
1696 | adc: 8d 83 std Y+5, r24 ; 0x05 |
||
1697 | SendOutData('h',SlaveAdresse,(unsigned char *) &temp_2,sizeof(temp_2)); |
||
1698 | ade: 22 e0 ldi r18, 0x02 ; 2 |
||
1699 | ae0: ae 01 movw r20, r28 |
||
1700 | ae2: 4c 5f subi r20, 0xFC ; 252 |
||
1701 | ae4: 5f 4f sbci r21, 0xFF ; 255 |
||
1702 | ae6: 60 91 64 00 lds r22, 0x0064 |
||
1703 | aea: 88 e6 ldi r24, 0x68 ; 104 |
||
1704 | aec: 0e 94 1e 03 call 0x63c <SendOutData> |
||
1705 | ErwarteAntwort = '0'; |
||
1706 | af0: 80 e3 ldi r24, 0x30 ; 48 |
||
1707 | af2: 80 93 6d 00 sts 0x006D, r24 |
||
1708 | DisplayBusy = 90; |
||
1709 | af6: 8a e5 ldi r24, 0x5A ; 90 |
||
1710 | af8: 80 93 93 00 sts 0x0093, r24 |
||
1711 | PollDisplay = 0; |
||
1712 | afc: 10 92 ed 00 sts 0x00ED, r1 |
||
1713 | } |
||
1714 | |||
1715 | if(!DisplayBusy) |
||
1716 | b00: 60 91 93 00 lds r22, 0x0093 |
||
1717 | b04: 66 23 and r22, r22 |
||
1718 | b06: e1 f5 brne .+120 ; 0xb80 <DatenUebertragung+0xde> |
||
1719 | switch(state) |
||
1720 | b08: 80 91 6f 00 lds r24, 0x006F |
||
1721 | b0c: 99 27 eor r25, r25 |
||
1722 | b0e: 81 30 cpi r24, 0x01 ; 1 |
||
1723 | b10: 91 05 cpc r25, r1 |
||
1724 | b12: 19 f0 breq .+6 ; 0xb1a <DatenUebertragung+0x78> |
||
1725 | b14: 02 97 sbiw r24, 0x02 ; 2 |
||
1726 | b16: e9 f0 breq .+58 ; 0xb52 <DatenUebertragung+0xb0> |
||
1727 | b18: 30 c0 rjmp .+96 ; 0xb7a <DatenUebertragung+0xd8> |
||
1728 | { |
||
1729 | case 1:// Display |
||
1730 | SendOutData('k',KanalSlave,(unsigned char *) &temp_3,sizeof(temp_3)); |
||
1731 | b1a: 23 e0 ldi r18, 0x03 ; 3 |
||
1732 | b1c: ae 01 movw r20, r28 |
||
1733 | b1e: 4f 5f subi r20, 0xFF ; 255 |
||
1734 | b20: 5f 4f sbci r21, 0xFF ; 255 |
||
1735 | b22: 60 91 70 00 lds r22, 0x0070 |
||
1736 | b26: 8b e6 ldi r24, 0x6B ; 107 |
||
1737 | b28: 0e 94 1e 03 call 0x63c <SendOutData> |
||
1738 | ErwarteAntwort = 'K'; |
||
1739 | b2c: 8b e4 ldi r24, 0x4B ; 75 |
||
1740 | b2e: 80 93 6d 00 sts 0x006D, r24 |
||
1741 | if(++KanalSlave > AnzahlTeilnehmer) KanalSlave = 1; |
||
1742 | b32: 80 91 70 00 lds r24, 0x0070 |
||
1743 | b36: 8f 5f subi r24, 0xFF ; 255 |
||
1744 | b38: 80 93 70 00 sts 0x0070, r24 |
||
1745 | b3c: 90 91 6c 00 lds r25, 0x006C |
||
1746 | b40: 98 17 cp r25, r24 |
||
1747 | b42: 18 f4 brcc .+6 ; 0xb4a <DatenUebertragung+0xa8> |
||
1748 | b44: 81 e0 ldi r24, 0x01 ; 1 |
||
1749 | b46: 80 93 70 00 sts 0x0070, r24 |
||
1750 | state++; |
||
1751 | b4a: 80 91 6f 00 lds r24, 0x006F |
||
1752 | b4e: 8f 5f subi r24, 0xFF ; 255 |
||
1753 | b50: 15 c0 rjmp .+42 ; 0xb7c <DatenUebertragung+0xda> |
||
1754 | break; |
||
1755 | case 2: |
||
1756 | temp_3[0] = TX_DigTransferKanalL; |
||
1757 | b52: 80 91 96 00 lds r24, 0x0096 |
||
1758 | b56: 89 83 std Y+1, r24 ; 0x01 |
||
1759 | temp_3[1] = TX_DigTransferKanalH; |
||
1760 | b58: 80 91 95 00 lds r24, 0x0095 |
||
1761 | b5c: 8a 83 std Y+2, r24 ; 0x02 |
||
1762 | temp_3[2] = TX_DigTransferKanalDaten; |
||
1763 | b5e: 80 91 94 00 lds r24, 0x0094 |
||
1764 | b62: 8b 83 std Y+3, r24 ; 0x03 |
||
1765 | SendOutData('l',0,(unsigned char *) &temp_3,sizeof(temp_3)); |
||
1766 | b64: 23 e0 ldi r18, 0x03 ; 3 |
||
1767 | b66: ae 01 movw r20, r28 |
||
1768 | b68: 4f 5f subi r20, 0xFF ; 255 |
||
1769 | b6a: 5f 4f sbci r21, 0xFF ; 255 |
||
1770 | b6c: 8c e6 ldi r24, 0x6C ; 108 |
||
1771 | b6e: 0e 94 1e 03 call 0x63c <SendOutData> |
||
1772 | AntwortEingetroffen = 1; // erwarte keine Antwort |
||
1773 | b72: 81 e0 ldi r24, 0x01 ; 1 |
||
1774 | b74: 80 93 92 00 sts 0x0092, r24 |
||
1775 | b78: 01 c0 rjmp .+2 ; 0xb7c <DatenUebertragung+0xda> |
||
1776 | state = 1; |
||
1777 | break; |
||
1778 | |||
1779 | default: state = 1; |
||
1780 | b7a: 81 e0 ldi r24, 0x01 ; 1 |
||
1781 | b7c: 80 93 6f 00 sts 0x006F, r24 |
||
1782 | b80: 25 96 adiw r28, 0x05 ; 5 |
||
1783 | b82: 0f b6 in r0, 0x3f ; 63 |
||
1784 | b84: f8 94 cli |
||
1785 | b86: de bf out 0x3e, r29 ; 62 |
||
1786 | b88: 0f be out 0x3f, r0 ; 63 |
||
1787 | b8a: cd bf out 0x3d, r28 ; 61 |
||
1788 | b8c: df 91 pop r29 |
||
1789 | b8e: cf 91 pop r28 |
||
1790 | b90: 08 95 ret |
||
1791 | |||
1792 | 00000b92 <_long_delay>: |
||
1793 | #include "main.h" |
||
1794 | |||
1795 | void _long_delay(void) |
||
1796 | { |
||
1797 | long t = 5000; |
||
1798 | b92: 88 e8 ldi r24, 0x88 ; 136 |
||
1799 | b94: 93 e1 ldi r25, 0x13 ; 19 |
||
1800 | b96: a0 e0 ldi r26, 0x00 ; 0 |
||
1801 | b98: b0 e0 ldi r27, 0x00 ; 0 |
||
1802 | while (t--); |
||
1803 | b9a: 03 97 sbiw r24, 0x03 ; 3 |
||
1804 | b9c: a1 09 sbc r26, r1 |
||
1805 | b9e: b1 09 sbc r27, r1 |
||
1806 | ba0: 8f 3f cpi r24, 0xFF ; 255 |
||
1807 | ba2: 2f ef ldi r18, 0xFF ; 255 |
||
1808 | ba4: 92 07 cpc r25, r18 |
||
1809 | ba6: 2f ef ldi r18, 0xFF ; 255 |
||
1810 | ba8: a2 07 cpc r26, r18 |
||
1811 | baa: 2f ef ldi r18, 0xFF ; 255 |
||
1812 | bac: b2 07 cpc r27, r18 |
||
1813 | bae: a9 f7 brne .-22 ; 0xb9a <_long_delay+0x8> |
||
1814 | bb0: 08 95 ret |
||
1815 | |||
1816 | 00000bb2 <_short_delay>: |
||
1817 | } |
||
1818 | |||
1819 | void _short_delay(void) |
||
1820 | { |
||
1821 | int t = 500; |
||
1822 | bb2: 84 ef ldi r24, 0xF4 ; 244 |
||
1823 | bb4: 91 e0 ldi r25, 0x01 ; 1 |
||
1824 | while (t--); |
||
1825 | bb6: 03 97 sbiw r24, 0x03 ; 3 |
||
1826 | bb8: 2f ef ldi r18, 0xFF ; 255 |
||
1827 | bba: 8f 3f cpi r24, 0xFF ; 255 |
||
1828 | bbc: 92 07 cpc r25, r18 |
||
1829 | bbe: d9 f7 brne .-10 ; 0xbb6 <_short_delay+0x4> |
||
1830 | bc0: 08 95 ret |
||
1831 | |||
1832 | 00000bc2 <_lcd_write_command>: |
||
1833 | } |
||
1834 | |||
1835 | |||
1836 | void _lcd_write_command(unsigned char data) |
||
1837 | { |
||
1838 | bc2: 28 2f mov r18, r24 |
||
1839 | LCD_PORT_w = (data & 0xf0) | DISPLAY_EN; |
||
1840 | bc4: 80 7f andi r24, 0xF0 ; 240 |
||
1841 | bc6: 98 2f mov r25, r24 |
||
1842 | bc8: 94 60 ori r25, 0x04 ; 4 |
||
1843 | bca: 95 bb out 0x15, r25 ; 21 |
||
1844 | LCD_PORT_w = (data & 0xf0) | DISPLAY_EN; |
||
1845 | bcc: 95 bb out 0x15, r25 ; 21 |
||
1846 | LCD_PORT_w = (data & 0xf0); |
||
1847 | bce: 85 bb out 0x15, r24 ; 21 |
||
1848 | LCD_PORT_w = (data & 0xf0); |
||
1849 | bd0: 85 bb out 0x15, r24 ; 21 |
||
1850 | LCD_PORT_w = (data << 4) | DISPLAY_EN; |
||
1851 | bd2: 82 2f mov r24, r18 |
||
1852 | bd4: 99 27 eor r25, r25 |
||
1853 | bd6: 34 e0 ldi r19, 0x04 ; 4 |
||
1854 | bd8: 88 0f add r24, r24 |
||
1855 | bda: 99 1f adc r25, r25 |
||
1856 | bdc: 3a 95 dec r19 |
||
1857 | bde: e1 f7 brne .-8 ; 0xbd8 <_lcd_write_command+0x16> |
||
1858 | be0: 84 60 ori r24, 0x04 ; 4 |
||
1859 | be2: 85 bb out 0x15, r24 ; 21 |
||
1860 | LCD_PORT_w = (data << 4) | DISPLAY_EN; |
||
1861 | be4: 85 bb out 0x15, r24 ; 21 |
||
1862 | LCD_PORT_w = (data << 4); |
||
1863 | be6: 22 95 swap r18 |
||
1864 | be8: 20 7f andi r18, 0xF0 ; 240 |
||
1865 | bea: 25 bb out 0x15, r18 ; 21 |
||
1866 | bec: 08 95 ret |
||
1867 | |||
1868 | 00000bee <_lcd_write_4bit>: |
||
1869 | } |
||
1870 | |||
1871 | void _lcd_write_4bit(unsigned char data) |
||
1872 | { |
||
1873 | LCD_PORT_w = (data << 4) | DISPLAY_EN; |
||
1874 | bee: 28 2f mov r18, r24 |
||
1875 | bf0: 33 27 eor r19, r19 |
||
1876 | bf2: 44 e0 ldi r20, 0x04 ; 4 |
||
1877 | bf4: 22 0f add r18, r18 |
||
1878 | bf6: 33 1f adc r19, r19 |
||
1879 | bf8: 4a 95 dec r20 |
||
1880 | bfa: e1 f7 brne .-8 ; 0xbf4 <_lcd_write_4bit+0x6> |
||
1881 | bfc: 92 2f mov r25, r18 |
||
1882 | bfe: 94 60 ori r25, 0x04 ; 4 |
||
1883 | c00: 95 bb out 0x15, r25 ; 21 |
||
1884 | LCD_PORT_w = (data << 4) | DISPLAY_EN; |
||
1885 | c02: 95 bb out 0x15, r25 ; 21 |
||
1886 | LCD_PORT_w = (data << 4); |
||
1887 | c04: 82 95 swap r24 |
||
1888 | c06: 80 7f andi r24, 0xF0 ; 240 |
||
1889 | c08: 85 bb out 0x15, r24 ; 21 |
||
1890 | c0a: 08 95 ret |
||
1891 | |||
1892 | 00000c0c <lcd_write_byte>: |
||
1893 | } |
||
1894 | |||
1895 | void lcd_write_byte(unsigned char data) |
||
1896 | { |
||
1897 | c0c: 28 2f mov r18, r24 |
||
1898 | LCD_PORT_w = (data & 0xf0) | DISPLAY_EN | DISPLAY_RS; |
||
1899 | c0e: 80 7f andi r24, 0xF0 ; 240 |
||
1900 | c10: 98 2f mov r25, r24 |
||
1901 | c12: 95 60 ori r25, 0x05 ; 5 |
||
1902 | c14: 95 bb out 0x15, r25 ; 21 |
||
1903 | LCD_PORT_w = (data & 0xf0) | DISPLAY_RS; |
||
1904 | c16: 81 60 ori r24, 0x01 ; 1 |
||
1905 | c18: 85 bb out 0x15, r24 ; 21 |
||
1906 | LCD_PORT_w = (data << 4) | DISPLAY_EN | DISPLAY_RS; |
||
1907 | c1a: 82 2f mov r24, r18 |
||
1908 | c1c: 99 27 eor r25, r25 |
||
1909 | c1e: 54 e0 ldi r21, 0x04 ; 4 |
||
1910 | c20: 88 0f add r24, r24 |
||
1911 | c22: 99 1f adc r25, r25 |
||
1912 | c24: 5a 95 dec r21 |
||
1913 | c26: e1 f7 brne .-8 ; 0xc20 <lcd_write_byte+0x14> |
||
1914 | c28: 28 2f mov r18, r24 |
||
1915 | c2a: 25 60 ori r18, 0x05 ; 5 |
||
1916 | c2c: 25 bb out 0x15, r18 ; 21 |
||
1917 | LCD_PORT_w = (data << 4) | DISPLAY_RS; |
||
1918 | c2e: 81 60 ori r24, 0x01 ; 1 |
||
1919 | c30: 85 bb out 0x15, r24 ; 21 |
||
1920 | c32: 08 95 ret |
||
1921 | |||
1922 | 00000c34 <my_pput>: |
||
1923 | } |
||
1924 | |||
1925 | |||
1926 | int my_pput(int zeichen) |
||
1927 | { |
||
1928 | lcd_write_byte((char) zeichen); |
||
1929 | c34: 0e 94 06 06 call 0xc0c <lcd_write_byte> |
||
1930 | return(1); |
||
1931 | } |
||
1932 | c38: 81 e0 ldi r24, 0x01 ; 1 |
||
1933 | c3a: 90 e0 ldi r25, 0x00 ; 0 |
||
1934 | c3c: 08 95 ret |
||
1935 | |||
1936 | 00000c3e <LCD_Init>: |
||
1937 | |||
1938 | // initialize the LCD controller |
||
1939 | void LCD_Init(void) |
||
1940 | { |
||
1941 | LCD_PORT_DDR = 0xff;//0xf0 | DISPLAY_RS | DISPLAY_EN; |
||
1942 | c3e: 8f ef ldi r24, 0xFF ; 255 |
||
1943 | c40: 84 bb out 0x14, r24 ; 20 |
||
1944 | _long_delay(); |
||
1945 | c42: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1946 | _long_delay(); |
||
1947 | c46: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1948 | _long_delay(); |
||
1949 | c4a: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1950 | _lcd_write_4bit(0x03); // noch 8 Bit |
||
1951 | c4e: 83 e0 ldi r24, 0x03 ; 3 |
||
1952 | c50: 0e 94 f7 05 call 0xbee <_lcd_write_4bit> |
||
1953 | _long_delay(); |
||
1954 | c54: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1955 | _lcd_write_4bit(0x03); // noch 8 Bit |
||
1956 | c58: 83 e0 ldi r24, 0x03 ; 3 |
||
1957 | c5a: 0e 94 f7 05 call 0xbee <_lcd_write_4bit> |
||
1958 | _long_delay(); |
||
1959 | c5e: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1960 | _lcd_write_4bit(0x03); // noch 8 Bit |
||
1961 | c62: 83 e0 ldi r24, 0x03 ; 3 |
||
1962 | c64: 0e 94 f7 05 call 0xbee <_lcd_write_4bit> |
||
1963 | _long_delay(); |
||
1964 | c68: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1965 | _lcd_write_4bit(0x02); // jetzt 4 Bit |
||
1966 | c6c: 82 e0 ldi r24, 0x02 ; 2 |
||
1967 | c6e: 0e 94 f7 05 call 0xbee <_lcd_write_4bit> |
||
1968 | _long_delay(); |
||
1969 | c72: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1970 | _lcd_write_command(0x28); // 4 Bit Zweizeilig |
||
1971 | c76: 88 e2 ldi r24, 0x28 ; 40 |
||
1972 | c78: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
1973 | _long_delay(); |
||
1974 | c7c: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1975 | _lcd_write_command(0x08); // Display aus |
||
1976 | c80: 88 e0 ldi r24, 0x08 ; 8 |
||
1977 | c82: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
1978 | _long_delay(); |
||
1979 | c86: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1980 | _lcd_write_command(0x01); // Clear |
||
1981 | c8a: 81 e0 ldi r24, 0x01 ; 1 |
||
1982 | c8c: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
1983 | _long_delay(); |
||
1984 | c90: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1985 | _lcd_write_command(0x06); //Entry mode |
||
1986 | c94: 86 e0 ldi r24, 0x06 ; 6 |
||
1987 | c96: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
1988 | _long_delay(); |
||
1989 | c9a: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1990 | _lcd_write_command(0x08 + 4); // Display an |
||
1991 | c9e: 8c e0 ldi r24, 0x0C ; 12 |
||
1992 | ca0: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
1993 | _long_delay(); |
||
1994 | ca4: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
1995 | ca8: 08 95 ret |
||
1996 | |||
1997 | 00000caa <LCD_Gotoxy>: |
||
1998 | } |
||
1999 | |||
2000 | |||
2001 | void LCD_Gotoxy(unsigned char x , unsigned char y) |
||
2002 | { |
||
2003 | caa: 1f 93 push r17 |
||
2004 | cac: cf 93 push r28 |
||
2005 | cae: c8 2f mov r28, r24 |
||
2006 | cb0: 16 2f mov r17, r22 |
||
2007 | _short_delay(); |
||
2008 | cb2: 0e 94 d9 05 call 0xbb2 <_short_delay> |
||
2009 | switch(y) |
||
2010 | cb6: 81 2f mov r24, r17 |
||
2011 | cb8: 99 27 eor r25, r25 |
||
2012 | cba: 81 30 cpi r24, 0x01 ; 1 |
||
2013 | cbc: 91 05 cpc r25, r1 |
||
2014 | cbe: 79 f0 breq .+30 ; 0xcde <LCD_Gotoxy+0x34> |
||
2015 | cc0: 82 30 cpi r24, 0x02 ; 2 |
||
2016 | cc2: 91 05 cpc r25, r1 |
||
2017 | cc4: 1c f4 brge .+6 ; 0xccc <LCD_Gotoxy+0x22> |
||
2018 | cc6: 89 2b or r24, r25 |
||
2019 | cc8: 39 f0 breq .+14 ; 0xcd8 <LCD_Gotoxy+0x2e> |
||
2020 | cca: 13 c0 rjmp .+38 ; 0xcf2 <LCD_Gotoxy+0x48> |
||
2021 | ccc: 82 30 cpi r24, 0x02 ; 2 |
||
2022 | cce: 91 05 cpc r25, r1 |
||
2023 | cd0: 49 f0 breq .+18 ; 0xce4 <LCD_Gotoxy+0x3a> |
||
2024 | cd2: 03 97 sbiw r24, 0x03 ; 3 |
||
2025 | cd4: 51 f0 breq .+20 ; 0xcea <LCD_Gotoxy+0x40> |
||
2026 | cd6: 0d c0 rjmp .+26 ; 0xcf2 <LCD_Gotoxy+0x48> |
||
2027 | { case 0 : _lcd_write_command(x + 0x80); break; |
||
2028 | cd8: 8c 2f mov r24, r28 |
||
2029 | cda: 80 58 subi r24, 0x80 ; 128 |
||
2030 | cdc: 08 c0 rjmp .+16 ; 0xcee <LCD_Gotoxy+0x44> |
||
2031 | case 1 : _lcd_write_command(x + 0xC0); break; |
||
2032 | cde: 8c 2f mov r24, r28 |
||
2033 | ce0: 80 54 subi r24, 0x40 ; 64 |
||
2034 | ce2: 05 c0 rjmp .+10 ; 0xcee <LCD_Gotoxy+0x44> |
||
2035 | case 2 : _lcd_write_command(x + (0x80 + 20)); break; |
||
2036 | ce4: 8c 2f mov r24, r28 |
||
2037 | ce6: 8c 56 subi r24, 0x6C ; 108 |
||
2038 | ce8: 02 c0 rjmp .+4 ; 0xcee <LCD_Gotoxy+0x44> |
||
2039 | case 3 : _lcd_write_command(x + (0xC0 + 20)); break; |
||
2040 | cea: 8c 2f mov r24, r28 |
||
2041 | cec: 8c 52 subi r24, 0x2C ; 44 |
||
2042 | cee: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
2043 | cf2: cf 91 pop r28 |
||
2044 | cf4: 1f 91 pop r17 |
||
2045 | cf6: 08 95 ret |
||
2046 | |||
2047 | 00000cf8 <LCD_Write>: |
||
2048 | } |
||
2049 | } |
||
2050 | |||
2051 | |||
2052 | void LCD_Write(unsigned char *this_text) |
||
2053 | { |
||
2054 | cf8: 1f 93 push r17 |
||
2055 | cfa: cf 93 push r28 |
||
2056 | cfc: df 93 push r29 |
||
2057 | cfe: ec 01 movw r28, r24 |
||
2058 | unsigned char i = 0; |
||
2059 | d00: 10 e0 ldi r17, 0x00 ; 0 |
||
2060 | while(this_text[i] != 0) |
||
2061 | { |
||
2062 | lcd_write_byte(this_text[i++]); |
||
2063 | _long_delay(); |
||
2064 | d02: 88 81 ld r24, Y |
||
2065 | d04: 88 23 and r24, r24 |
||
2066 | d06: 79 f0 breq .+30 ; 0xd26 <LCD_Write+0x2e> |
||
2067 | d08: fe 01 movw r30, r28 |
||
2068 | d0a: e1 0f add r30, r17 |
||
2069 | d0c: f1 1d adc r31, r1 |
||
2070 | d0e: 1f 5f subi r17, 0xFF ; 255 |
||
2071 | d10: 80 81 ld r24, Z |
||
2072 | d12: 0e 94 06 06 call 0xc0c <lcd_write_byte> |
||
2073 | d16: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
2074 | d1a: fe 01 movw r30, r28 |
||
2075 | d1c: e1 0f add r30, r17 |
||
2076 | d1e: f1 1d adc r31, r1 |
||
2077 | d20: 80 81 ld r24, Z |
||
2078 | d22: 88 23 and r24, r24 |
||
2079 | d24: 89 f7 brne .-30 ; 0xd08 <LCD_Write+0x10> |
||
2080 | d26: df 91 pop r29 |
||
2081 | d28: cf 91 pop r28 |
||
2082 | d2a: 1f 91 pop r17 |
||
2083 | d2c: 08 95 ret |
||
2084 | |||
2085 | 00000d2e <LCD_Putchar>: |
||
2086 | } |
||
2087 | } |
||
2088 | |||
2089 | |||
2090 | char LCD_Putchar(char zeichen) |
||
2091 | { |
||
2092 | d2e: 1f 93 push r17 |
||
2093 | d30: 18 2f mov r17, r24 |
||
2094 | _short_delay(); |
||
2095 | d32: 0e 94 d9 05 call 0xbb2 <_short_delay> |
||
2096 | lcd_write_byte((char) zeichen); |
||
2097 | d36: 81 2f mov r24, r17 |
||
2098 | d38: 0e 94 06 06 call 0xc0c <lcd_write_byte> |
||
2099 | return(1); |
||
2100 | } |
||
2101 | d3c: 81 e0 ldi r24, 0x01 ; 1 |
||
2102 | d3e: 90 e0 ldi r25, 0x00 ; 0 |
||
2103 | d40: 1f 91 pop r17 |
||
2104 | d42: 08 95 ret |
||
2105 | |||
2106 | 00000d44 <PRINT>: |
||
2107 | #include "old_macros.h" |
||
2108 | |||
2109 | //#define LIGHTPRINTF |
||
2110 | |||
2111 | void PRINT(const char * ptr, unsigned int len) { |
||
2112 | d44: 0f 93 push r16 |
||
2113 | d46: 1f 93 push r17 |
||
2114 | d48: cf 93 push r28 |
||
2115 | d4a: df 93 push r29 |
||
2116 | d4c: 8c 01 movw r16, r24 |
||
2117 | d4e: eb 01 movw r28, r22 |
||
2118 | for(;len;len--) |
||
2119 | d50: 67 2b or r22, r23 |
||
2120 | d52: 39 f0 breq .+14 ; 0xd62 <PRINT+0x1e> |
||
2121 | LCD_Putchar(*ptr++); |
||
2122 | d54: f8 01 movw r30, r16 |
||
2123 | d56: 81 91 ld r24, Z+ |
||
2124 | d58: 8f 01 movw r16, r30 |
||
2125 | d5a: 0e 94 97 06 call 0xd2e <LCD_Putchar> |
||
2126 | d5e: 21 97 sbiw r28, 0x01 ; 1 |
||
2127 | d60: c9 f7 brne .-14 ; 0xd54 <PRINT+0x10> |
||
2128 | d62: df 91 pop r29 |
||
2129 | d64: cf 91 pop r28 |
||
2130 | d66: 1f 91 pop r17 |
||
2131 | d68: 0f 91 pop r16 |
||
2132 | d6a: 08 95 ret |
||
2133 | |||
2134 | 00000d6c <PRINTP>: |
||
2135 | } |
||
2136 | |||
2137 | void PRINTP(const char * ptr, unsigned int len) { |
||
2138 | d6c: 0f 93 push r16 |
||
2139 | d6e: 1f 93 push r17 |
||
2140 | d70: cf 93 push r28 |
||
2141 | d72: df 93 push r29 |
||
2142 | d74: 8c 01 movw r16, r24 |
||
2143 | d76: eb 01 movw r28, r22 |
||
2144 | for(;len;len--) |
||
2145 | d78: 67 2b or r22, r23 |
||
2146 | d7a: 41 f0 breq .+16 ; 0xd8c <PRINTP+0x20> |
||
2147 | // LCD_Putchar(PRG_RDB(ptr++)); |
||
2148 | LCD_Putchar(pgm_read_byte(ptr++)); |
||
2149 | d7c: f8 01 movw r30, r16 |
||
2150 | d7e: 0f 5f subi r16, 0xFF ; 255 |
||
2151 | d80: 1f 4f sbci r17, 0xFF ; 255 |
||
2152 | d82: 84 91 lpm r24, Z |
||
2153 | d84: 0e 94 97 06 call 0xd2e <LCD_Putchar> |
||
2154 | d88: 21 97 sbiw r28, 0x01 ; 1 |
||
2155 | d8a: c1 f7 brne .-16 ; 0xd7c <PRINTP+0x10> |
||
2156 | d8c: df 91 pop r29 |
||
2157 | d8e: cf 91 pop r28 |
||
2158 | d90: 1f 91 pop r17 |
||
2159 | d92: 0f 91 pop r16 |
||
2160 | d94: 08 95 ret |
||
2161 | |||
2162 | 00000d96 <PAD_SP>: |
||
2163 | } |
||
2164 | |||
2165 | void PAD_SP(signed char howmany) { |
||
2166 | d96: cf 93 push r28 |
||
2167 | d98: c8 2f mov r28, r24 |
||
2168 | for(;howmany>0;howmany--) |
||
2169 | d9a: 18 16 cp r1, r24 |
||
2170 | d9c: 34 f4 brge .+12 ; 0xdaa <PAD_SP+0x14> |
||
2171 | LCD_Putchar(' '); |
||
2172 | d9e: 80 e2 ldi r24, 0x20 ; 32 |
||
2173 | da0: 0e 94 97 06 call 0xd2e <LCD_Putchar> |
||
2174 | da4: c1 50 subi r28, 0x01 ; 1 |
||
2175 | da6: 1c 16 cp r1, r28 |
||
2176 | da8: d4 f3 brlt .-12 ; 0xd9e <PAD_SP+0x8> |
||
2177 | daa: cf 91 pop r28 |
||
2178 | dac: 08 95 ret |
||
2179 | |||
2180 | 00000dae <PAD_0>: |
||
2181 | } |
||
2182 | |||
2183 | void PAD_0(signed char howmany) { |
||
2184 | dae: cf 93 push r28 |
||
2185 | db0: c8 2f mov r28, r24 |
||
2186 | for(;howmany>0;howmany--) |
||
2187 | db2: 18 16 cp r1, r24 |
||
2188 | db4: 34 f4 brge .+12 ; 0xdc2 <PAD_0+0x14> |
||
2189 | LCD_Putchar('0'); |
||
2190 | db6: 80 e3 ldi r24, 0x30 ; 48 |
||
2191 | db8: 0e 94 97 06 call 0xd2e <LCD_Putchar> |
||
2192 | dbc: c1 50 subi r28, 0x01 ; 1 |
||
2193 | dbe: 1c 16 cp r1, r28 |
||
2194 | dc0: d4 f3 brlt .-12 ; 0xdb6 <PAD_0+0x8> |
||
2195 | dc2: cf 91 pop r28 |
||
2196 | dc4: 08 95 ret |
||
2197 | |||
2198 | 00000dc6 <_printf_P>: |
||
2199 | } |
||
2200 | |||
2201 | #define BUF 40 |
||
2202 | |||
2203 | /* |
||
2204 | * Macros for converting digits to letters and vice versa |
||
2205 | */ |
||
2206 | #define to_digit(c) ((c) - '0') |
||
2207 | #define is_digit(c) ((c)<='9' && (c)>='0') |
||
2208 | #define to_char(n) ((n) + '0') |
||
2209 | |||
2210 | /* |
||
2211 | * Flags used during conversion. |
||
2212 | */ |
||
2213 | #define LONGINT 0x01 /* long integer */ |
||
2214 | #define LONGDBL 0x02 /* long double; unimplemented */ |
||
2215 | #define SHORTINT 0x04 /* short integer */ |
||
2216 | #define ALT 0x08 /* alternate form */ |
||
2217 | #define LADJUST 0x10 /* left adjustment */ |
||
2218 | #define ZEROPAD 0x20 /* zero (as opposed to blank) pad */ |
||
2219 | #define HEXPREFIX 0x40 /* add 0x or 0X prefix */ |
||
2220 | |||
2221 | void _printf_P (char const *fmt0, ...) /* Works with string from FLASH */ |
||
2222 | { |
||
2223 | dc6: 2f 92 push r2 |
||
2224 | dc8: 3f 92 push r3 |
||
2225 | dca: 4f 92 push r4 |
||
2226 | dcc: 5f 92 push r5 |
||
2227 | dce: 6f 92 push r6 |
||
2228 | dd0: 7f 92 push r7 |
||
2229 | dd2: 8f 92 push r8 |
||
2230 | dd4: 9f 92 push r9 |
||
2231 | dd6: af 92 push r10 |
||
2232 | dd8: bf 92 push r11 |
||
2233 | dda: cf 92 push r12 |
||
2234 | ddc: df 92 push r13 |
||
2235 | dde: ef 92 push r14 |
||
2236 | de0: ff 92 push r15 |
||
2237 | de2: 0f 93 push r16 |
||
2238 | de4: 1f 93 push r17 |
||
2239 | de6: cf 93 push r28 |
||
2240 | de8: df 93 push r29 |
||
2241 | dea: cd b7 in r28, 0x3d ; 61 |
||
2242 | dec: de b7 in r29, 0x3e ; 62 |
||
2243 | dee: e0 97 sbiw r28, 0x30 ; 48 |
||
2244 | df0: 0f b6 in r0, 0x3f ; 63 |
||
2245 | df2: f8 94 cli |
||
2246 | df4: de bf out 0x3e, r29 ; 62 |
||
2247 | df6: 0f be out 0x3f, r0 ; 63 |
||
2248 | df8: cd bf out 0x3d, r28 ; 61 |
||
2249 | dfa: a5 e4 ldi r26, 0x45 ; 69 |
||
2250 | dfc: 6a 2e mov r6, r26 |
||
2251 | dfe: 71 2c mov r7, r1 |
||
2252 | e00: 6c 0e add r6, r28 |
||
2253 | e02: 7d 1e adc r7, r29 |
||
2254 | va_list ap; |
||
2255 | register const char *fmt; /* format string */ |
||
2256 | register char ch; /* character from fmt */ |
||
2257 | register int n; /* handy integer (short term usage) */ |
||
2258 | register char *cp; /* handy char pointer (short term usage) */ |
||
2259 | const char *fmark; /* for remembering a place in fmt */ |
||
2260 | register unsigned char flags; /* flags as above */ |
||
2261 | signed char width; /* width from format (%8d), or 0 */ |
||
2262 | signed char prec; /* precision from format (%.3d), or -1 */ |
||
2263 | char sign; /* sign prefix (' ', '+', '-', or \0) */ |
||
2264 | unsigned long _ulong=0; /* integer arguments %[diouxX] */ |
||
2265 | e04: 1c a6 std Y+44, r1 ; 0x2c |
||
2266 | e06: 1d a6 std Y+45, r1 ; 0x2d |
||
2267 | e08: 1e a6 std Y+46, r1 ; 0x2e |
||
2268 | e0a: 1f a6 std Y+47, r1 ; 0x2f |
||
2269 | #define OCT 8 |
||
2270 | #define DEC 10 |
||
2271 | #define HEX 16 |
||
2272 | unsigned char base; /* base for [diouxX] conversion */ |
||
2273 | signed char dprec; /* a copy of prec if [diouxX], 0 otherwise */ |
||
2274 | signed char dpad; /* extra 0 padding needed for integers */ |
||
2275 | signed char fieldsz; /* field size expanded by sign, dpad etc */ |
||
2276 | /* The initialization of 'size' is to suppress a warning that |
||
2277 | 'size' might be used unitialized. It seems gcc can't |
||
2278 | quite grok this spaghetti code ... */ |
||
2279 | signed char size = 0; /* size of converted field or string */ |
||
2280 | char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */ |
||
2281 | char ox[2]; /* space for 0x hex-prefix */ |
||
2282 | |||
2283 | va_start(ap, fmt0); |
||
2284 | |||
2285 | fmt = fmt0; |
||
2286 | e0c: d3 01 movw r26, r6 |
||
2287 | e0e: ad 90 ld r10, X+ |
||
2288 | e10: bd 90 ld r11, X+ |
||
2289 | e12: 3d 01 movw r6, r26 |
||
2290 | |||
2291 | /* |
||
2292 | * Scan the format for conversions (`%' character). |
||
2293 | */ |
||
2294 | for (;;) { |
||
2295 | for (fmark = fmt; (ch = pgm_read_byte(fmt)) != '\0' && ch != '%'; fmt++) |
||
2296 | e14: c5 01 movw r24, r10 |
||
2297 | e16: 05 c0 rjmp .+10 ; 0xe22 <_printf_P+0x5c> |
||
2298 | e18: 05 32 cpi r16, 0x25 ; 37 |
||
2299 | e1a: 39 f0 breq .+14 ; 0xe2a <_printf_P+0x64> |
||
2300 | e1c: 08 94 sec |
||
2301 | e1e: a1 1c adc r10, r1 |
||
2302 | e20: b1 1c adc r11, r1 |
||
2303 | e22: f5 01 movw r30, r10 |
||
2304 | e24: 04 91 lpm r16, Z |
||
2305 | e26: 00 23 and r16, r16 |
||
2306 | e28: b9 f7 brne .-18 ; 0xe18 <_printf_P+0x52> |
||
2307 | /* void */; |
||
2308 | if ((n = fmt - fmark) != 0) { |
||
2309 | e2a: b5 01 movw r22, r10 |
||
2310 | e2c: 68 1b sub r22, r24 |
||
2311 | e2e: 79 0b sbc r23, r25 |
||
2312 | e30: 11 f0 breq .+4 ; 0xe36 <_printf_P+0x70> |
||
2313 | PRINTP(fmark, n); |
||
2314 | e32: 0e 94 b6 06 call 0xd6c <PRINTP> |
||
2315 | } |
||
2316 | if (ch == '\0') |
||
2317 | e36: 00 23 and r16, r16 |
||
2318 | e38: 09 f4 brne .+2 ; 0xe3c <_printf_P+0x76> |
||
2319 | e3a: 30 c2 rjmp .+1120 ; 0x129c <_printf_P+0x4d6> |
||
2320 | goto done; |
||
2321 | fmt++; /* skip over '%' */ |
||
2322 | e3c: 08 94 sec |
||
2323 | e3e: a1 1c adc r10, r1 |
||
2324 | e40: b1 1c adc r11, r1 |
||
2325 | |||
2326 | flags = 0; |
||
2327 | e42: 55 24 eor r5, r5 |
||
2328 | dprec = 0; |
||
2329 | e44: 58 aa std Y+48, r5 ; 0x30 |
||
2330 | width = 0; |
||
2331 | e46: 25 2c mov r2, r5 |
||
2332 | prec = -1; |
||
2333 | e48: 1f ef ldi r17, 0xFF ; 255 |
||
2334 | sign = '\0'; |
||
2335 | e4a: 59 a6 std Y+41, r5 ; 0x29 |
||
2336 | |||
2337 | rflag: ch = PRG_RDB(fmt++); |
||
2338 | e4c: f5 01 movw r30, r10 |
||
2339 | e4e: 08 94 sec |
||
2340 | e50: a1 1c adc r10, r1 |
||
2341 | e52: b1 1c adc r11, r1 |
||
2342 | e54: 04 91 lpm r16, Z |
||
2343 | reswitch: |
||
2344 | #ifdef LIGHTPRINTF |
||
2345 | if (ch=='o' || ch=='u' || (ch|0x20)=='x') { |
||
2346 | #else |
||
2347 | if (ch=='u' || (ch|0x20)=='x') { |
||
2348 | e56: 05 37 cpi r16, 0x75 ; 117 |
||
2349 | e58: 21 f0 breq .+8 ; 0xe62 <_printf_P+0x9c> |
||
2350 | e5a: 80 2f mov r24, r16 |
||
2351 | e5c: 80 62 ori r24, 0x20 ; 32 |
||
2352 | e5e: 88 37 cpi r24, 0x78 ; 120 |
||
2353 | e60: f1 f4 brne .+60 ; 0xe9e <_printf_P+0xd8> |
||
2354 | #endif |
||
2355 | if (flags&LONGINT) { |
||
2356 | e62: 50 fe sbrs r5, 0 |
||
2357 | e64: 0e c0 rjmp .+28 ; 0xe82 <_printf_P+0xbc> |
||
2358 | _ulong=va_arg(ap, unsigned long); |
||
2359 | e66: f3 01 movw r30, r6 |
||
2360 | e68: 24 e0 ldi r18, 0x04 ; 4 |
||
2361 | e6a: 30 e0 ldi r19, 0x00 ; 0 |
||
2362 | e6c: 62 0e add r6, r18 |
||
2363 | e6e: 73 1e adc r7, r19 |
||
2364 | e70: 80 81 ld r24, Z |
||
2365 | e72: 91 81 ldd r25, Z+1 ; 0x01 |
||
2366 | e74: a2 81 ldd r26, Z+2 ; 0x02 |
||
2367 | e76: b3 81 ldd r27, Z+3 ; 0x03 |
||
2368 | e78: 8c a7 std Y+44, r24 ; 0x2c |
||
2369 | e7a: 9d a7 std Y+45, r25 ; 0x2d |
||
2370 | e7c: ae a7 std Y+46, r26 ; 0x2e |
||
2371 | e7e: bf a7 std Y+47, r27 ; 0x2f |
||
2372 | e80: 0e c0 rjmp .+28 ; 0xe9e <_printf_P+0xd8> |
||
2373 | } else { |
||
2374 | register unsigned int _d; |
||
2375 | _d=va_arg(ap, unsigned int); |
||
2376 | e82: f3 01 movw r30, r6 |
||
2377 | e84: a2 e0 ldi r26, 0x02 ; 2 |
||
2378 | e86: b0 e0 ldi r27, 0x00 ; 0 |
||
2379 | e88: 6a 0e add r6, r26 |
||
2380 | e8a: 7b 1e adc r7, r27 |
||
2381 | e8c: 80 81 ld r24, Z |
||
2382 | e8e: 91 81 ldd r25, Z+1 ; 0x01 |
||
2383 | _ulong = flags&SHORTINT ? (unsigned long)(unsigned short)_d : (unsigned long)_d; |
||
2384 | e90: 9c 01 movw r18, r24 |
||
2385 | e92: 44 27 eor r20, r20 |
||
2386 | e94: 55 27 eor r21, r21 |
||
2387 | e96: 2c a7 std Y+44, r18 ; 0x2c |
||
2388 | e98: 3d a7 std Y+45, r19 ; 0x2d |
||
2389 | e9a: 4e a7 std Y+46, r20 ; 0x2e |
||
2390 | e9c: 5f a7 std Y+47, r21 ; 0x2f |
||
2391 | } |
||
2392 | } |
||
2393 | |||
2394 | #ifndef LIGHTPRINTF |
||
2395 | if(ch==' ') { |
||
2396 | e9e: 00 32 cpi r16, 0x20 ; 32 |
||
2397 | ea0: 21 f4 brne .+8 ; 0xeaa <_printf_P+0xe4> |
||
2398 | /* |
||
2399 | * ``If the space and + flags both appear, the space |
||
2400 | * flag will be ignored.'' |
||
2401 | * -- ANSI X3J11 |
||
2402 | */ |
||
2403 | if (!sign) |
||
2404 | ea2: 89 a5 ldd r24, Y+41 ; 0x29 |
||
2405 | ea4: 88 23 and r24, r24 |
||
2406 | ea6: 91 f6 brne .-92 ; 0xe4c <_printf_P+0x86> |
||
2407 | ea8: 1b c0 rjmp .+54 ; 0xee0 <_printf_P+0x11a> |
||
2408 | sign = ' '; |
||
2409 | goto rflag; |
||
2410 | } else if (ch=='#') { |
||
2411 | eaa: 03 32 cpi r16, 0x23 ; 35 |
||
2412 | eac: 11 f4 brne .+4 ; 0xeb2 <_printf_P+0xec> |
||
2413 | flags |= ALT; |
||
2414 | eae: 38 e0 ldi r19, 0x08 ; 8 |
||
2415 | eb0: 81 c0 rjmp .+258 ; 0xfb4 <_printf_P+0x1ee> |
||
2416 | goto rflag; |
||
2417 | } else if (ch=='*'||ch=='-') { |
||
2418 | eb2: 0a 32 cpi r16, 0x2A ; 42 |
||
2419 | eb4: 11 f0 breq .+4 ; 0xeba <_printf_P+0xf4> |
||
2420 | eb6: 0d 32 cpi r16, 0x2D ; 45 |
||
2421 | eb8: 89 f4 brne .+34 ; 0xedc <_printf_P+0x116> |
||
2422 | if (ch=='*') { |
||
2423 | eba: 0a 32 cpi r16, 0x2A ; 42 |
||
2424 | ebc: 51 f4 brne .+20 ; 0xed2 <_printf_P+0x10c> |
||
2425 | /* |
||
2426 | * ``A negative field width argument is taken as a |
||
2427 | * - flag followed by a positive field width.'' |
||
2428 | * -- ANSI X3J11 |
||
2429 | * They don't exclude field widths read from args. |
||
2430 | */ |
||
2431 | if ((width = va_arg(ap, int)) >= 0) |
||
2432 | ebe: f3 01 movw r30, r6 |
||
2433 | ec0: 42 e0 ldi r20, 0x02 ; 2 |
||
2434 | ec2: 50 e0 ldi r21, 0x00 ; 0 |
||
2435 | ec4: 64 0e add r6, r20 |
||
2436 | ec6: 75 1e adc r7, r21 |
||
2437 | ec8: 20 80 ld r2, Z |
||
2438 | eca: 22 20 and r2, r2 |
||
2439 | ecc: 0c f0 brlt .+2 ; 0xed0 <_printf_P+0x10a> |
||
2440 | ece: be cf rjmp .-132 ; 0xe4c <_printf_P+0x86> |
||
2441 | goto rflag; |
||
2442 | width = -width; |
||
2443 | ed0: 21 94 neg r2 |
||
2444 | } |
||
2445 | flags |= LADJUST; |
||
2446 | ed2: 50 e1 ldi r21, 0x10 ; 16 |
||
2447 | ed4: 55 2a or r5, r21 |
||
2448 | flags &= ~ZEROPAD; /* '-' disables '0' */ |
||
2449 | ed6: 8f ed ldi r24, 0xDF ; 223 |
||
2450 | ed8: 58 22 and r5, r24 |
||
2451 | goto rflag; |
||
2452 | eda: b8 cf rjmp .-144 ; 0xe4c <_printf_P+0x86> |
||
2453 | } else if (ch=='+') { |
||
2454 | edc: 0b 32 cpi r16, 0x2B ; 43 |
||
2455 | ede: 11 f4 brne .+4 ; 0xee4 <_printf_P+0x11e> |
||
2456 | sign = '+'; |
||
2457 | ee0: 09 a7 std Y+41, r16 ; 0x29 |
||
2458 | goto rflag; |
||
2459 | ee2: b4 cf rjmp .-152 ; 0xe4c <_printf_P+0x86> |
||
2460 | } else if (ch=='.') { |
||
2461 | ee4: 0e 32 cpi r16, 0x2E ; 46 |
||
2462 | ee6: c1 f5 brne .+112 ; 0xf58 <_printf_P+0x192> |
||
2463 | if ((ch = PRG_RDB(fmt++)) == '*') { |
||
2464 | ee8: f5 01 movw r30, r10 |
||
2465 | eea: 08 94 sec |
||
2466 | eec: a1 1c adc r10, r1 |
||
2467 | eee: b1 1c adc r11, r1 |
||
2468 | ef0: 04 91 lpm r16, Z |
||
2469 | ef2: 0a 32 cpi r16, 0x2A ; 42 |
||
2470 | ef4: 79 f4 brne .+30 ; 0xf14 <_printf_P+0x14e> |
||
2471 | n = va_arg(ap, int); |
||
2472 | ef6: f3 01 movw r30, r6 |
||
2473 | ef8: a2 e0 ldi r26, 0x02 ; 2 |
||
2474 | efa: b0 e0 ldi r27, 0x00 ; 0 |
||
2475 | efc: 6a 0e add r6, r26 |
||
2476 | efe: 7b 1e adc r7, r27 |
||
2477 | f00: 60 81 ld r22, Z |
||
2478 | f02: 71 81 ldd r23, Z+1 ; 0x01 |
||
2479 | prec = n < 0 ? -1 : n; |
||
2480 | f04: bf ef ldi r27, 0xFF ; 255 |
||
2481 | f06: 6f 3f cpi r22, 0xFF ; 255 |
||
2482 | f08: 7b 07 cpc r23, r27 |
||
2483 | f0a: 14 f4 brge .+4 ; 0xf10 <_printf_P+0x14a> |
||
2484 | f0c: 6f ef ldi r22, 0xFF ; 255 |
||
2485 | f0e: 7f ef ldi r23, 0xFF ; 255 |
||
2486 | f10: 16 2f mov r17, r22 |
||
2487 | goto rflag; |
||
2488 | f12: 9c cf rjmp .-200 ; 0xe4c <_printf_P+0x86> |
||
2489 | } |
||
2490 | n = 0; |
||
2491 | f14: 60 e0 ldi r22, 0x00 ; 0 |
||
2492 | f16: 70 e0 ldi r23, 0x00 ; 0 |
||
2493 | while (is_digit(ch)) { |
||
2494 | n = n*10 + to_digit(ch); |
||
2495 | ch = PRG_RDB(fmt++); |
||
2496 | f18: 80 2f mov r24, r16 |
||
2497 | f1a: 80 53 subi r24, 0x30 ; 48 |
||
2498 | f1c: 8a 30 cpi r24, 0x0A ; 10 |
||
2499 | f1e: a0 f4 brcc .+40 ; 0xf48 <_printf_P+0x182> |
||
2500 | f20: cb 01 movw r24, r22 |
||
2501 | f22: f3 e0 ldi r31, 0x03 ; 3 |
||
2502 | f24: 88 0f add r24, r24 |
||
2503 | f26: 99 1f adc r25, r25 |
||
2504 | f28: fa 95 dec r31 |
||
2505 | f2a: e1 f7 brne .-8 ; 0xf24 <_printf_P+0x15e> |
||
2506 | f2c: 86 0f add r24, r22 |
||
2507 | f2e: 97 1f adc r25, r23 |
||
2508 | f30: 68 0f add r22, r24 |
||
2509 | f32: 79 1f adc r23, r25 |
||
2510 | f34: 60 0f add r22, r16 |
||
2511 | f36: 71 1d adc r23, r1 |
||
2512 | f38: 60 53 subi r22, 0x30 ; 48 |
||
2513 | f3a: 70 40 sbci r23, 0x00 ; 0 |
||
2514 | f3c: f5 01 movw r30, r10 |
||
2515 | f3e: 08 94 sec |
||
2516 | f40: a1 1c adc r10, r1 |
||
2517 | f42: b1 1c adc r11, r1 |
||
2518 | f44: 04 91 lpm r16, Z |
||
2519 | f46: e8 cf rjmp .-48 ; 0xf18 <_printf_P+0x152> |
||
2520 | } |
||
2521 | prec = n < 0 ? -1 : n; |
||
2522 | f48: ef ef ldi r30, 0xFF ; 255 |
||
2523 | f4a: 6f 3f cpi r22, 0xFF ; 255 |
||
2524 | f4c: 7e 07 cpc r23, r30 |
||
2525 | f4e: 14 f4 brge .+4 ; 0xf54 <_printf_P+0x18e> |
||
2526 | f50: 6f ef ldi r22, 0xFF ; 255 |
||
2527 | f52: 7f ef ldi r23, 0xFF ; 255 |
||
2528 | f54: 16 2f mov r17, r22 |
||
2529 | goto reswitch; |
||
2530 | f56: 7f cf rjmp .-258 ; 0xe56 <_printf_P+0x90> |
||
2531 | } else |
||
2532 | #endif /* LIGHTPRINTF */ |
||
2533 | if (ch=='0') { |
||
2534 | f58: 00 33 cpi r16, 0x30 ; 48 |
||
2535 | f5a: 29 f4 brne .+10 ; 0xf66 <_printf_P+0x1a0> |
||
2536 | /* |
||
2537 | * ``Note that 0 is taken as a flag, not as the |
||
2538 | * beginning of a field width.'' |
||
2539 | * -- ANSI X3J11 |
||
2540 | */ |
||
2541 | if (!(flags & LADJUST)) |
||
2542 | f5c: 54 fc sbrc r5, 4 |
||
2543 | f5e: 76 cf rjmp .-276 ; 0xe4c <_printf_P+0x86> |
||
2544 | flags |= ZEROPAD; /* '-' disables '0' */ |
||
2545 | f60: f0 e2 ldi r31, 0x20 ; 32 |
||
2546 | f62: 5f 2a or r5, r31 |
||
2547 | goto rflag; |
||
2548 | f64: 73 cf rjmp .-282 ; 0xe4c <_printf_P+0x86> |
||
2549 | } else if (ch>='1' && ch<='9') { |
||
2550 | f66: 80 2f mov r24, r16 |
||
2551 | f68: 81 53 subi r24, 0x31 ; 49 |
||
2552 | f6a: 89 30 cpi r24, 0x09 ; 9 |
||
2553 | f6c: d8 f4 brcc .+54 ; 0xfa4 <_printf_P+0x1de> |
||
2554 | n = 0; |
||
2555 | f6e: 60 e0 ldi r22, 0x00 ; 0 |
||
2556 | f70: 70 e0 ldi r23, 0x00 ; 0 |
||
2557 | do { |
||
2558 | n = 10 * n + to_digit(ch); |
||
2559 | f72: cb 01 movw r24, r22 |
||
2560 | f74: e3 e0 ldi r30, 0x03 ; 3 |
||
2561 | f76: 88 0f add r24, r24 |
||
2562 | f78: 99 1f adc r25, r25 |
||
2563 | f7a: ea 95 dec r30 |
||
2564 | f7c: e1 f7 brne .-8 ; 0xf76 <_printf_P+0x1b0> |
||
2565 | f7e: 86 0f add r24, r22 |
||
2566 | f80: 97 1f adc r25, r23 |
||
2567 | f82: 68 0f add r22, r24 |
||
2568 | f84: 79 1f adc r23, r25 |
||
2569 | f86: 60 0f add r22, r16 |
||
2570 | f88: 71 1d adc r23, r1 |
||
2571 | f8a: 60 53 subi r22, 0x30 ; 48 |
||
2572 | f8c: 70 40 sbci r23, 0x00 ; 0 |
||
2573 | ch = PRG_RDB(fmt++); |
||
2574 | f8e: f5 01 movw r30, r10 |
||
2575 | f90: 08 94 sec |
||
2576 | f92: a1 1c adc r10, r1 |
||
2577 | f94: b1 1c adc r11, r1 |
||
2578 | f96: 04 91 lpm r16, Z |
||
2579 | } while (is_digit(ch)); |
||
2580 | f98: 80 2f mov r24, r16 |
||
2581 | f9a: 80 53 subi r24, 0x30 ; 48 |
||
2582 | f9c: 8a 30 cpi r24, 0x0A ; 10 |
||
2583 | f9e: 48 f3 brcs .-46 ; 0xf72 <_printf_P+0x1ac> |
||
2584 | width = n; |
||
2585 | fa0: 26 2e mov r2, r22 |
||
2586 | goto reswitch; |
||
2587 | fa2: 59 cf rjmp .-334 ; 0xe56 <_printf_P+0x90> |
||
2588 | } else if (ch=='h') { |
||
2589 | fa4: 08 36 cpi r16, 0x68 ; 104 |
||
2590 | fa6: 19 f4 brne .+6 ; 0xfae <_printf_P+0x1e8> |
||
2591 | flags |= SHORTINT; |
||
2592 | fa8: 24 e0 ldi r18, 0x04 ; 4 |
||
2593 | faa: 52 2a or r5, r18 |
||
2594 | goto rflag; |
||
2595 | fac: 4f cf rjmp .-354 ; 0xe4c <_printf_P+0x86> |
||
2596 | } else if (ch=='l') { |
||
2597 | fae: 0c 36 cpi r16, 0x6C ; 108 |
||
2598 | fb0: 19 f4 brne .+6 ; 0xfb8 <_printf_P+0x1f2> |
||
2599 | flags |= LONGINT; |
||
2600 | fb2: 31 e0 ldi r19, 0x01 ; 1 |
||
2601 | fb4: 53 2a or r5, r19 |
||
2602 | goto rflag; |
||
2603 | fb6: 4a cf rjmp .-364 ; 0xe4c <_printf_P+0x86> |
||
2604 | } else if (ch=='c') { |
||
2605 | fb8: 03 36 cpi r16, 0x63 ; 99 |
||
2606 | fba: 61 f4 brne .+24 ; 0xfd4 <_printf_P+0x20e> |
||
2607 | *(cp = buf) = va_arg(ap, int); |
||
2608 | fbc: 4e 01 movw r8, r28 |
||
2609 | fbe: 08 94 sec |
||
2610 | fc0: 81 1c adc r8, r1 |
||
2611 | fc2: 91 1c adc r9, r1 |
||
2612 | fc4: f3 01 movw r30, r6 |
||
2613 | fc6: 42 e0 ldi r20, 0x02 ; 2 |
||
2614 | fc8: 50 e0 ldi r21, 0x00 ; 0 |
||
2615 | fca: 64 0e add r6, r20 |
||
2616 | fcc: 75 1e adc r7, r21 |
||
2617 | fce: 80 81 ld r24, Z |
||
2618 | fd0: 89 83 std Y+1, r24 ; 0x01 |
||
2619 | fd2: 1b c1 rjmp .+566 ; 0x120a <_printf_P+0x444> |
||
2620 | size = 1; |
||
2621 | sign = '\0'; |
||
2622 | } else if (ch=='D'||ch=='d'||ch=='i') { |
||
2623 | fd4: 04 34 cpi r16, 0x44 ; 68 |
||
2624 | fd6: 21 f0 breq .+8 ; 0xfe0 <_printf_P+0x21a> |
||
2625 | fd8: 04 36 cpi r16, 0x64 ; 100 |
||
2626 | fda: 11 f0 breq .+4 ; 0xfe0 <_printf_P+0x21a> |
||
2627 | fdc: 09 36 cpi r16, 0x69 ; 105 |
||
2628 | fde: b1 f5 brne .+108 ; 0x104c <_printf_P+0x286> |
||
2629 | if(ch=='D') |
||
2630 | fe0: 04 34 cpi r16, 0x44 ; 68 |
||
2631 | fe2: 11 f4 brne .+4 ; 0xfe8 <_printf_P+0x222> |
||
2632 | flags |= LONGINT; |
||
2633 | fe4: 51 e0 ldi r21, 0x01 ; 1 |
||
2634 | fe6: 55 2a or r5, r21 |
||
2635 | if (flags&LONGINT) { |
||
2636 | fe8: 50 fe sbrs r5, 0 |
||
2637 | fea: 0a c0 rjmp .+20 ; 0x1000 <_printf_P+0x23a> |
||
2638 | _ulong=va_arg(ap, long); |
||
2639 | fec: f3 01 movw r30, r6 |
||
2640 | fee: 84 e0 ldi r24, 0x04 ; 4 |
||
2641 | ff0: 90 e0 ldi r25, 0x00 ; 0 |
||
2642 | ff2: 68 0e add r6, r24 |
||
2643 | ff4: 79 1e adc r7, r25 |
||
2644 | ff6: 20 81 ld r18, Z |
||
2645 | ff8: 31 81 ldd r19, Z+1 ; 0x01 |
||
2646 | ffa: 42 81 ldd r20, Z+2 ; 0x02 |
||
2647 | ffc: 53 81 ldd r21, Z+3 ; 0x03 |
||
2648 | ffe: 0c c0 rjmp .+24 ; 0x1018 <_printf_P+0x252> |
||
2649 | } else { |
||
2650 | register int _d; |
||
2651 | _d=va_arg(ap, int); |
||
2652 | 1000: f3 01 movw r30, r6 |
||
2653 | 1002: 42 e0 ldi r20, 0x02 ; 2 |
||
2654 | 1004: 50 e0 ldi r21, 0x00 ; 0 |
||
2655 | 1006: 64 0e add r6, r20 |
||
2656 | 1008: 75 1e adc r7, r21 |
||
2657 | 100a: 80 81 ld r24, Z |
||
2658 | 100c: 91 81 ldd r25, Z+1 ; 0x01 |
||
2659 | _ulong = flags&SHORTINT ? (long)(short)_d : (long)_d; |
||
2660 | 100e: 9c 01 movw r18, r24 |
||
2661 | 1010: 44 27 eor r20, r20 |
||
2662 | 1012: 37 fd sbrc r19, 7 |
||
2663 | 1014: 40 95 com r20 |
||
2664 | 1016: 54 2f mov r21, r20 |
||
2665 | 1018: 2c a7 std Y+44, r18 ; 0x2c |
||
2666 | 101a: 3d a7 std Y+45, r19 ; 0x2d |
||
2667 | 101c: 4e a7 std Y+46, r20 ; 0x2e |
||
2668 | 101e: 5f a7 std Y+47, r21 ; 0x2f |
||
2669 | } |
||
2670 | |||
2671 | if ((long)_ulong < 0) { |
||
2672 | 1020: 8c a5 ldd r24, Y+44 ; 0x2c |
||
2673 | 1022: 9d a5 ldd r25, Y+45 ; 0x2d |
||
2674 | 1024: ae a5 ldd r26, Y+46 ; 0x2e |
||
2675 | 1026: bf a5 ldd r27, Y+47 ; 0x2f |
||
2676 | 1028: b7 ff sbrs r27, 7 |
||
2677 | 102a: 0d c0 rjmp .+26 ; 0x1046 <_printf_P+0x280> |
||
2678 | _ulong = -_ulong; |
||
2679 | 102c: b0 95 com r27 |
||
2680 | 102e: a0 95 com r26 |
||
2681 | 1030: 90 95 com r25 |
||
2682 | 1032: 81 95 neg r24 |
||
2683 | 1034: 9f 4f sbci r25, 0xFF ; 255 |
||
2684 | 1036: af 4f sbci r26, 0xFF ; 255 |
||
2685 | 1038: bf 4f sbci r27, 0xFF ; 255 |
||
2686 | 103a: 8c a7 std Y+44, r24 ; 0x2c |
||
2687 | 103c: 9d a7 std Y+45, r25 ; 0x2d |
||
2688 | 103e: ae a7 std Y+46, r26 ; 0x2e |
||
2689 | 1040: bf a7 std Y+47, r27 ; 0x2f |
||
2690 | sign = '-'; |
||
2691 | 1042: 8d e2 ldi r24, 0x2D ; 45 |
||
2692 | 1044: 89 a7 std Y+41, r24 ; 0x29 |
||
2693 | } |
||
2694 | base = DEC; |
||
2695 | 1046: 7a e0 ldi r23, 0x0A ; 10 |
||
2696 | 1048: 47 2e mov r4, r23 |
||
2697 | goto number; |
||
2698 | 104a: 7b c0 rjmp .+246 ; 0x1142 <_printf_P+0x37c> |
||
2699 | } else |
||
2700 | /* |
||
2701 | if (ch=='n') { |
||
2702 | if (flags & LONGINT) |
||
2703 | *va_arg(ap, long *) = ret; |
||
2704 | else if (flags & SHORTINT) |
||
2705 | *va_arg(ap, short *) = ret; |
||
2706 | else |
||
2707 | *va_arg(ap, int *) = ret; |
||
2708 | continue; // no output |
||
2709 | } else |
||
2710 | */ |
||
2711 | #ifndef LIGHTPRINTF |
||
2712 | if (ch=='O'||ch=='o') { |
||
2713 | 104c: 0f 34 cpi r16, 0x4F ; 79 |
||
2714 | 104e: 11 f0 breq .+4 ; 0x1054 <_printf_P+0x28e> |
||
2715 | 1050: 0f 36 cpi r16, 0x6F ; 111 |
||
2716 | 1052: 39 f4 brne .+14 ; 0x1062 <_printf_P+0x29c> |
||
2717 | if (ch=='O') |
||
2718 | 1054: 0f 34 cpi r16, 0x4F ; 79 |
||
2719 | 1056: 11 f4 brne .+4 ; 0x105c <_printf_P+0x296> |
||
2720 | flags |= LONGINT; |
||
2721 | 1058: 91 e0 ldi r25, 0x01 ; 1 |
||
2722 | 105a: 59 2a or r5, r25 |
||
2723 | base = OCT; |
||
2724 | 105c: 68 e0 ldi r22, 0x08 ; 8 |
||
2725 | 105e: 46 2e mov r4, r22 |
||
2726 | goto nosign; |
||
2727 | 1060: 6f c0 rjmp .+222 ; 0x1140 <_printf_P+0x37a> |
||
2728 | } else if (ch=='p') { |
||
2729 | 1062: 00 37 cpi r16, 0x70 ; 112 |
||
2730 | 1064: a1 f4 brne .+40 ; 0x108e <_printf_P+0x2c8> |
||
2731 | /* |
||
2732 | * ``The argument shall be a pointer to void. The |
||
2733 | * value of the pointer is converted to a sequence |
||
2734 | * of printable characters, in an implementation- |
||
2735 | * defined manner.'' |
||
2736 | * -- ANSI X3J11 |
||
2737 | */ |
||
2738 | /* NOSTRICT */ |
||
2739 | _ulong = (unsigned int)va_arg(ap, void *); |
||
2740 | 1066: f3 01 movw r30, r6 |
||
2741 | 1068: a2 e0 ldi r26, 0x02 ; 2 |
||
2742 | 106a: b0 e0 ldi r27, 0x00 ; 0 |
||
2743 | 106c: 6a 0e add r6, r26 |
||
2744 | 106e: 7b 1e adc r7, r27 |
||
2745 | 1070: 80 81 ld r24, Z |
||
2746 | 1072: 91 81 ldd r25, Z+1 ; 0x01 |
||
2747 | 1074: 9c 01 movw r18, r24 |
||
2748 | 1076: 44 27 eor r20, r20 |
||
2749 | 1078: 55 27 eor r21, r21 |
||
2750 | 107a: 2c a7 std Y+44, r18 ; 0x2c |
||
2751 | 107c: 3d a7 std Y+45, r19 ; 0x2d |
||
2752 | 107e: 4e a7 std Y+46, r20 ; 0x2e |
||
2753 | 1080: 5f a7 std Y+47, r21 ; 0x2f |
||
2754 | base = HEX; |
||
2755 | 1082: 50 e1 ldi r21, 0x10 ; 16 |
||
2756 | 1084: 45 2e mov r4, r21 |
||
2757 | flags |= HEXPREFIX; |
||
2758 | 1086: 30 e4 ldi r19, 0x40 ; 64 |
||
2759 | 1088: 53 2a or r5, r19 |
||
2760 | ch = 'x'; |
||
2761 | 108a: 08 e7 ldi r16, 0x78 ; 120 |
||
2762 | goto nosign; |
||
2763 | 108c: 59 c0 rjmp .+178 ; 0x1140 <_printf_P+0x37a> |
||
2764 | } else if (ch=='s') { // print a string from RAM |
||
2765 | 108e: 03 37 cpi r16, 0x73 ; 115 |
||
2766 | 1090: c1 f5 brne .+112 ; 0x1102 <_printf_P+0x33c> |
||
2767 | if ((cp = va_arg(ap, char *)) == NULL) { |
||
2768 | 1092: f3 01 movw r30, r6 |
||
2769 | 1094: 42 e0 ldi r20, 0x02 ; 2 |
||
2770 | 1096: 50 e0 ldi r21, 0x00 ; 0 |
||
2771 | 1098: 64 0e add r6, r20 |
||
2772 | 109a: 75 1e adc r7, r21 |
||
2773 | 109c: 80 80 ld r8, Z |
||
2774 | 109e: 91 80 ldd r9, Z+1 ; 0x01 |
||
2775 | 10a0: 81 14 cp r8, r1 |
||
2776 | 10a2: 91 04 cpc r9, r1 |
||
2777 | 10a4: 89 f4 brne .+34 ; 0x10c8 <_printf_P+0x302> |
||
2778 | cp=buf; |
||
2779 | 10a6: 4e 01 movw r8, r28 |
||
2780 | 10a8: 08 94 sec |
||
2781 | 10aa: 81 1c adc r8, r1 |
||
2782 | 10ac: 91 1c adc r9, r1 |
||
2783 | cp[0] = '('; |
||
2784 | 10ae: 88 e2 ldi r24, 0x28 ; 40 |
||
2785 | 10b0: 89 83 std Y+1, r24 ; 0x01 |
||
2786 | cp[1] = 'n'; |
||
2787 | 10b2: 8e e6 ldi r24, 0x6E ; 110 |
||
2788 | 10b4: f4 01 movw r30, r8 |
||
2789 | 10b6: 81 83 std Z+1, r24 ; 0x01 |
||
2790 | cp[2] = 'u'; |
||
2791 | 10b8: 85 e7 ldi r24, 0x75 ; 117 |
||
2792 | 10ba: 8b 83 std Y+3, r24 ; 0x03 |
||
2793 | cp[4] = cp[3] = 'l'; |
||
2794 | 10bc: 8c e6 ldi r24, 0x6C ; 108 |
||
2795 | 10be: 8c 83 std Y+4, r24 ; 0x04 |
||
2796 | 10c0: 8d 83 std Y+5, r24 ; 0x05 |
||
2797 | cp[5] = ')'; |
||
2798 | 10c2: 89 e2 ldi r24, 0x29 ; 41 |
||
2799 | 10c4: 8e 83 std Y+6, r24 ; 0x06 |
||
2800 | cp[6] = '\0'; |
||
2801 | 10c6: 1f 82 std Y+7, r1 ; 0x07 |
||
2802 | } |
||
2803 | if (prec >= 0) { |
||
2804 | 10c8: 17 fd sbrc r17, 7 |
||
2805 | 10ca: 13 c0 rjmp .+38 ; 0x10f2 <_printf_P+0x32c> |
||
2806 | /* |
||
2807 | * can't use strlen; can only look for the |
||
2808 | * NUL in the first `prec' characters, and |
||
2809 | * strlen() will go further. |
||
2810 | */ |
||
2811 | char *p = (char*)memchr(cp, 0, prec); |
||
2812 | 10cc: 81 2f mov r24, r17 |
||
2813 | 10ce: 99 27 eor r25, r25 |
||
2814 | 10d0: 87 fd sbrc r24, 7 |
||
2815 | 10d2: 90 95 com r25 |
||
2816 | 10d4: ac 01 movw r20, r24 |
||
2817 | 10d6: 60 e0 ldi r22, 0x00 ; 0 |
||
2818 | 10d8: 70 e0 ldi r23, 0x00 ; 0 |
||
2819 | 10da: c4 01 movw r24, r8 |
||
2820 | 10dc: 0e 94 64 0c call 0x18c8 <memchr> |
||
2821 | |||
2822 | if (p != NULL) { |
||
2823 | 10e0: 00 97 sbiw r24, 0x00 ; 0 |
||
2824 | 10e2: 29 f0 breq .+10 ; 0x10ee <_printf_P+0x328> |
||
2825 | size = p - cp; |
||
2826 | 10e4: d8 2e mov r13, r24 |
||
2827 | 10e6: d8 18 sub r13, r8 |
||
2828 | if (size > prec) |
||
2829 | 10e8: 1d 15 cp r17, r13 |
||
2830 | 10ea: 0c f0 brlt .+2 ; 0x10ee <_printf_P+0x328> |
||
2831 | 10ec: 90 c0 rjmp .+288 ; 0x120e <_printf_P+0x448> |
||
2832 | size = prec; |
||
2833 | } else |
||
2834 | size = prec; |
||
2835 | 10ee: d1 2e mov r13, r17 |
||
2836 | 10f0: 8e c0 rjmp .+284 ; 0x120e <_printf_P+0x448> |
||
2837 | } else |
||
2838 | size = strlen(cp); |
||
2839 | 10f2: f4 01 movw r30, r8 |
||
2840 | 10f4: 01 90 ld r0, Z+ |
||
2841 | 10f6: 00 20 and r0, r0 |
||
2842 | 10f8: e9 f7 brne .-6 ; 0x10f4 <_printf_P+0x32e> |
||
2843 | 10fa: 31 97 sbiw r30, 0x01 ; 1 |
||
2844 | 10fc: de 2e mov r13, r30 |
||
2845 | 10fe: d8 18 sub r13, r8 |
||
2846 | 1100: 86 c0 rjmp .+268 ; 0x120e <_printf_P+0x448> |
||
2847 | sign = '\0'; |
||
2848 | } else |
||
2849 | #endif /* LIGHTPRINTF */ |
||
2850 | if(ch=='U'||ch=='u') { |
||
2851 | 1102: 05 35 cpi r16, 0x55 ; 85 |
||
2852 | 1104: 11 f0 breq .+4 ; 0x110a <_printf_P+0x344> |
||
2853 | 1106: 05 37 cpi r16, 0x75 ; 117 |
||
2854 | 1108: 39 f4 brne .+14 ; 0x1118 <_printf_P+0x352> |
||
2855 | if (ch=='U') |
||
2856 | 110a: 05 35 cpi r16, 0x55 ; 85 |
||
2857 | 110c: 11 f4 brne .+4 ; 0x1112 <_printf_P+0x34c> |
||
2858 | flags |= LONGINT; |
||
2859 | 110e: f1 e0 ldi r31, 0x01 ; 1 |
||
2860 | 1110: 5f 2a or r5, r31 |
||
2861 | base = DEC; |
||
2862 | 1112: 4a e0 ldi r20, 0x0A ; 10 |
||
2863 | 1114: 44 2e mov r4, r20 |
||
2864 | goto nosign; |
||
2865 | 1116: 14 c0 rjmp .+40 ; 0x1140 <_printf_P+0x37a> |
||
2866 | } else if (ch=='X'||ch=='x') { |
||
2867 | 1118: 08 35 cpi r16, 0x58 ; 88 |
||
2868 | 111a: 19 f0 breq .+6 ; 0x1122 <_printf_P+0x35c> |
||
2869 | 111c: 08 37 cpi r16, 0x78 ; 120 |
||
2870 | 111e: 09 f0 breq .+2 ; 0x1122 <_printf_P+0x35c> |
||
2871 | 1120: 6c c0 rjmp .+216 ; 0x11fa <_printf_P+0x434> |
||
2872 | base = HEX; |
||
2873 | 1122: 30 e1 ldi r19, 0x10 ; 16 |
||
2874 | 1124: 43 2e mov r4, r19 |
||
2875 | /* leading 0x/X only if non-zero */ |
||
2876 | if (flags & ALT && _ulong != 0) |
||
2877 | 1126: 53 fe sbrs r5, 3 |
||
2878 | 1128: 0b c0 rjmp .+22 ; 0x1140 <_printf_P+0x37a> |
||
2879 | 112a: 2c a5 ldd r18, Y+44 ; 0x2c |
||
2880 | 112c: 3d a5 ldd r19, Y+45 ; 0x2d |
||
2881 | 112e: 4e a5 ldd r20, Y+46 ; 0x2e |
||
2882 | 1130: 5f a5 ldd r21, Y+47 ; 0x2f |
||
2883 | 1132: 21 15 cp r18, r1 |
||
2884 | 1134: 31 05 cpc r19, r1 |
||
2885 | 1136: 41 05 cpc r20, r1 |
||
2886 | 1138: 51 05 cpc r21, r1 |
||
2887 | 113a: 11 f0 breq .+4 ; 0x1140 <_printf_P+0x37a> |
||
2888 | flags |= HEXPREFIX; |
||
2889 | 113c: 30 e4 ldi r19, 0x40 ; 64 |
||
2890 | 113e: 53 2a or r5, r19 |
||
2891 | |||
2892 | /* unsigned conversions */ |
||
2893 | nosign: sign = '\0'; |
||
2894 | 1140: 19 a6 std Y+41, r1 ; 0x29 |
||
2895 | /* |
||
2896 | * ``... diouXx conversions ... if a precision is |
||
2897 | * specified, the 0 flag will be ignored.'' |
||
2898 | * -- ANSI X3J11 |
||
2899 | */ |
||
2900 | number: if ((dprec = prec) >= 0) |
||
2901 | 1142: 18 ab std Y+48, r17 ; 0x30 |
||
2902 | 1144: 17 fd sbrc r17, 7 |
||
2903 | 1146: 02 c0 rjmp .+4 ; 0x114c <_printf_P+0x386> |
||
2904 | flags &= ~ZEROPAD; |
||
2905 | 1148: 4f ed ldi r20, 0xDF ; 223 |
||
2906 | 114a: 54 22 and r5, r20 |
||
2907 | |||
2908 | /* |
||
2909 | * ``The result of converting a zero value with an |
||
2910 | * explicit precision of zero is no characters.'' |
||
2911 | * -- ANSI X3J11 |
||
2912 | */ |
||
2913 | cp = buf + BUF; |
||
2914 | 114c: 29 e2 ldi r18, 0x29 ; 41 |
||
2915 | 114e: 82 2e mov r8, r18 |
||
2916 | 1150: 91 2c mov r9, r1 |
||
2917 | 1152: 8c 0e add r8, r28 |
||
2918 | 1154: 9d 1e adc r9, r29 |
||
2919 | if (_ulong != 0 || prec != 0) { |
||
2920 | 1156: 8c a5 ldd r24, Y+44 ; 0x2c |
||
2921 | 1158: 9d a5 ldd r25, Y+45 ; 0x2d |
||
2922 | 115a: ae a5 ldd r26, Y+46 ; 0x2e |
||
2923 | 115c: bf a5 ldd r27, Y+47 ; 0x2f |
||
2924 | 115e: 00 97 sbiw r24, 0x00 ; 0 |
||
2925 | 1160: a1 05 cpc r26, r1 |
||
2926 | 1162: b1 05 cpc r27, r1 |
||
2927 | 1164: 21 f4 brne .+8 ; 0x116e <_printf_P+0x3a8> |
||
2928 | 1166: 98 a9 ldd r25, Y+48 ; 0x30 |
||
2929 | 1168: 99 23 and r25, r25 |
||
2930 | 116a: 09 f4 brne .+2 ; 0x116e <_printf_P+0x3a8> |
||
2931 | 116c: 3f c0 rjmp .+126 ; 0x11ec <_printf_P+0x426> |
||
2932 | 116e: c4 2c mov r12, r4 |
||
2933 | 1170: dd 24 eor r13, r13 |
||
2934 | 1172: ee 24 eor r14, r14 |
||
2935 | 1174: ff 24 eor r15, r15 |
||
2936 | register unsigned char _d,notlastdigit; |
||
2937 | do { |
||
2938 | notlastdigit=(_ulong>=base); |
||
2939 | 1176: 33 24 eor r3, r3 |
||
2940 | 1178: 2c a5 ldd r18, Y+44 ; 0x2c |
||
2941 | 117a: 3d a5 ldd r19, Y+45 ; 0x2d |
||
2942 | 117c: 4e a5 ldd r20, Y+46 ; 0x2e |
||
2943 | 117e: 5f a5 ldd r21, Y+47 ; 0x2f |
||
2944 | 1180: 2c 15 cp r18, r12 |
||
2945 | 1182: 3d 05 cpc r19, r13 |
||
2946 | 1184: 4e 05 cpc r20, r14 |
||
2947 | 1186: 5f 05 cpc r21, r15 |
||
2948 | 1188: 10 f0 brcs .+4 ; 0x118e <_printf_P+0x3c8> |
||
2949 | 118a: 91 e0 ldi r25, 0x01 ; 1 |
||
2950 | 118c: 39 2e mov r3, r25 |
||
2951 | _d = _ulong % base; |
||
2952 | 118e: 6c a5 ldd r22, Y+44 ; 0x2c |
||
2953 | 1190: 7d a5 ldd r23, Y+45 ; 0x2d |
||
2954 | 1192: 8e a5 ldd r24, Y+46 ; 0x2e |
||
2955 | 1194: 9f a5 ldd r25, Y+47 ; 0x2f |
||
2956 | 1196: a7 01 movw r20, r14 |
||
2957 | 1198: 96 01 movw r18, r12 |
||
2958 | 119a: 0e 94 d4 0d call 0x1ba8 <__udivmodsi4> |
||
2959 | 119e: dc 01 movw r26, r24 |
||
2960 | 11a0: cb 01 movw r24, r22 |
||
2961 | 11a2: 18 2f mov r17, r24 |
||
2962 | |||
2963 | if (_d<10) { |
||
2964 | 11a4: 8a 30 cpi r24, 0x0A ; 10 |
||
2965 | 11a6: 10 f4 brcc .+4 ; 0x11ac <_printf_P+0x3e6> |
||
2966 | _d+='0'; |
||
2967 | 11a8: 10 5d subi r17, 0xD0 ; 208 |
||
2968 | 11aa: 04 c0 rjmp .+8 ; 0x11b4 <_printf_P+0x3ee> |
||
2969 | } else { |
||
2970 | _d+='a'-10; |
||
2971 | 11ac: 19 5a subi r17, 0xA9 ; 169 |
||
2972 | if (ch=='X') _d&=~0x20; |
||
2973 | 11ae: 08 35 cpi r16, 0x58 ; 88 |
||
2974 | 11b0: 09 f4 brne .+2 ; 0x11b4 <_printf_P+0x3ee> |
||
2975 | 11b2: 1f 7d andi r17, 0xDF ; 223 |
||
2976 | } |
||
2977 | *--cp=_d; |
||
2978 | 11b4: d4 01 movw r26, r8 |
||
2979 | 11b6: 1e 93 st -X, r17 |
||
2980 | 11b8: 4d 01 movw r8, r26 |
||
2981 | _ulong /= base; |
||
2982 | 11ba: 6c a5 ldd r22, Y+44 ; 0x2c |
||
2983 | 11bc: 7d a5 ldd r23, Y+45 ; 0x2d |
||
2984 | 11be: 8e a5 ldd r24, Y+46 ; 0x2e |
||
2985 | 11c0: 9f a5 ldd r25, Y+47 ; 0x2f |
||
2986 | 11c2: a7 01 movw r20, r14 |
||
2987 | 11c4: 96 01 movw r18, r12 |
||
2988 | 11c6: 0e 94 d4 0d call 0x1ba8 <__udivmodsi4> |
||
2989 | 11ca: 2c a7 std Y+44, r18 ; 0x2c |
||
2990 | 11cc: 3d a7 std Y+45, r19 ; 0x2d |
||
2991 | 11ce: 4e a7 std Y+46, r20 ; 0x2e |
||
2992 | 11d0: 5f a7 std Y+47, r21 ; 0x2f |
||
2993 | } while (notlastdigit); |
||
2994 | 11d2: 33 20 and r3, r3 |
||
2995 | 11d4: 81 f6 brne .-96 ; 0x1176 <_printf_P+0x3b0> |
||
2996 | #ifndef LIGHTPRINTF |
||
2997 | // handle octal leading 0 |
||
2998 | if (base==OCT && flags & ALT && *cp != '0') |
||
2999 | 11d6: b8 e0 ldi r27, 0x08 ; 8 |
||
3000 | 11d8: 4b 16 cp r4, r27 |
||
3001 | 11da: 41 f4 brne .+16 ; 0x11ec <_printf_P+0x426> |
||
3002 | 11dc: 53 fe sbrs r5, 3 |
||
3003 | 11de: 06 c0 rjmp .+12 ; 0x11ec <_printf_P+0x426> |
||
3004 | 11e0: 10 33 cpi r17, 0x30 ; 48 |
||
3005 | 11e2: 21 f0 breq .+8 ; 0x11ec <_printf_P+0x426> |
||
3006 | *--cp = '0'; |
||
3007 | 11e4: 80 e3 ldi r24, 0x30 ; 48 |
||
3008 | 11e6: f4 01 movw r30, r8 |
||
3009 | 11e8: 82 93 st -Z, r24 |
||
3010 | 11ea: 4f 01 movw r8, r30 |
||
3011 | #endif |
||
3012 | } |
||
3013 | |||
3014 | size = buf + BUF - cp; |
||
3015 | 11ec: ce 01 movw r24, r28 |
||
3016 | 11ee: 01 96 adiw r24, 0x01 ; 1 |
||
3017 | 11f0: d8 2e mov r13, r24 |
||
3018 | 11f2: d8 18 sub r13, r8 |
||
3019 | 11f4: f8 e2 ldi r31, 0x28 ; 40 |
||
3020 | 11f6: df 0e add r13, r31 |
||
3021 | 11f8: 0b c0 rjmp .+22 ; 0x1210 <_printf_P+0x44a> |
||
3022 | } else { //default |
||
3023 | /* "%?" prints ?, unless ? is NUL */ |
||
3024 | if (ch == '\0') |
||
3025 | 11fa: 00 23 and r16, r16 |
||
3026 | 11fc: 09 f4 brne .+2 ; 0x1200 <_printf_P+0x43a> |
||
3027 | 11fe: 4e c0 rjmp .+156 ; 0x129c <_printf_P+0x4d6> |
||
3028 | goto done; |
||
3029 | /* pretend it was %c with argument ch */ |
||
3030 | cp = buf; |
||
3031 | 1200: 4e 01 movw r8, r28 |
||
3032 | 1202: 08 94 sec |
||
3033 | 1204: 81 1c adc r8, r1 |
||
3034 | 1206: 91 1c adc r9, r1 |
||
3035 | *cp = ch; |
||
3036 | 1208: 09 83 std Y+1, r16 ; 0x01 |
||
3037 | size = 1; |
||
3038 | 120a: 81 e0 ldi r24, 0x01 ; 1 |
||
3039 | 120c: d8 2e mov r13, r24 |
||
3040 | sign = '\0'; |
||
3041 | 120e: 19 a6 std Y+41, r1 ; 0x29 |
||
3042 | } |
||
3043 | |||
3044 | /* |
||
3045 | * All reasonable formats wind up here. At this point, |
||
3046 | * `cp' points to a string which (if not flags&LADJUST) |
||
3047 | * should be padded out to `width' places. If |
||
3048 | * flags&ZEROPAD, it should first be prefixed by any |
||
3049 | * sign or other prefix; otherwise, it should be blank |
||
3050 | * padded before the prefix is emitted. After any |
||
3051 | * left-hand padding and prefixing, emit zeroes |
||
3052 | * required by a decimal [diouxX] precision, then print |
||
3053 | * the string proper, then emit zeroes required by any |
||
3054 | * leftover floating precision; finally, if LADJUST, |
||
3055 | * pad with blanks. |
||
3056 | */ |
||
3057 | |||
3058 | /* |
||
3059 | * compute actual size, so we know how much to pad. |
||
3060 | */ |
||
3061 | fieldsz = size; |
||
3062 | 1210: 1d 2d mov r17, r13 |
||
3063 | |||
3064 | dpad = dprec - size; |
||
3065 | 1212: c8 a8 ldd r12, Y+48 ; 0x30 |
||
3066 | 1214: cd 18 sub r12, r13 |
||
3067 | if (dpad < 0) |
||
3068 | 1216: c7 fc sbrc r12, 7 |
||
3069 | dpad = 0; |
||
3070 | 1218: cc 24 eor r12, r12 |
||
3071 | |||
3072 | if (sign) |
||
3073 | 121a: 89 a5 ldd r24, Y+41 ; 0x29 |
||
3074 | 121c: 88 23 and r24, r24 |
||
3075 | 121e: 11 f0 breq .+4 ; 0x1224 <_printf_P+0x45e> |
||
3076 | fieldsz++; |
||
3077 | 1220: 1f 5f subi r17, 0xFF ; 255 |
||
3078 | 1222: 02 c0 rjmp .+4 ; 0x1228 <_printf_P+0x462> |
||
3079 | else if (flags & HEXPREFIX) |
||
3080 | 1224: 56 fc sbrc r5, 6 |
||
3081 | fieldsz += 2; |
||
3082 | 1226: 1e 5f subi r17, 0xFE ; 254 |
||
3083 | fieldsz += dpad; |
||
3084 | 1228: 1c 0d add r17, r12 |
||
3085 | |||
3086 | /* right-adjusting blank padding */ |
||
3087 | if ((flags & (LADJUST|ZEROPAD)) == 0) |
||
3088 | 122a: e5 2c mov r14, r5 |
||
3089 | 122c: ff 24 eor r15, r15 |
||
3090 | 122e: c7 01 movw r24, r14 |
||
3091 | 1230: 80 73 andi r24, 0x30 ; 48 |
||
3092 | 1232: 90 70 andi r25, 0x00 ; 0 |
||
3093 | 1234: 89 2b or r24, r25 |
||
3094 | 1236: 21 f4 brne .+8 ; 0x1240 <_printf_P+0x47a> |
||
3095 | PAD_SP(width - fieldsz); |
||
3096 | 1238: 82 2d mov r24, r2 |
||
3097 | 123a: 81 1b sub r24, r17 |
||
3098 | 123c: 0e 94 cb 06 call 0xd96 <PAD_SP> |
||
3099 | |||
3100 | /* prefix */ |
||
3101 | if (sign) { |
||
3102 | 1240: 89 a5 ldd r24, Y+41 ; 0x29 |
||
3103 | 1242: 88 23 and r24, r24 |
||
3104 | 1244: 29 f0 breq .+10 ; 0x1250 <_printf_P+0x48a> |
||
3105 | PRINT(&sign, 1); |
||
3106 | 1246: 61 e0 ldi r22, 0x01 ; 1 |
||
3107 | 1248: 70 e0 ldi r23, 0x00 ; 0 |
||
3108 | 124a: ce 01 movw r24, r28 |
||
3109 | 124c: 89 96 adiw r24, 0x29 ; 41 |
||
3110 | 124e: 09 c0 rjmp .+18 ; 0x1262 <_printf_P+0x49c> |
||
3111 | } else if (flags & HEXPREFIX) { |
||
3112 | 1250: e6 fe sbrs r14, 6 |
||
3113 | 1252: 09 c0 rjmp .+18 ; 0x1266 <_printf_P+0x4a0> |
||
3114 | ox[0] = '0'; |
||
3115 | 1254: 80 e3 ldi r24, 0x30 ; 48 |
||
3116 | 1256: 8a a7 std Y+42, r24 ; 0x2a |
||
3117 | ox[1] = ch; |
||
3118 | 1258: 0b a7 std Y+43, r16 ; 0x2b |
||
3119 | PRINT(ox, 2); |
||
3120 | 125a: 62 e0 ldi r22, 0x02 ; 2 |
||
3121 | 125c: 70 e0 ldi r23, 0x00 ; 0 |
||
3122 | 125e: ce 01 movw r24, r28 |
||
3123 | 1260: 8a 96 adiw r24, 0x2a ; 42 |
||
3124 | 1262: 0e 94 a2 06 call 0xd44 <PRINT> |
||
3125 | } |
||
3126 | |||
3127 | /* right-adjusting zero padding */ |
||
3128 | if ((flags & (LADJUST|ZEROPAD)) == ZEROPAD) |
||
3129 | 1266: c7 01 movw r24, r14 |
||
3130 | 1268: 80 73 andi r24, 0x30 ; 48 |
||
3131 | 126a: 90 70 andi r25, 0x00 ; 0 |
||
3132 | 126c: 80 97 sbiw r24, 0x20 ; 32 |
||
3133 | 126e: 21 f4 brne .+8 ; 0x1278 <_printf_P+0x4b2> |
||
3134 | PAD_0(width - fieldsz); |
||
3135 | 1270: 82 2d mov r24, r2 |
||
3136 | 1272: 81 1b sub r24, r17 |
||
3137 | 1274: 0e 94 d7 06 call 0xdae <PAD_0> |
||
3138 | |||
3139 | /* leading zeroes from decimal precision */ |
||
3140 | PAD_0(dpad); |
||
3141 | 1278: 8c 2d mov r24, r12 |
||
3142 | 127a: 0e 94 d7 06 call 0xdae <PAD_0> |
||
3143 | |||
3144 | /* the string or number proper */ |
||
3145 | PRINT(cp, size); |
||
3146 | 127e: 8d 2d mov r24, r13 |
||
3147 | 1280: 99 27 eor r25, r25 |
||
3148 | 1282: 87 fd sbrc r24, 7 |
||
3149 | 1284: 90 95 com r25 |
||
3150 | 1286: bc 01 movw r22, r24 |
||
3151 | 1288: c4 01 movw r24, r8 |
||
3152 | 128a: 0e 94 a2 06 call 0xd44 <PRINT> |
||
3153 | |||
3154 | /* left-adjusting padding (always blank) */ |
||
3155 | if (flags & LADJUST) |
||
3156 | 128e: e4 fe sbrs r14, 4 |
||
3157 | 1290: c1 cd rjmp .-1150 ; 0xe14 <_printf_P+0x4e> |
||
3158 | PAD_SP(width - fieldsz); |
||
3159 | 1292: 82 2d mov r24, r2 |
||
3160 | 1294: 81 1b sub r24, r17 |
||
3161 | 1296: 0e 94 cb 06 call 0xd96 <PAD_SP> |
||
3162 | 129a: bc cd rjmp .-1160 ; 0xe14 <_printf_P+0x4e> |
||
3163 | 129c: e0 96 adiw r28, 0x30 ; 48 |
||
3164 | 129e: 0f b6 in r0, 0x3f ; 63 |
||
3165 | 12a0: f8 94 cli |
||
3166 | 12a2: de bf out 0x3e, r29 ; 62 |
||
3167 | 12a4: 0f be out 0x3f, r0 ; 63 |
||
3168 | 12a6: cd bf out 0x3d, r28 ; 61 |
||
3169 | 12a8: df 91 pop r29 |
||
3170 | 12aa: cf 91 pop r28 |
||
3171 | 12ac: 1f 91 pop r17 |
||
3172 | 12ae: 0f 91 pop r16 |
||
3173 | 12b0: ff 90 pop r15 |
||
3174 | 12b2: ef 90 pop r14 |
||
3175 | 12b4: df 90 pop r13 |
||
3176 | 12b6: cf 90 pop r12 |
||
3177 | 12b8: bf 90 pop r11 |
||
3178 | 12ba: af 90 pop r10 |
||
3179 | 12bc: 9f 90 pop r9 |
||
3180 | 12be: 8f 90 pop r8 |
||
3181 | 12c0: 7f 90 pop r7 |
||
3182 | 12c2: 6f 90 pop r6 |
||
3183 | 12c4: 5f 90 pop r5 |
||
3184 | 12c6: 4f 90 pop r4 |
||
3185 | 12c8: 3f 90 pop r3 |
||
3186 | 12ca: 2f 90 pop r2 |
||
3187 | 12cc: 08 95 ret |
||
3188 | |||
3189 | 000012ce <__vector_9>: |
||
3190 | }; |
||
3191 | |||
3192 | |||
3193 | SIGNAL (SIG_OVERFLOW1) |
||
3194 | { |
||
3195 | 12ce: 1f 92 push r1 |
||
3196 | 12d0: 0f 92 push r0 |
||
3197 | 12d2: 0f b6 in r0, 0x3f ; 63 |
||
3198 | 12d4: 0f 92 push r0 |
||
3199 | 12d6: 11 24 eor r1, r1 |
||
3200 | 12d8: 8f 93 push r24 |
||
3201 | 12da: 9f 93 push r25 |
||
3202 | static unsigned char cnt_10ms = 0; |
||
3203 | TCNT1 -= TIMER_RELOAD_VALUE; |
||
3204 | 12dc: 8c b5 in r24, 0x2c ; 44 |
||
3205 | 12de: 9d b5 in r25, 0x2d ; 45 |
||
3206 | 12e0: 8a 5f subi r24, 0xFA ; 250 |
||
3207 | 12e2: 90 40 sbci r25, 0x00 ; 0 |
||
3208 | 12e4: 9d bd out 0x2d, r25 ; 45 |
||
3209 | 12e6: 8c bd out 0x2c, r24 ; 44 |
||
3210 | CountMilliseconds++; |
||
3211 | 12e8: 80 91 a5 00 lds r24, 0x00A5 |
||
3212 | 12ec: 90 91 a6 00 lds r25, 0x00A6 |
||
3213 | 12f0: 01 96 adiw r24, 0x01 ; 1 |
||
3214 | 12f2: 90 93 a6 00 sts 0x00A6, r25 |
||
3215 | 12f6: 80 93 a5 00 sts 0x00A5, r24 |
||
3216 | if(DisplayBusy) DisplayBusy--; |
||
3217 | 12fa: 80 91 93 00 lds r24, 0x0093 |
||
3218 | 12fe: 88 23 and r24, r24 |
||
3219 | 1300: 29 f0 breq .+10 ; 0x130c <__vector_9+0x3e> |
||
3220 | 1302: 80 91 93 00 lds r24, 0x0093 |
||
3221 | 1306: 81 50 subi r24, 0x01 ; 1 |
||
3222 | 1308: 80 93 93 00 sts 0x0093, r24 |
||
3223 | if(LoescheIrCodeTimer) |
||
3224 | 130c: 80 91 7c 00 lds r24, 0x007C |
||
3225 | 1310: 90 91 7d 00 lds r25, 0x007D |
||
3226 | 1314: 00 97 sbiw r24, 0x00 ; 0 |
||
3227 | 1316: 59 f0 breq .+22 ; 0x132e <__vector_9+0x60> |
||
3228 | { |
||
3229 | if(--LoescheIrCodeTimer == 0) IR_Code = 0; |
||
3230 | 1318: 01 97 sbiw r24, 0x01 ; 1 |
||
3231 | 131a: 90 93 7d 00 sts 0x007D, r25 |
||
3232 | 131e: 80 93 7c 00 sts 0x007C, r24 |
||
3233 | 1322: 00 97 sbiw r24, 0x00 ; 0 |
||
3234 | 1324: 21 f4 brne .+8 ; 0x132e <__vector_9+0x60> |
||
3235 | 1326: 90 93 c8 01 sts 0x01C8, r25 |
||
3236 | 132a: 80 93 c7 01 sts 0x01C7, r24 |
||
3237 | 132e: 9f 91 pop r25 |
||
3238 | 1330: 8f 91 pop r24 |
||
3239 | 1332: 0f 90 pop r0 |
||
3240 | 1334: 0f be out 0x3f, r0 ; 63 |
||
3241 | 1336: 0f 90 pop r0 |
||
3242 | 1338: 1f 90 pop r1 |
||
3243 | 133a: 18 95 reti |
||
3244 | |||
3245 | 0000133c <Timer1_Init>: |
||
3246 | } |
||
3247 | |||
3248 | } |
||
3249 | |||
3250 | |||
3251 | void Timer1_Init(void) |
||
3252 | { |
||
3253 | |||
3254 | TCCR1B = TIMER_TEILER; |
||
3255 | 133c: 83 e0 ldi r24, 0x03 ; 3 |
||
3256 | 133e: 8e bd out 0x2e, r24 ; 46 |
||
3257 | TCNT1 = -TIMER_RELOAD_VALUE; // reload |
||
3258 | 1340: 86 e0 ldi r24, 0x06 ; 6 |
||
3259 | 1342: 9f ef ldi r25, 0xFF ; 255 |
||
3260 | 1344: 9d bd out 0x2d, r25 ; 45 |
||
3261 | 1346: 8c bd out 0x2c, r24 ; 44 |
||
3262 | //OCR1 = 0x00; |
||
3263 | // Timer(s)/Counter(s) Interrupt(s) initialization |
||
3264 | |||
3265 | #if defined (__AVR_ATmega32__) |
||
3266 | TIMSK |= 0x04; |
||
3267 | 1348: 89 b7 in r24, 0x39 ; 57 |
||
3268 | 134a: 84 60 ori r24, 0x04 ; 4 |
||
3269 | 134c: 89 bf out 0x39, r24 ; 57 |
||
3270 | 134e: 08 95 ret |
||
3271 | |||
3272 | 00001350 <SetDelay>: |
||
3273 | #endif |
||
3274 | |||
3275 | #if defined (__AVR_ATmega644__) |
||
3276 | TIMSK1 |= _BV(TOIE1); |
||
3277 | #endif |
||
3278 | |||
3279 | } |
||
3280 | |||
3281 | |||
3282 | unsigned int SetDelay (unsigned int t) |
||
3283 | { |
||
3284 | return(CountMilliseconds + t - 1); |
||
3285 | 1350: 20 91 a5 00 lds r18, 0x00A5 |
||
3286 | 1354: 30 91 a6 00 lds r19, 0x00A6 |
||
3287 | 1358: 28 0f add r18, r24 |
||
3288 | 135a: 39 1f adc r19, r25 |
||
3289 | } |
||
3290 | 135c: c9 01 movw r24, r18 |
||
3291 | 135e: 01 97 sbiw r24, 0x01 ; 1 |
||
3292 | 1360: 08 95 ret |
||
3293 | |||
3294 | 00001362 <CheckDelay>: |
||
3295 | |||
3296 | char CheckDelay (unsigned int t) |
||
3297 | { |
||
3298 | return(((t - CountMilliseconds) & 0x8000) >> 8); |
||
3299 | 1362: 20 91 a5 00 lds r18, 0x00A5 |
||
3300 | 1366: 30 91 a6 00 lds r19, 0x00A6 |
||
3301 | 136a: 82 1b sub r24, r18 |
||
3302 | 136c: 93 0b sbc r25, r19 |
||
3303 | 136e: 89 2f mov r24, r25 |
||
3304 | 1370: 99 27 eor r25, r25 |
||
3305 | 1372: 80 78 andi r24, 0x80 ; 128 |
||
3306 | } |
||
3307 | 1374: 99 27 eor r25, r25 |
||
3308 | 1376: 08 95 ret |
||
3309 | |||
3310 | 00001378 <Delay_ms>: |
||
3311 | |||
3312 | void Delay_ms(unsigned int w) |
||
3313 | { |
||
3314 | 1378: cf 93 push r28 |
||
3315 | 137a: df 93 push r29 |
||
3316 | unsigned int akt; |
||
3317 | akt = SetDelay(w); |
||
3318 | 137c: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
3319 | 1380: ec 01 movw r28, r24 |
||
3320 | while (!CheckDelay(akt)); |
||
3321 | 1382: ce 01 movw r24, r28 |
||
3322 | 1384: 0e 94 b1 09 call 0x1362 <CheckDelay> |
||
3323 | 1388: 88 23 and r24, r24 |
||
3324 | 138a: d9 f3 breq .-10 ; 0x1382 <Delay_ms+0xa> |
||
3325 | 138c: df 91 pop r29 |
||
3326 | 138e: cf 91 pop r28 |
||
3327 | 1390: 08 95 ret |
||
3328 | |||
3329 | 00001392 <Keyboard_Init>: |
||
3330 | unsigned int KeyTimer = 0; |
||
3331 | |||
3332 | void Keyboard_Init(void) |
||
3333 | { |
||
3334 | KeyTimer = SetDelay(KEY_DELAY_MS); |
||
3335 | 1392: 82 e3 ldi r24, 0x32 ; 50 |
||
3336 | 1394: 90 e0 ldi r25, 0x00 ; 0 |
||
3337 | 1396: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
3338 | 139a: 90 93 a9 00 sts 0x00A9, r25 |
||
3339 | 139e: 80 93 a8 00 sts 0x00A8, r24 |
||
3340 | 13a2: 08 95 ret |
||
3341 | |||
3342 | 000013a4 <GetKeyboard>: |
||
3343 | } |
||
3344 | |||
3345 | unsigned char GetKeyboard(void) |
||
3346 | { |
||
3347 | 13a4: cf 93 push r28 |
||
3348 | static char taste1 = 0, taste2 = 0,taste3 = 0,taste4 = 0,taste5 = 0; |
||
3349 | unsigned char ret = 0; |
||
3350 | 13a6: c0 e0 ldi r28, 0x00 ; 0 |
||
3351 | if(CheckDelay(KeyTimer)) |
||
3352 | 13a8: 80 91 a8 00 lds r24, 0x00A8 |
||
3353 | 13ac: 90 91 a9 00 lds r25, 0x00A9 |
||
3354 | 13b0: 0e 94 b1 09 call 0x1362 <CheckDelay> |
||
3355 | 13b4: 88 23 and r24, r24 |
||
3356 | 13b6: 09 f4 brne .+2 ; 0x13ba <GetKeyboard+0x16> |
||
3357 | 13b8: 76 c0 rjmp .+236 ; 0x14a6 <GetKeyboard+0x102> |
||
3358 | { |
||
3359 | if(_TASTE1) { if(taste1++ == 0 || taste1 == CNT_TASTE) ret |= KEY1; if(taste1 == CNT_TASTE) taste1 = CNT_TASTE-CNT_TASTE/3;} else taste1 = 0; |
||
3360 | 13ba: cf 9b sbis 0x19, 7 ; 25 |
||
3361 | 13bc: 12 c0 rjmp .+36 ; 0x13e2 <GetKeyboard+0x3e> |
||
3362 | 13be: 80 91 aa 00 lds r24, 0x00AA |
||
3363 | 13c2: 8f 5f subi r24, 0xFF ; 255 |
||
3364 | 13c4: 80 93 aa 00 sts 0x00AA, r24 |
||
3365 | 13c8: 81 30 cpi r24, 0x01 ; 1 |
||
3366 | 13ca: 11 f0 breq .+4 ; 0x13d0 <GetKeyboard+0x2c> |
||
3367 | 13cc: 8a 30 cpi r24, 0x0A ; 10 |
||
3368 | 13ce: 09 f4 brne .+2 ; 0x13d2 <GetKeyboard+0x2e> |
||
3369 | 13d0: c1 e0 ldi r28, 0x01 ; 1 |
||
3370 | 13d2: 80 91 aa 00 lds r24, 0x00AA |
||
3371 | 13d6: 8a 30 cpi r24, 0x0A ; 10 |
||
3372 | 13d8: 31 f4 brne .+12 ; 0x13e6 <GetKeyboard+0x42> |
||
3373 | 13da: 87 e0 ldi r24, 0x07 ; 7 |
||
3374 | 13dc: 80 93 aa 00 sts 0x00AA, r24 |
||
3375 | 13e0: 02 c0 rjmp .+4 ; 0x13e6 <GetKeyboard+0x42> |
||
3376 | 13e2: c0 93 aa 00 sts 0x00AA, r28 |
||
3377 | if(_TASTE2) { if(taste2++ == 0 || taste2 == CNT_TASTE) ret |= KEY2; if(taste2 == CNT_TASTE) taste2 = CNT_TASTE-CNT_TASTE/3;} else taste2 = 0; |
||
3378 | 13e6: ce 9b sbis 0x19, 6 ; 25 |
||
3379 | 13e8: 12 c0 rjmp .+36 ; 0x140e <GetKeyboard+0x6a> |
||
3380 | 13ea: 80 91 ab 00 lds r24, 0x00AB |
||
3381 | 13ee: 8f 5f subi r24, 0xFF ; 255 |
||
3382 | 13f0: 80 93 ab 00 sts 0x00AB, r24 |
||
3383 | 13f4: 81 30 cpi r24, 0x01 ; 1 |
||
3384 | 13f6: 11 f0 breq .+4 ; 0x13fc <GetKeyboard+0x58> |
||
3385 | 13f8: 8a 30 cpi r24, 0x0A ; 10 |
||
3386 | 13fa: 09 f4 brne .+2 ; 0x13fe <GetKeyboard+0x5a> |
||
3387 | 13fc: c2 60 ori r28, 0x02 ; 2 |
||
3388 | 13fe: 80 91 ab 00 lds r24, 0x00AB |
||
3389 | 1402: 8a 30 cpi r24, 0x0A ; 10 |
||
3390 | 1404: 31 f4 brne .+12 ; 0x1412 <GetKeyboard+0x6e> |
||
3391 | 1406: 87 e0 ldi r24, 0x07 ; 7 |
||
3392 | 1408: 80 93 ab 00 sts 0x00AB, r24 |
||
3393 | 140c: 02 c0 rjmp .+4 ; 0x1412 <GetKeyboard+0x6e> |
||
3394 | 140e: 10 92 ab 00 sts 0x00AB, r1 |
||
3395 | if(_TASTE3) { if(taste3++ == 0 || taste3 == CNT_TASTE) ret |= KEY3; if(taste3 == CNT_TASTE) taste3 = CNT_TASTE-CNT_TASTE/3;} else taste3 = 0; |
||
3396 | 1412: cd 9b sbis 0x19, 5 ; 25 |
||
3397 | 1414: 12 c0 rjmp .+36 ; 0x143a <GetKeyboard+0x96> |
||
3398 | 1416: 80 91 ac 00 lds r24, 0x00AC |
||
3399 | 141a: 8f 5f subi r24, 0xFF ; 255 |
||
3400 | 141c: 80 93 ac 00 sts 0x00AC, r24 |
||
3401 | 1420: 81 30 cpi r24, 0x01 ; 1 |
||
3402 | 1422: 11 f0 breq .+4 ; 0x1428 <GetKeyboard+0x84> |
||
3403 | 1424: 8a 30 cpi r24, 0x0A ; 10 |
||
3404 | 1426: 09 f4 brne .+2 ; 0x142a <GetKeyboard+0x86> |
||
3405 | 1428: c4 60 ori r28, 0x04 ; 4 |
||
3406 | 142a: 80 91 ac 00 lds r24, 0x00AC |
||
3407 | 142e: 8a 30 cpi r24, 0x0A ; 10 |
||
3408 | 1430: 31 f4 brne .+12 ; 0x143e <GetKeyboard+0x9a> |
||
3409 | 1432: 87 e0 ldi r24, 0x07 ; 7 |
||
3410 | 1434: 80 93 ac 00 sts 0x00AC, r24 |
||
3411 | 1438: 02 c0 rjmp .+4 ; 0x143e <GetKeyboard+0x9a> |
||
3412 | 143a: 10 92 ac 00 sts 0x00AC, r1 |
||
3413 | if(_TASTE4) { if(taste4++ == 0 || taste4 == CNT_TASTE) ret |= KEY4; if(taste4 == CNT_TASTE) taste4 = CNT_TASTE-CNT_TASTE/3;} else taste4 = 0; |
||
3414 | 143e: cc 9b sbis 0x19, 4 ; 25 |
||
3415 | 1440: 12 c0 rjmp .+36 ; 0x1466 <GetKeyboard+0xc2> |
||
3416 | 1442: 80 91 ad 00 lds r24, 0x00AD |
||
3417 | 1446: 8f 5f subi r24, 0xFF ; 255 |
||
3418 | 1448: 80 93 ad 00 sts 0x00AD, r24 |
||
3419 | 144c: 81 30 cpi r24, 0x01 ; 1 |
||
3420 | 144e: 11 f0 breq .+4 ; 0x1454 <GetKeyboard+0xb0> |
||
3421 | 1450: 8a 30 cpi r24, 0x0A ; 10 |
||
3422 | 1452: 09 f4 brne .+2 ; 0x1456 <GetKeyboard+0xb2> |
||
3423 | 1454: c8 60 ori r28, 0x08 ; 8 |
||
3424 | 1456: 80 91 ad 00 lds r24, 0x00AD |
||
3425 | 145a: 8a 30 cpi r24, 0x0A ; 10 |
||
3426 | 145c: 31 f4 brne .+12 ; 0x146a <GetKeyboard+0xc6> |
||
3427 | 145e: 87 e0 ldi r24, 0x07 ; 7 |
||
3428 | 1460: 80 93 ad 00 sts 0x00AD, r24 |
||
3429 | 1464: 02 c0 rjmp .+4 ; 0x146a <GetKeyboard+0xc6> |
||
3430 | 1466: 10 92 ad 00 sts 0x00AD, r1 |
||
3431 | if(_TASTE5) { if(taste5++ == 0 || taste5 == CNT_TASTE) ret |= KEY5; if(taste5 == CNT_TASTE) taste5 = CNT_TASTE-CNT_TASTE/3;} else taste5 = 0; |
||
3432 | 146a: cb 9b sbis 0x19, 3 ; 25 |
||
3433 | 146c: 12 c0 rjmp .+36 ; 0x1492 <GetKeyboard+0xee> |
||
3434 | 146e: 80 91 ae 00 lds r24, 0x00AE |
||
3435 | 1472: 8f 5f subi r24, 0xFF ; 255 |
||
3436 | 1474: 80 93 ae 00 sts 0x00AE, r24 |
||
3437 | 1478: 81 30 cpi r24, 0x01 ; 1 |
||
3438 | 147a: 11 f0 breq .+4 ; 0x1480 <GetKeyboard+0xdc> |
||
3439 | 147c: 8a 30 cpi r24, 0x0A ; 10 |
||
3440 | 147e: 09 f4 brne .+2 ; 0x1482 <GetKeyboard+0xde> |
||
3441 | 1480: c0 61 ori r28, 0x10 ; 16 |
||
3442 | 1482: 80 91 ae 00 lds r24, 0x00AE |
||
3443 | 1486: 8a 30 cpi r24, 0x0A ; 10 |
||
3444 | 1488: 31 f4 brne .+12 ; 0x1496 <GetKeyboard+0xf2> |
||
3445 | 148a: 87 e0 ldi r24, 0x07 ; 7 |
||
3446 | 148c: 80 93 ae 00 sts 0x00AE, r24 |
||
3447 | 1490: 02 c0 rjmp .+4 ; 0x1496 <GetKeyboard+0xf2> |
||
3448 | 1492: 10 92 ae 00 sts 0x00AE, r1 |
||
3449 | KeyTimer = SetDelay(KEY_DELAY_MS); |
||
3450 | 1496: 82 e3 ldi r24, 0x32 ; 50 |
||
3451 | 1498: 90 e0 ldi r25, 0x00 ; 0 |
||
3452 | 149a: 0e 94 a8 09 call 0x1350 <SetDelay> |
||
3453 | 149e: 90 93 a9 00 sts 0x00A9, r25 |
||
3454 | 14a2: 80 93 a8 00 sts 0x00A8, r24 |
||
3455 | } |
||
3456 | return(ret); |
||
3457 | } |
||
3458 | 14a6: 8c 2f mov r24, r28 |
||
3459 | 14a8: 99 27 eor r25, r25 |
||
3460 | 14aa: cf 91 pop r28 |
||
3461 | 14ac: 08 95 ret |
||
3462 | |||
3463 | 000014ae <GetKeyboard2>: |
||
3464 | |||
3465 | unsigned char GetKeyboard2(void) |
||
3466 | { |
||
3467 | unsigned char ret = 0; |
||
3468 | 14ae: 80 e0 ldi r24, 0x00 ; 0 |
||
3469 | if(_TASTE1) ret |= KEY1; |
||
3470 | 14b0: cf 99 sbic 0x19, 7 ; 25 |
||
3471 | 14b2: 81 e0 ldi r24, 0x01 ; 1 |
||
3472 | if(_TASTE2) ret |= KEY2; |
||
3473 | 14b4: ce 99 sbic 0x19, 6 ; 25 |
||
3474 | 14b6: 82 60 ori r24, 0x02 ; 2 |
||
3475 | if(_TASTE3) ret |= KEY3; |
||
3476 | 14b8: cd 99 sbic 0x19, 5 ; 25 |
||
3477 | 14ba: 84 60 ori r24, 0x04 ; 4 |
||
3478 | if(_TASTE4) ret |= KEY4; |
||
3479 | 14bc: cc 99 sbic 0x19, 4 ; 25 |
||
3480 | 14be: 88 60 ori r24, 0x08 ; 8 |
||
3481 | if(_TASTE5) ret |= KEY5; |
||
3482 | 14c0: cb 99 sbic 0x19, 3 ; 25 |
||
3483 | 14c2: 80 61 ori r24, 0x10 ; 16 |
||
3484 | return(ret); |
||
3485 | } |
||
3486 | 14c4: 99 27 eor r25, r25 |
||
3487 | 14c6: 08 95 ret |
||
3488 | |||
3489 | 000014c8 <Menu>: |
||
3490 | unsigned char KanalVon[MAX_KANAL]; |
||
3491 | unsigned char KanalAn[MAX_KANAL]; |
||
3492 | |||
3493 | void Menu(unsigned char key) |
||
3494 | { |
||
3495 | 14c8: 0f 93 push r16 |
||
3496 | 14ca: 1f 93 push r17 |
||
3497 | 14cc: cf 93 push r28 |
||
3498 | 14ce: df 93 push r29 |
||
3499 | static unsigned int arr = 0; |
||
3500 | static unsigned char MaxMenue = 2,MenuePunkt=0; |
||
3501 | unsigned char kanal = 0; |
||
3502 | |||
3503 | if(key & KEY1) { if(MenuePunkt) MenuePunkt--; else MenuePunkt = MaxMenue; LCD_Clear; } |
||
3504 | 14d0: c8 2f mov r28, r24 |
||
3505 | 14d2: dd 27 eor r29, r29 |
||
3506 | 14d4: c0 ff sbrs r28, 0 |
||
3507 | 14d6: 0f c0 rjmp .+30 ; 0x14f6 <Menu+0x2e> |
||
3508 | 14d8: 80 91 b3 00 lds r24, 0x00B3 |
||
3509 | 14dc: 88 23 and r24, r24 |
||
3510 | 14de: 11 f0 breq .+4 ; 0x14e4 <Menu+0x1c> |
||
3511 | 14e0: 81 50 subi r24, 0x01 ; 1 |
||
3512 | 14e2: 02 c0 rjmp .+4 ; 0x14e8 <Menu+0x20> |
||
3513 | 14e4: 80 91 7b 00 lds r24, 0x007B |
||
3514 | 14e8: 80 93 b3 00 sts 0x00B3, r24 |
||
3515 | 14ec: 81 e0 ldi r24, 0x01 ; 1 |
||
3516 | 14ee: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
3517 | 14f2: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
3518 | if(key & KEY2) { MenuePunkt++; LCD_Clear; } |
||
3519 | 14f6: 8e 01 movw r16, r28 |
||
3520 | 14f8: 02 70 andi r16, 0x02 ; 2 |
||
3521 | 14fa: 10 70 andi r17, 0x00 ; 0 |
||
3522 | 14fc: c1 ff sbrs r28, 1 |
||
3523 | 14fe: 0a c0 rjmp .+20 ; 0x1514 <Menu+0x4c> |
||
3524 | 1500: 80 91 b3 00 lds r24, 0x00B3 |
||
3525 | 1504: 8f 5f subi r24, 0xFF ; 255 |
||
3526 | 1506: 80 93 b3 00 sts 0x00B3, r24 |
||
3527 | 150a: 81 e0 ldi r24, 0x01 ; 1 |
||
3528 | 150c: 0e 94 e1 05 call 0xbc2 <_lcd_write_command> |
||
3529 | 1510: 0e 94 c9 05 call 0xb92 <_long_delay> |
||
3530 | if((key & KEY1) && (key & KEY2)) MenuePunkt = 0; |
||
3531 | 1514: c0 ff sbrs r28, 0 |
||
3532 | 1516: 04 c0 rjmp .+8 ; 0x1520 <Menu+0x58> |
||
3533 | 1518: 01 2b or r16, r17 |
||
3534 | 151a: 11 f0 breq .+4 ; 0x1520 <Menu+0x58> |
||
3535 | 151c: 10 92 b3 00 sts 0x00B3, r1 |
||
3536 | // LCD_printfxy(13,0,"[%i]",MenuePunkt); |
||
3537 | switch(MenuePunkt) |
||
3538 | 1520: 20 91 b3 00 lds r18, 0x00B3 |
||
3539 | 1524: 82 2f mov r24, r18 |
||
3540 | 1526: 99 27 eor r25, r25 |
||
3541 | 1528: 81 30 cpi r24, 0x01 ; 1 |
||
3542 | 152a: 91 05 cpc r25, r1 |
||
3543 | 152c: 09 f4 brne .+2 ; 0x1530 <Menu+0x68> |
||
3544 | 152e: 41 c0 rjmp .+130 ; 0x15b2 <Menu+0xea> |
||
3545 | 1530: 82 30 cpi r24, 0x02 ; 2 |
||
3546 | 1532: 91 05 cpc r25, r1 |
||
3547 | 1534: 1c f4 brge .+6 ; 0x153c <Menu+0x74> |
||
3548 | 1536: 89 2b or r24, r25 |
||
3549 | 1538: 49 f0 breq .+18 ; 0x154c <Menu+0x84> |
||
3550 | 153a: bf c0 rjmp .+382 ; 0x16ba <Menu+0x1f2> |
||
3551 | 153c: 82 30 cpi r24, 0x02 ; 2 |
||
3552 | 153e: 91 05 cpc r25, r1 |
||
3553 | 1540: 09 f4 brne .+2 ; 0x1544 <Menu+0x7c> |
||
3554 | 1542: 6a c0 rjmp .+212 ; 0x1618 <Menu+0x150> |
||
3555 | 1544: 03 97 sbiw r24, 0x03 ; 3 |
||
3556 | 1546: 09 f4 brne .+2 ; 0x154a <Menu+0x82> |
||
3557 | 1548: 8e c0 rjmp .+284 ; 0x1666 <Menu+0x19e> |
||
3558 | 154a: b7 c0 rjmp .+366 ; 0x16ba <Menu+0x1f2> |
||
3559 | { |
||
3560 | case 0: |
||
3561 | LCD_printfxy(0,0,"Verbinden mit"); |
||
3562 | 154c: 60 e0 ldi r22, 0x00 ; 0 |
||
3563 | 154e: 86 2f mov r24, r22 |
||
3564 | 1550: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
3565 | 1554: 84 eb ldi r24, 0xB4 ; 180 |
||
3566 | 1556: 90 e0 ldi r25, 0x00 ; 0 |
||
3567 | 1558: 9f 93 push r25 |
||
3568 | 155a: 8f 93 push r24 |
||
3569 | 155c: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
3570 | LCD_printfxy(0,1,"MicroSPS:%2i ",SlaveAdresse); |
||
3571 | 1560: 61 e0 ldi r22, 0x01 ; 1 |
||
3572 | 1562: 80 e0 ldi r24, 0x00 ; 0 |
||
3573 | 1564: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
3574 | 1568: 0f 90 pop r0 |
||
3575 | 156a: 0f 90 pop r0 |
||
3576 | 156c: 80 91 64 00 lds r24, 0x0064 |
||
3577 | 1570: 99 27 eor r25, r25 |
||
3578 | 1572: 9f 93 push r25 |
||
3579 | 1574: 8f 93 push r24 |
||
3580 | 1576: 82 ec ldi r24, 0xC2 ; 194 |
||
3581 | 1578: 90 e0 ldi r25, 0x00 ; 0 |
||
3582 | 157a: 9f 93 push r25 |
||
3583 | 157c: 8f 93 push r24 |
||
3584 | 157e: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
3585 | if(key & KEY3 && SlaveAdresse > 1) SlaveAdresse--; |
||
3586 | 1582: 0f 90 pop r0 |
||
3587 | 1584: 0f 90 pop r0 |
||
3588 | 1586: 0f 90 pop r0 |
||
3589 | 1588: 0f 90 pop r0 |
||
3590 | 158a: c2 ff sbrs r28, 2 |
||
3591 | 158c: 07 c0 rjmp .+14 ; 0x159c <Menu+0xd4> |
||
3592 | 158e: 80 91 64 00 lds r24, 0x0064 |
||
3593 | 1592: 82 30 cpi r24, 0x02 ; 2 |
||
3594 | 1594: 18 f0 brcs .+6 ; 0x159c <Menu+0xd4> |
||
3595 | 1596: 81 50 subi r24, 0x01 ; 1 |
||
3596 | 1598: 80 93 64 00 sts 0x0064, r24 |
||
3597 | if(key & KEY4 && SlaveAdresse < 26) SlaveAdresse++; |
||
3598 | 159c: c3 ff sbrs r28, 3 |
||
3599 | 159e: 92 c0 rjmp .+292 ; 0x16c4 <Menu+0x1fc> |
||
3600 | 15a0: 80 91 64 00 lds r24, 0x0064 |
||
3601 | 15a4: 8a 31 cpi r24, 0x1A ; 26 |
||
3602 | 15a6: 08 f0 brcs .+2 ; 0x15aa <Menu+0xe2> |
||
3603 | 15a8: 8d c0 rjmp .+282 ; 0x16c4 <Menu+0x1fc> |
||
3604 | 15aa: 8f 5f subi r24, 0xFF ; 255 |
||
3605 | 15ac: 80 93 64 00 sts 0x0064, r24 |
||
3606 | break; |
||
3607 | 15b0: 89 c0 rjmp .+274 ; 0x16c4 <Menu+0x1fc> |
||
3608 | case 1: |
||
3609 | LCD_printfxy(0,0,"Max Adresse"); |
||
3610 | 15b2: 60 e0 ldi r22, 0x00 ; 0 |
||
3611 | 15b4: 86 2f mov r24, r22 |
||
3612 | 15b6: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
3613 | 15ba: 80 ed ldi r24, 0xD0 ; 208 |
||
3614 | 15bc: 90 e0 ldi r25, 0x00 ; 0 |
||
3615 | 15be: 9f 93 push r25 |
||
3616 | 15c0: 8f 93 push r24 |
||
3617 | 15c2: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
3618 | LCD_printfxy(0,1,"%2i ",AnzahlTeilnehmer); |
||
3619 | 15c6: 61 e0 ldi r22, 0x01 ; 1 |
||
3620 | 15c8: 80 e0 ldi r24, 0x00 ; 0 |
||
3621 | 15ca: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
3622 | 15ce: 0f 90 pop r0 |
||
3623 | 15d0: 0f 90 pop r0 |
||
3624 | 15d2: 80 91 6c 00 lds r24, 0x006C |
||
3625 | 15d6: 99 27 eor r25, r25 |
||
3626 | 15d8: 9f 93 push r25 |
||
3627 | 15da: 8f 93 push r24 |
||
3628 | 15dc: 8c ed ldi r24, 0xDC ; 220 |
||
3629 | 15de: 90 e0 ldi r25, 0x00 ; 0 |
||
3630 | 15e0: 9f 93 push r25 |
||
3631 | 15e2: 8f 93 push r24 |
||
3632 | 15e4: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
3633 | if(key & KEY3 && AnzahlTeilnehmer > 1) AnzahlTeilnehmer--; |
||
3634 | 15e8: 0f 90 pop r0 |
||
3635 | 15ea: 0f 90 pop r0 |
||
3636 | 15ec: 0f 90 pop r0 |
||
3637 | 15ee: 0f 90 pop r0 |
||
3638 | 15f0: c2 ff sbrs r28, 2 |
||
3639 | 15f2: 07 c0 rjmp .+14 ; 0x1602 <Menu+0x13a> |
||
3640 | 15f4: 80 91 6c 00 lds r24, 0x006C |
||
3641 | 15f8: 82 30 cpi r24, 0x02 ; 2 |
||
3642 | 15fa: 18 f0 brcs .+6 ; 0x1602 <Menu+0x13a> |
||
3643 | 15fc: 81 50 subi r24, 0x01 ; 1 |
||
3644 | 15fe: 80 93 6c 00 sts 0x006C, r24 |
||
3645 | if(key & KEY4 && AnzahlTeilnehmer < 26) AnzahlTeilnehmer++; |
||
3646 | 1602: c3 ff sbrs r28, 3 |
||
3647 | 1604: 5f c0 rjmp .+190 ; 0x16c4 <Menu+0x1fc> |
||
3648 | 1606: 80 91 6c 00 lds r24, 0x006C |
||
3649 | 160a: 8a 31 cpi r24, 0x1A ; 26 |
||
3650 | 160c: 08 f0 brcs .+2 ; 0x1610 <Menu+0x148> |
||
3651 | 160e: 5a c0 rjmp .+180 ; 0x16c4 <Menu+0x1fc> |
||
3652 | 1610: 8f 5f subi r24, 0xFF ; 255 |
||
3653 | 1612: 80 93 6c 00 sts 0x006C, r24 |
||
3654 | break; |
||
3655 | 1616: 56 c0 rjmp .+172 ; 0x16c4 <Menu+0x1fc> |
||
3656 | case 2: |
||
3657 | LCD_printfxy(0,0,"Checksum"); |
||
3658 | 1618: 60 e0 ldi r22, 0x00 ; 0 |
||
3659 | 161a: 86 2f mov r24, r22 |
||
3660 | 161c: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
3661 | 1620: 81 ee ldi r24, 0xE1 ; 225 |
||
3662 | 1622: 90 e0 ldi r25, 0x00 ; 0 |
||
3663 | 1624: 9f 93 push r25 |
||
3664 | 1626: 8f 93 push r24 |
||
3665 | 1628: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
3666 | LCD_printfxy(0,1,"Errors:%5i ",CntCrcError); |
||
3667 | 162c: 61 e0 ldi r22, 0x01 ; 1 |
||
3668 | 162e: 80 e0 ldi r24, 0x00 ; 0 |
||
3669 | 1630: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
3670 | 1634: 0f 90 pop r0 |
||
3671 | 1636: 0f 90 pop r0 |
||
3672 | 1638: 80 91 99 00 lds r24, 0x0099 |
||
3673 | 163c: 90 91 9a 00 lds r25, 0x009A |
||
3674 | 1640: 9f 93 push r25 |
||
3675 | 1642: 8f 93 push r24 |
||
3676 | 1644: 8a ee ldi r24, 0xEA ; 234 |
||
3677 | 1646: 90 e0 ldi r25, 0x00 ; 0 |
||
3678 | 1648: 9f 93 push r25 |
||
3679 | 164a: 8f 93 push r24 |
||
3680 | 164c: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
3681 | if(key & KEY3) CntCrcError = 0; |
||
3682 | 1650: 0f 90 pop r0 |
||
3683 | 1652: 0f 90 pop r0 |
||
3684 | 1654: 0f 90 pop r0 |
||
3685 | 1656: 0f 90 pop r0 |
||
3686 | 1658: c2 ff sbrs r28, 2 |
||
3687 | 165a: 34 c0 rjmp .+104 ; 0x16c4 <Menu+0x1fc> |
||
3688 | 165c: 10 92 9a 00 sts 0x009A, r1 |
||
3689 | 1660: 10 92 99 00 sts 0x0099, r1 |
||
3690 | break; |
||
3691 | 1664: 2f c0 rjmp .+94 ; 0x16c4 <Menu+0x1fc> |
||
3692 | case 3: |
||
3693 | LCD_printfxy(0,0,"Display"); |
||
3694 | 1666: 60 e0 ldi r22, 0x00 ; 0 |
||
3695 | 1668: 86 2f mov r24, r22 |
||
3696 | 166a: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
3697 | 166e: 86 ef ldi r24, 0xF6 ; 246 |
||
3698 | 1670: 90 e0 ldi r25, 0x00 ; 0 |
||
3699 | 1672: 9f 93 push r25 |
||
3700 | 1674: 8f 93 push r24 |
||
3701 | 1676: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
3702 | LCD_printfxy(0,1,"Zeilen:%1i ",DisplayZeilen); |
||
3703 | 167a: 61 e0 ldi r22, 0x01 ; 1 |
||
3704 | 167c: 80 e0 ldi r24, 0x00 ; 0 |
||
3705 | 167e: 0e 94 55 06 call 0xcaa <LCD_Gotoxy> |
||
3706 | 1682: 0f 90 pop r0 |
||
3707 | 1684: 0f 90 pop r0 |
||
3708 | 1686: 80 91 65 00 lds r24, 0x0065 |
||
3709 | 168a: 99 27 eor r25, r25 |
||
3710 | 168c: 9f 93 push r25 |
||
3711 | 168e: 8f 93 push r24 |
||
3712 | 1690: 8e ef ldi r24, 0xFE ; 254 |
||
3713 | 1692: 90 e0 ldi r25, 0x00 ; 0 |
||
3714 | 1694: 9f 93 push r25 |
||
3715 | 1696: 8f 93 push r24 |
||
3716 | 1698: 0e 94 e3 06 call 0xdc6 <_printf_P> |
||
3717 | if(key & KEY3) DisplayZeilen = 4; |
||
3718 | 169c: 0f 90 pop r0 |
||
3719 | 169e: 0f 90 pop r0 |
||
3720 | 16a0: 0f 90 pop r0 |
||
3721 | 16a2: 0f 90 pop r0 |
||
3722 | 16a4: c2 ff sbrs r28, 2 |
||
3723 | 16a6: 03 c0 rjmp .+6 ; 0x16ae <Menu+0x1e6> |
||
3724 | 16a8: 84 e0 ldi r24, 0x04 ; 4 |
||
3725 | 16aa: 80 93 65 00 sts 0x0065, r24 |
||
3726 | if(key & KEY4) DisplayZeilen = 2; |
||
3727 | 16ae: c3 ff sbrs r28, 3 |
||
3728 | 16b0: 09 c0 rjmp .+18 ; 0x16c4 <Menu+0x1fc> |
||
3729 | 16b2: 82 e0 ldi r24, 0x02 ; 2 |
||
3730 | 16b4: 80 93 65 00 sts 0x0065, r24 |
||
3731 | break; |
||
3732 | 16b8: 05 c0 rjmp .+10 ; 0x16c4 <Menu+0x1fc> |
||
3733 | |||
3734 | |||
3735 | /* case 1: |
||
3736 | case 2: |
||
3737 | case 3: |
||
3738 | case 4: |
||
3739 | kanal = MenuePunkt - 1; |
||
3740 | LCD_printfxy(0,0,"Datenkanal:%2i",kanal); |
||
3741 | LCD_printfxy(0,1,"Von:%2i an %2i ",KanalVon[kanal],KanalAn[kanal]); |
||
3742 | if(key & KEY3) KanalVon[kanal]++; |
||
3743 | if(key & KEY4) KanalAn[kanal]++; |
||
3744 | KanalVon[kanal] % MAX_KANAL; |
||
3745 | KanalAn[kanal] % MAX_KANAL; |
||
3746 | break; |
||
3747 | */ |
||
3748 | /* |
||
3749 | case 1: |
||
3750 | LCD_printfxy(0,0,"Intervall"); |
||
3751 | LCD_printfxy(0,1,"Display:%3ims ",IntervallDisplay); |
||
3752 | if(key & KEY3 && IntervallDisplay > 25) IntervallDisplay -= 5; |
||
3753 | if(key & KEY4 && IntervallDisplay < 990) IntervallDisplay += 5; |
||
3754 | break; |
||
3755 | case 2: |
||
3756 | LCD_printfxy(0,0,"Intervall"); |
||
3757 | LCD_printfxy(0,1,"Debug:%3ims ",IntervallDebug); |
||
3758 | if(key & KEY3 && IntervallDebug > 25) IntervallDebug -= 5; |
||
3759 | if(key & KEY4 && IntervallDebug < 990) IntervallDebug += 5; |
||
3760 | break; |
||
3761 | |||
3762 | case 1: |
||
3763 | LCD_printfxy(0,0,"Time"); |
||
3764 | LCD_printfxy(0,1,"%3i:%02i",Minute,Sekunde); |
||
3765 | if(key & KEY3) if(Minute) Minute--; |
||
3766 | if(key & KEY4) Minute++; |
||
3767 | if(key & KEY5) Sekunde = 0; |
||
3768 | break; |
||
3769 | case 2: |
||
3770 | LCD_printfxy(0,0,"Testvariable"); |
||
3771 | LCD_printfxy(0,1,"TestInt:%5i",TestInt); |
||
3772 | if(key & KEY3) TestInt--; |
||
3773 | if(key & KEY4) TestInt++; |
||
3774 | break; |
||
3775 | case 3: |
||
3776 | LCD_printfxy(0,0,"Testarray"); |
||
3777 | LCD_printfxy(0,1,"Array[%i]=%3i",arr,Array[arr]); |
||
3778 | if(key & KEY5) if(++arr == ARRAYGROESSE) arr = 0; |
||
3779 | if(key & KEY3) Array[arr]--; |
||
3780 | if(key & KEY4) Array[arr]++; |
||
3781 | break; |
||
3782 | case 4: |
||
3783 | LCD_printfxy(0,0,"Infrarot RC5:"); |
||
3784 | LCD_printfxy(0,1,"Adr:%2i Cmd:%3i",(IR_Code >> 8), IR_Code & 0xff); |
||
3785 | break; |
||
3786 | */ |
||
3787 | default: MaxMenue = MenuePunkt - 1; |
||
3788 | 16ba: 21 50 subi r18, 0x01 ; 1 |
||
3789 | 16bc: 20 93 7b 00 sts 0x007B, r18 |
||
3790 | MenuePunkt = 0; |
||
3791 | 16c0: 10 92 b3 00 sts 0x00B3, r1 |
||
3792 | 16c4: df 91 pop r29 |
||
3793 | 16c6: cf 91 pop r28 |
||
3794 | 16c8: 1f 91 pop r17 |
||
3795 | 16ca: 0f 91 pop r16 |
||
3796 | 16cc: 08 95 ret |
||
3797 | |||
3798 | 000016ce <InitIR>: |
||
3799 | // Init IR |
||
3800 | // ************************************************************************ |
||
3801 | void InitIR(void) |
||
3802 | { |
||
3803 | INT0_ENABLE; // ext. Int0 enable |
||
3804 | 16ce: 8b b7 in r24, 0x3b ; 59 |
||
3805 | 16d0: 80 64 ori r24, 0x40 ; 64 |
||
3806 | 16d2: 8b bf out 0x3b, r24 ; 59 |
||
3807 | CLR_INT0_FLAG; // war |= 0x40 |
||
3808 | 16d4: 8a b7 in r24, 0x3a ; 58 |
||
3809 | 16d6: 8f 7b andi r24, 0xBF ; 191 |
||
3810 | 16d8: 8a bf out 0x3a, r24 ; 58 |
||
3811 | INIT_INT0_FLANKE; |
||
3812 | 16da: 85 b7 in r24, 0x35 ; 53 |
||
3813 | 16dc: 8c 7f andi r24, 0xFC ; 252 |
||
3814 | 16de: 85 bf out 0x35, r24 ; 53 |
||
3815 | 16e0: 85 b7 in r24, 0x35 ; 53 |
||
3816 | 16e2: 82 60 ori r24, 0x02 ; 2 |
||
3817 | 16e4: 85 bf out 0x35, r24 ; 53 |
||
3818 | TIMER0_PRESCALER = 0x04; // Timer0: Clk div 256 |
||
3819 | 16e6: 84 e0 ldi r24, 0x04 ; 4 |
||
3820 | 16e8: 83 bf out 0x33, r24 ; 51 |
||
3821 | |||
3822 | Decodierung_Lauft = 0; |
||
3823 | 16ea: 10 92 c9 01 sts 0x01C9, r1 |
||
3824 | New_IR_Code = 0; |
||
3825 | 16ee: 10 92 c6 01 sts 0x01C6, r1 |
||
3826 | IR_Code = 0; |
||
3827 | 16f2: 10 92 c8 01 sts 0x01C8, r1 |
||
3828 | 16f6: 10 92 c7 01 sts 0x01C7, r1 |
||
3829 | 16fa: 08 95 ret |
||
3830 | |||
3831 | 000016fc <__vector_1>: |
||
3832 | |||
3833 | |||
3834 | |||
3835 | } |
||
3836 | // ************************************************************************** |
||
3837 | // * aufgerufen durch: externer Interrupt |
||
3838 | // ************************************************************************** |
||
3839 | // * Die Funktion wird durch einen externen Interrupt aufgerufen. |
||
3840 | // * Sie dient nur zum Starten der Abtastsequenz und zum Triggern auf die |
||
3841 | // * Signalflanken in der Mitte der Daten. |
||
3842 | // ************************************************************************** |
||
3843 | SIGNAL (SIG_INTERRUPT0) |
||
3844 | { |
||
3845 | 16fc: 1f 92 push r1 |
||
3846 | 16fe: 0f 92 push r0 |
||
3847 | 1700: 0f b6 in r0, 0x3f ; 63 |
||
3848 | 1702: 0f 92 push r0 |
||
3849 | 1704: 11 24 eor r1, r1 |
||
3850 | 1706: 8f 93 push r24 |
||
3851 | // Zeitbasis fuer Timer einstellen |
||
3852 | // Entspricht 1,5 mal einer Bitlaenge |
||
3853 | // PORTB++; |
||
3854 | TCNT0 = -41; |
||
3855 | 1708: 87 ed ldi r24, 0xD7 ; 215 |
||
3856 | 170a: 82 bf out 0x32, r24 ; 50 |
||
3857 | TIM0_START; // Timer 0 starten, |
||
3858 | 170c: 89 b7 in r24, 0x39 ; 57 |
||
3859 | 170e: 81 60 ori r24, 0x01 ; 1 |
||
3860 | 1710: 89 bf out 0x39, r24 ; 57 |
||
3861 | if(Decodierung_Lauft) INT0_DISABLE; // die erneute Int.-Ausl”sung soll |
||
3862 | 1712: 80 91 c9 01 lds r24, 0x01C9 |
||
3863 | 1716: 88 23 and r24, r24 |
||
3864 | 1718: 19 f0 breq .+6 ; 0x1720 <__vector_1+0x24> |
||
3865 | 171a: 8b b7 in r24, 0x3b ; 59 |
||
3866 | 171c: 8f 7b andi r24, 0xBF ; 191 |
||
3867 | 171e: 8b bf out 0x3b, r24 ; 59 |
||
3868 | 1720: 8f 91 pop r24 |
||
3869 | 1722: 0f 90 pop r0 |
||
3870 | 1724: 0f be out 0x3f, r0 ; 63 |
||
3871 | 1726: 0f 90 pop r0 |
||
3872 | 1728: 1f 90 pop r1 |
||
3873 | 172a: 18 95 reti |
||
3874 | |||
3875 | 0000172c <__vector_11>: |
||
3876 | // nur die Timer-Routine erlauben |
||
3877 | |||
3878 | } |
||
3879 | |||
3880 | // ************************************************************************** |
||
3881 | // * aufgerufen durch: Timerueberlauf Timer 0 |
||
3882 | // ************************************************************************** |
||
3883 | // * Die Funktion wird durch einen Timer0-Interrupt aufgerufen. |
||
3884 | // * Der Timer wird vom ext. Int0 gestartet. |
||
3885 | // * Das Infrarotsignal wird hier abgetastet und die Wertigkeiten der |
||
3886 | // * Bits entsprechend aufaddiert. Das empfangende Zeichen wird in der |
||
3887 | // * globalen Variablen IR_Code gespeichert. Nach Empfang wird das Bit |
||
3888 | // * Neues_Zeichen gesetzt. |
||
3889 | // ************************************************************************** |
||
3890 | SIGNAL (SIG_OVERFLOW0) |
||
3891 | { |
||
3892 | 172c: 1f 92 push r1 |
||
3893 | 172e: 0f 92 push r0 |
||
3894 | 1730: 0f b6 in r0, 0x3f ; 63 |
||
3895 | 1732: 0f 92 push r0 |
||
3896 | 1734: 11 24 eor r1, r1 |
||
3897 | 1736: 2f 93 push r18 |
||
3898 | 1738: 3f 93 push r19 |
||
3899 | 173a: 4f 93 push r20 |
||
3900 | 173c: 8f 93 push r24 |
||
3901 | 173e: 9f 93 push r25 |
||
3902 | |||
3903 | static unsigned int Shift,IR_Code_tmp; |
||
3904 | static unsigned char IR_Zaehler=0,IRSperrCounter=0; |
||
3905 | // Reinitialize Timer's 0 value |
||
3906 | TCNT1 = -41; |
||
3907 | 1740: 87 ed ldi r24, 0xD7 ; 215 |
||
3908 | 1742: 9f ef ldi r25, 0xFF ; 255 |
||
3909 | 1744: 9d bd out 0x2d, r25 ; 45 |
||
3910 | 1746: 8c bd out 0x2c, r24 ; 44 |
||
3911 | if (IRSperrCounter) |
||
3912 | 1748: 80 91 b9 00 lds r24, 0x00B9 |
||
3913 | 174c: 88 23 and r24, r24 |
||
3914 | 174e: 69 f0 breq .+26 ; 0x176a <__vector_11+0x3e> |
||
3915 | { IRSperrCounter--; |
||
3916 | 1750: 81 50 subi r24, 0x01 ; 1 |
||
3917 | 1752: 80 93 b9 00 sts 0x00B9, r24 |
||
3918 | if (!IRSperrCounter) |
||
3919 | 1756: 88 23 and r24, r24 |
||
3920 | 1758: 09 f0 breq .+2 ; 0x175c <__vector_11+0x30> |
||
3921 | 175a: 8a c0 rjmp .+276 ; 0x1870 <__vector_11+0x144> |
||
3922 | { |
||
3923 | TIM0_STOPP; // Timer0 sperre wird durch ExtInt0 gestartet |
||
3924 | 175c: 89 b7 in r24, 0x39 ; 57 |
||
3925 | 175e: 8e 7f andi r24, 0xFE ; 254 |
||
3926 | 1760: 89 bf out 0x39, r24 ; 57 |
||
3927 | CLR_INT0_FLAG; // IntFlag Loeschen |
||
3928 | 1762: 8a b7 in r24, 0x3a ; 58 |
||
3929 | 1764: 8f 7b andi r24, 0xBF ; 191 |
||
3930 | 1766: 8a bf out 0x3a, r24 ; 58 |
||
3931 | 1768: 80 c0 rjmp .+256 ; 0x186a <__vector_11+0x13e> |
||
3932 | INT0_ENABLE; // externen Interrupt wieder freigenben |
||
3933 | } |
||
3934 | } |
||
3935 | else |
||
3936 | { |
||
3937 | if(IR_Zaehler > 1) |
||
3938 | 176a: 40 91 b8 00 lds r20, 0x00B8 |
||
3939 | 176e: 42 30 cpi r20, 0x02 ; 2 |
||
3940 | 1770: 88 f0 brcs .+34 ; 0x1794 <__vector_11+0x68> |
||
3941 | { |
||
3942 | Decodierung_Lauft = 1; |
||
3943 | 1772: 81 e0 ldi r24, 0x01 ; 1 |
||
3944 | 1774: 80 93 c9 01 sts 0x01C9, r24 |
||
3945 | { |
||
3946 | CLR_INT0_FLAG; // Interrupt Flag loeschen |
||
3947 | 1778: 8a b7 in r24, 0x3a ; 58 |
||
3948 | 177a: 8f 7b andi r24, 0xBF ; 191 |
||
3949 | 177c: 8a bf out 0x3a, r24 ; 58 |
||
3950 | if(IR_PP) INT0_NEG_FLANKE; // naechste fallende Flanke soll Int0 ausloesen |
||
3951 | 177e: 82 9b sbis 0x10, 2 ; 16 |
||
3952 | 1780: 03 c0 rjmp .+6 ; 0x1788 <__vector_11+0x5c> |
||
3953 | 1782: 85 b7 in r24, 0x35 ; 53 |
||
3954 | 1784: 8e 7f andi r24, 0xFE ; 254 |
||
3955 | 1786: 02 c0 rjmp .+4 ; 0x178c <__vector_11+0x60> |
||
3956 | else INT0_POS_FLANKE; // naechste steigende Flanke soll Int0 ausloesen |
||
3957 | 1788: 85 b7 in r24, 0x35 ; 53 |
||
3958 | 178a: 81 60 ori r24, 0x01 ; 1 |
||
3959 | 178c: 85 bf out 0x35, r24 ; 53 |
||
3960 | INT0_ENABLE; // externen Int frei |
||
3961 | 178e: 8b b7 in r24, 0x3b ; 59 |
||
3962 | 1790: 80 64 ori r24, 0x40 ; 64 |
||
3963 | 1792: 8b bf out 0x3b, r24 ; 59 |
||
3964 | } |
||
3965 | } |
||
3966 | |||
3967 | if(!IR_Zaehler) // es beginnt eine neue Abtastung |
||
3968 | 1794: 44 23 and r20, r20 |
||
3969 | 1796: 59 f4 brne .+22 ; 0x17ae <__vector_11+0x82> |
||
3970 | { // es handelt sich um das 1. Sync-Bit |
||
3971 | IR_Code_tmp=0; // Merker löschen |
||
3972 | 1798: 10 92 b7 00 sts 0x00B7, r1 |
||
3973 | 179c: 10 92 b6 00 sts 0x00B6, r1 |
||
3974 | Shift=0x8000; //;8192; // Maske auf MSB |
||
3975 | 17a0: 80 e0 ldi r24, 0x00 ; 0 |
||
3976 | 17a2: 90 e8 ldi r25, 0x80 ; 128 |
||
3977 | 17a4: 90 93 b5 00 sts 0x00B5, r25 |
||
3978 | 17a8: 80 93 b4 00 sts 0x00B4, r24 |
||
3979 | 17ac: 14 c0 rjmp .+40 ; 0x17d6 <__vector_11+0xaa> |
||
3980 | } |
||
3981 | else |
||
3982 | if(IR_PP==1) // das empfangende Bit ist logisch High |
||
3983 | 17ae: 82 9b sbis 0x10, 2 ; 16 |
||
3984 | 17b0: 10 c0 rjmp .+32 ; 0x17d2 <__vector_11+0xa6> |
||
3985 | { if(IR_Zaehler>2) // (IR_Zaehler ist gleich 1 beim 2. Sync-Bit) |
||
3986 | 17b2: 43 30 cpi r20, 0x03 ; 3 |
||
3987 | 17b4: 70 f0 brcs .+28 ; 0x17d2 <__vector_11+0xa6> |
||
3988 | { // 2 --> Toggle-Bit (wird übersprungen) |
||
3989 | IR_Code_tmp |= Shift; // entsprechendse Bit setzen |
||
3990 | 17b6: 80 91 b6 00 lds r24, 0x00B6 |
||
3991 | 17ba: 90 91 b7 00 lds r25, 0x00B7 |
||
3992 | 17be: 20 91 b4 00 lds r18, 0x00B4 |
||
3993 | 17c2: 30 91 b5 00 lds r19, 0x00B5 |
||
3994 | 17c6: 82 2b or r24, r18 |
||
3995 | 17c8: 93 2b or r25, r19 |
||
3996 | 17ca: 90 93 b7 00 sts 0x00B7, r25 |
||
3997 | 17ce: 80 93 b6 00 sts 0x00B6, r24 |
||
3998 | } |
||
3999 | } |
||
4000 | |||
4001 | if ((IR_Zaehler < 2) && !(IR_PP==1)) // startbits überprüfen |
||
4002 | 17d2: 42 30 cpi r20, 0x02 ; 2 |
||
4003 | 17d4: 20 f4 brcc .+8 ; 0x17de <__vector_11+0xb2> |
||
4004 | 17d6: 82 99 sbic 0x10, 2 ; 16 |
||
4005 | 17d8: 02 c0 rjmp .+4 ; 0x17de <__vector_11+0xb2> |
||
4006 | { |
||
4007 | IR_Zaehler = 0; |
||
4008 | 17da: 10 92 b8 00 sts 0x00B8, r1 |
||
4009 | } |
||
4010 | |||
4011 | Shift >>=1; // Shiftregister um 1 nach rechts schieben |
||
4012 | 17de: 80 91 b4 00 lds r24, 0x00B4 |
||
4013 | 17e2: 90 91 b5 00 lds r25, 0x00B5 |
||
4014 | 17e6: 96 95 lsr r25 |
||
4015 | 17e8: 87 95 ror r24 |
||
4016 | 17ea: 90 93 b5 00 sts 0x00B5, r25 |
||
4017 | 17ee: 80 93 b4 00 sts 0x00B4, r24 |
||
4018 | // (für das nächste empf. Bit |
||
4019 | if (Shift == 128) Shift = 32; // Adresse ins HighByte, Kommando ins LowByte |
||
4020 | 17f2: 80 38 cpi r24, 0x80 ; 128 |
||
4021 | 17f4: 91 05 cpc r25, r1 |
||
4022 | 17f6: 31 f4 brne .+12 ; 0x1804 <__vector_11+0xd8> |
||
4023 | 17f8: 80 e2 ldi r24, 0x20 ; 32 |
||
4024 | 17fa: 90 e0 ldi r25, 0x00 ; 0 |
||
4025 | 17fc: 90 93 b5 00 sts 0x00B5, r25 |
||
4026 | 1800: 80 93 b4 00 sts 0x00B4, r24 |
||
4027 | |||
4028 | if(IR_Zaehler++==15) // Das IR-Wort wurde vollstaendig abgetastet |
||
4029 | 1804: 80 91 b8 00 lds r24, 0x00B8 |
||
4030 | 1808: 8f 5f subi r24, 0xFF ; 255 |
||
4031 | 180a: 80 93 b8 00 sts 0x00B8, r24 |
||
4032 | 180e: 80 31 cpi r24, 0x10 ; 16 |
||
4033 | 1810: 79 f5 brne .+94 ; 0x1870 <__vector_11+0x144> |
||
4034 | { |
||
4035 | CLR_INT0_FLAG; // IntFlag Loeschen |
||
4036 | 1812: 8a b7 in r24, 0x3a ; 58 |
||
4037 | 1814: 8f 7b andi r24, 0xBF ; 191 |
||
4038 | 1816: 8a bf out 0x3a, r24 ; 58 |
||
4039 | INT0_NEG_FLANKE; // fallende Flanke |
||
4040 | 1818: 85 b7 in r24, 0x35 ; 53 |
||
4041 | 181a: 8e 7f andi r24, 0xFE ; 254 |
||
4042 | 181c: 85 bf out 0x35, r24 ; 53 |
||
4043 | IR_Zaehler = 0; |
||
4044 | 181e: 10 92 b8 00 sts 0x00B8, r1 |
||
4045 | Decodierung_Lauft=0; |
||
4046 | 1822: 10 92 c9 01 sts 0x01C9, r1 |
||
4047 | /* if ((HIGH(IR_Code_tmp)==ALLOWED1)|| (HIGH(IR_Code_tmp)==ALLOWED2)|| |
||
4048 | (HIGH(IR_Code_tmp)==ALLOWED3)||(HIGH(IR_Code_tmp)==ALLOWED4)|| |
||
4049 | (HIGH(IR_Code_tmp)==ALLOWED5) ) |
||
4050 | if ((HIGH(IR_Code_tmp)< 10))*/ |
||
4051 | if ((HIGH(IR_Code_tmp)< 10 ) && (LOW(IR_Code_tmp)!=0x3F) ) |
||
4052 | 1826: 80 91 b7 00 lds r24, 0x00B7 |
||
4053 | 182a: 8a 30 cpi r24, 0x0A ; 10 |
||
4054 | 182c: d8 f4 brcc .+54 ; 0x1864 <__vector_11+0x138> |
||
4055 | 182e: 80 91 b6 00 lds r24, 0x00B6 |
||
4056 | 1832: 8f 33 cpi r24, 0x3F ; 63 |
||
4057 | 1834: b9 f0 breq .+46 ; 0x1864 <__vector_11+0x138> |
||
4058 | { // nur erlaubt Adressen werden akzepetiert |
||
4059 | IR_Code=IR_Code_tmp; // IR-Wort in die globale Variable schreiben |
||
4060 | 1836: 80 91 b6 00 lds r24, 0x00B6 |
||
4061 | 183a: 90 91 b7 00 lds r25, 0x00B7 |
||
4062 | 183e: 90 93 c8 01 sts 0x01C8, r25 |
||
4063 | 1842: 80 93 c7 01 sts 0x01C7, r24 |
||
4064 | New_IR_Code = 1; // Es ist ein neues Zeichen eingetragen worden |
||
4065 | 1846: 81 e0 ldi r24, 0x01 ; 1 |
||
4066 | 1848: 80 93 c6 01 sts 0x01C6, r24 |
||
4067 | IRSperrCounter = 4; // weitere Kommandos für 200 * 1,3ms unterdrücken |
||
4068 | 184c: 84 e0 ldi r24, 0x04 ; 4 |
||
4069 | 184e: 80 93 b9 00 sts 0x00B9, r24 |
||
4070 | INT0_ENABLE; // externen Interrupt wieder freigenben |
||
4071 | 1852: 8b b7 in r24, 0x3b ; 59 |
||
4072 | 1854: 80 64 ori r24, 0x40 ; 64 |
||
4073 | 1856: 8b bf out 0x3b, r24 ; 59 |
||
4074 | LoescheIrCodeTimer = 250; |
||
4075 | 1858: 8a ef ldi r24, 0xFA ; 250 |
||
4076 | 185a: 90 e0 ldi r25, 0x00 ; 0 |
||
4077 | 185c: 90 93 7d 00 sts 0x007D, r25 |
||
4078 | 1860: 80 93 7c 00 sts 0x007C, r24 |
||
4079 | } |
||
4080 | IRSperrCounter = 4; // weitere Kommandos für 200 * 1,3ms unterdrücken |
||
4081 | 1864: 84 e0 ldi r24, 0x04 ; 4 |
||
4082 | 1866: 80 93 b9 00 sts 0x00B9, r24 |
||
4083 | INT0_ENABLE; // externen Interrupt wieder freigenben |
||
4084 | 186a: 8b b7 in r24, 0x3b ; 59 |
||
4085 | 186c: 80 64 ori r24, 0x40 ; 64 |
||
4086 | 186e: 8b bf out 0x3b, r24 ; 59 |
||
4087 | 1870: 9f 91 pop r25 |
||
4088 | 1872: 8f 91 pop r24 |
||
4089 | 1874: 4f 91 pop r20 |
||
4090 | 1876: 3f 91 pop r19 |
||
4091 | 1878: 2f 91 pop r18 |
||
4092 | 187a: 0f 90 pop r0 |
||
4093 | 187c: 0f be out 0x3f, r0 ; 63 |
||
4094 | 187e: 0f 90 pop r0 |
||
4095 | 1880: 1f 90 pop r1 |
||
4096 | 1882: 18 95 reti |
||
4097 | |||
4098 | 00001884 <ADC_Init>: |
||
4099 | |||
4100 | // --------------------------------------------------------------------------------------- |
||
4101 | void ADC_Init(void) |
||
4102 | { |
||
4103 | ADMUX = 0; |
||
4104 | 1884: 17 b8 out 0x07, r1 ; 7 |
||
4105 | ADCSRA = 0x86; |
||
4106 | 1886: 86 e8 ldi r24, 0x86 ; 134 |
||
4107 | 1888: 86 b9 out 0x06, r24 ; 6 |
||
4108 | 188a: 08 95 ret |
||
4109 | |||
4110 | 0000188c <ReadADC>: |
||
4111 | } |
||
4112 | |||
4113 | // --------------------------------------------------------------------------------------- |
||
4114 | unsigned int ReadADC(unsigned char adc_input) |
||
4115 | { |
||
4116 | ADMUX = adc_input; |
||
4117 | 188c: 87 b9 out 0x07, r24 ; 7 |
||
4118 | ADCSRA |= 0x40; |
||
4119 | 188e: 36 9a sbi 0x06, 6 ; 6 |
||
4120 | //Delay_ms(10); |
||
4121 | while ((ADCSRA & 0x10) == 0); |
||
4122 | 1890: 34 9b sbis 0x06, 4 ; 6 |
||
4123 | 1892: fe cf rjmp .-4 ; 0x1890 <ReadADC+0x4> |
||
4124 | ADCSRA |= 0x10; |
||
4125 | 1894: 34 9a sbi 0x06, 4 ; 6 |
||
4126 | return ADCW; // read ad and calc. temp. |
||
4127 | 1896: 84 b1 in r24, 0x04 ; 4 |
||
4128 | 1898: 95 b1 in r25, 0x05 ; 5 |
||
4129 | 189a: 08 95 ret |
||
4130 | |||
4131 | 0000189c <GetAnalogWerte>: |
||
4132 | } |
||
4133 | |||
4134 | void GetAnalogWerte(void) |
||
4135 | { |
||
4136 | AnalogWerte[0] = ReadADC(0); |
||
4137 | 189c: 80 e0 ldi r24, 0x00 ; 0 |
||
4138 | 189e: 0e 94 46 0c call 0x188c <ReadADC> |
||
4139 | 18a2: 90 93 cb 01 sts 0x01CB, r25 |
||
4140 | 18a6: 80 93 ca 01 sts 0x01CA, r24 |
||
4141 | AnalogWerte[1] = ReadADC(1); |
||
4142 | 18aa: 81 e0 ldi r24, 0x01 ; 1 |
||
4143 | 18ac: 0e 94 46 0c call 0x188c <ReadADC> |
||
4144 | 18b0: 90 93 cd 01 sts 0x01CD, r25 |
||
4145 | 18b4: 80 93 cc 01 sts 0x01CC, r24 |
||
4146 | AnalogWerte[2] = ReadADC(2); |
||
4147 | 18b8: 82 e0 ldi r24, 0x02 ; 2 |
||
4148 | 18ba: 0e 94 46 0c call 0x188c <ReadADC> |
||
4149 | 18be: 90 93 cf 01 sts 0x01CF, r25 |
||
4150 | 18c2: 80 93 ce 01 sts 0x01CE, r24 |
||
4151 | 18c6: 08 95 ret |
||
4152 | |||
4153 | 000018c8 <memchr>: |
||
4154 | 18c8: fc 01 movw r30, r24 |
||
4155 | 18ca: 41 50 subi r20, 0x01 ; 1 |
||
4156 | 18cc: 50 40 sbci r21, 0x00 ; 0 |
||
4157 | 18ce: 30 f0 brcs .+12 ; 0x18dc <memchr+0x14> |
||
4158 | 18d0: 01 90 ld r0, Z+ |
||
4159 | 18d2: 06 16 cp r0, r22 |
||
4160 | 18d4: d1 f7 brne .-12 ; 0x18ca <memchr+0x2> |
||
4161 | 18d6: 31 97 sbiw r30, 0x01 ; 1 |
||
4162 | 18d8: cf 01 movw r24, r30 |
||
4163 | 18da: 08 95 ret |
||
4164 | 18dc: 88 27 eor r24, r24 |
||
4165 | 18de: 99 27 eor r25, r25 |
||
4166 | 18e0: 08 95 ret |
||
4167 | |||
4168 | 000018e2 <fdevopen>: |
||
4169 | 18e2: 0f 93 push r16 |
||
4170 | 18e4: 1f 93 push r17 |
||
4171 | 18e6: cf 93 push r28 |
||
4172 | 18e8: df 93 push r29 |
||
4173 | 18ea: 8c 01 movw r16, r24 |
||
4174 | 18ec: eb 01 movw r28, r22 |
||
4175 | 18ee: 00 97 sbiw r24, 0x00 ; 0 |
||
4176 | 18f0: 11 f4 brne .+4 ; 0x18f6 <fdevopen+0x14> |
||
4177 | 18f2: 67 2b or r22, r23 |
||
4178 | 18f4: c1 f1 breq .+112 ; 0x1966 <fdevopen+0x84> |
||
4179 | 18f6: 6e e0 ldi r22, 0x0E ; 14 |
||
4180 | 18f8: 70 e0 ldi r23, 0x00 ; 0 |
||
4181 | 18fa: 81 e0 ldi r24, 0x01 ; 1 |
||
4182 | 18fc: 90 e0 ldi r25, 0x00 ; 0 |
||
4183 | 18fe: 0e 94 b8 0c call 0x1970 <calloc> |
||
4184 | 1902: fc 01 movw r30, r24 |
||
4185 | 1904: 89 2b or r24, r25 |
||
4186 | 1906: 71 f1 breq .+92 ; 0x1964 <fdevopen+0x82> |
||
4187 | 1908: 80 e8 ldi r24, 0x80 ; 128 |
||
4188 | 190a: 83 83 std Z+3, r24 ; 0x03 |
||
4189 | 190c: 20 97 sbiw r28, 0x00 ; 0 |
||
4190 | 190e: 71 f0 breq .+28 ; 0x192c <fdevopen+0x4a> |
||
4191 | 1910: d3 87 std Z+11, r29 ; 0x0b |
||
4192 | 1912: c2 87 std Z+10, r28 ; 0x0a |
||
4193 | 1914: 81 e8 ldi r24, 0x81 ; 129 |
||
4194 | 1916: 83 83 std Z+3, r24 ; 0x03 |
||
4195 | 1918: 80 91 d0 01 lds r24, 0x01D0 |
||
4196 | 191c: 90 91 d1 01 lds r25, 0x01D1 |
||
4197 | 1920: 89 2b or r24, r25 |
||
4198 | 1922: 21 f4 brne .+8 ; 0x192c <fdevopen+0x4a> |
||
4199 | 1924: f0 93 d1 01 sts 0x01D1, r31 |
||
4200 | 1928: e0 93 d0 01 sts 0x01D0, r30 |
||
4201 | 192c: 01 15 cp r16, r1 |
||
4202 | 192e: 11 05 cpc r17, r1 |
||
4203 | 1930: c9 f0 breq .+50 ; 0x1964 <fdevopen+0x82> |
||
4204 | 1932: 11 87 std Z+9, r17 ; 0x09 |
||
4205 | 1934: 00 87 std Z+8, r16 ; 0x08 |
||
4206 | 1936: 83 81 ldd r24, Z+3 ; 0x03 |
||
4207 | 1938: 82 60 ori r24, 0x02 ; 2 |
||
4208 | 193a: 83 83 std Z+3, r24 ; 0x03 |
||
4209 | 193c: 80 91 d2 01 lds r24, 0x01D2 |
||
4210 | 1940: 90 91 d3 01 lds r25, 0x01D3 |
||
4211 | 1944: 89 2b or r24, r25 |
||
4212 | 1946: 71 f4 brne .+28 ; 0x1964 <fdevopen+0x82> |
||
4213 | 1948: f0 93 d3 01 sts 0x01D3, r31 |
||
4214 | 194c: e0 93 d2 01 sts 0x01D2, r30 |
||
4215 | 1950: 80 91 d4 01 lds r24, 0x01D4 |
||
4216 | 1954: 90 91 d5 01 lds r25, 0x01D5 |
||
4217 | 1958: 89 2b or r24, r25 |
||
4218 | 195a: 21 f4 brne .+8 ; 0x1964 <fdevopen+0x82> |
||
4219 | 195c: f0 93 d5 01 sts 0x01D5, r31 |
||
4220 | 1960: e0 93 d4 01 sts 0x01D4, r30 |
||
4221 | 1964: cf 01 movw r24, r30 |
||
4222 | 1966: df 91 pop r29 |
||
4223 | 1968: cf 91 pop r28 |
||
4224 | 196a: 1f 91 pop r17 |
||
4225 | 196c: 0f 91 pop r16 |
||
4226 | 196e: 08 95 ret |
||
4227 | |||
4228 | 00001970 <calloc>: |
||
4229 | 1970: 0f 93 push r16 |
||
4230 | 1972: 1f 93 push r17 |
||
4231 | 1974: cf 93 push r28 |
||
4232 | 1976: df 93 push r29 |
||
4233 | 1978: 86 9f mul r24, r22 |
||
4234 | 197a: 80 01 movw r16, r0 |
||
4235 | 197c: 87 9f mul r24, r23 |
||
4236 | 197e: 10 0d add r17, r0 |
||
4237 | 1980: 96 9f mul r25, r22 |
||
4238 | 1982: 10 0d add r17, r0 |
||
4239 | 1984: 11 24 eor r1, r1 |
||
4240 | 1986: c8 01 movw r24, r16 |
||
4241 | 1988: 0e 94 d4 0c call 0x19a8 <malloc> |
||
4242 | 198c: ec 01 movw r28, r24 |
||
4243 | 198e: 00 97 sbiw r24, 0x00 ; 0 |
||
4244 | 1990: 29 f0 breq .+10 ; 0x199c <calloc+0x2c> |
||
4245 | 1992: a8 01 movw r20, r16 |
||
4246 | 1994: 60 e0 ldi r22, 0x00 ; 0 |
||
4247 | 1996: 70 e0 ldi r23, 0x00 ; 0 |
||
4248 | 1998: 0e 94 ca 0d call 0x1b94 <memset> |
||
4249 | 199c: ce 01 movw r24, r28 |
||
4250 | 199e: df 91 pop r29 |
||
4251 | 19a0: cf 91 pop r28 |
||
4252 | 19a2: 1f 91 pop r17 |
||
4253 | 19a4: 0f 91 pop r16 |
||
4254 | 19a6: 08 95 ret |
||
4255 | |||
4256 | 000019a8 <malloc>: |
||
4257 | 19a8: cf 93 push r28 |
||
4258 | 19aa: df 93 push r29 |
||
4259 | 19ac: ac 01 movw r20, r24 |
||
4260 | 19ae: 02 97 sbiw r24, 0x02 ; 2 |
||
4261 | 19b0: 10 f4 brcc .+4 ; 0x19b6 <malloc+0xe> |
||
4262 | 19b2: 42 e0 ldi r20, 0x02 ; 2 |
||
4263 | 19b4: 50 e0 ldi r21, 0x00 ; 0 |
||
4264 | 19b6: 20 e0 ldi r18, 0x00 ; 0 |
||
4265 | 19b8: 30 e0 ldi r19, 0x00 ; 0 |
||
4266 | 19ba: a0 91 d8 01 lds r26, 0x01D8 |
||
4267 | 19be: b0 91 d9 01 lds r27, 0x01D9 |
||
4268 | 19c2: bd 01 movw r22, r26 |
||
4269 | 19c4: f9 01 movw r30, r18 |
||
4270 | 19c6: 10 97 sbiw r26, 0x00 ; 0 |
||
4271 | 19c8: 09 f4 brne .+2 ; 0x19cc <malloc+0x24> |
||
4272 | 19ca: 4c c0 rjmp .+152 ; 0x1a64 <malloc+0xbc> |
||
4273 | 19cc: 8d 91 ld r24, X+ |
||
4274 | 19ce: 9c 91 ld r25, X |
||
4275 | 19d0: 11 97 sbiw r26, 0x01 ; 1 |
||
4276 | 19d2: 84 17 cp r24, r20 |
||
4277 | 19d4: 95 07 cpc r25, r21 |
||
4278 | 19d6: 31 f1 breq .+76 ; 0x1a24 <malloc+0x7c> |
||
4279 | 19d8: 48 17 cp r20, r24 |
||
4280 | 19da: 59 07 cpc r21, r25 |
||
4281 | 19dc: 38 f4 brcc .+14 ; 0x19ec <malloc+0x44> |
||
4282 | 19de: 21 15 cp r18, r1 |
||
4283 | 19e0: 31 05 cpc r19, r1 |
||
4284 | 19e2: 19 f0 breq .+6 ; 0x19ea <malloc+0x42> |
||
4285 | 19e4: 82 17 cp r24, r18 |
||
4286 | 19e6: 93 07 cpc r25, r19 |
||
4287 | 19e8: 08 f4 brcc .+2 ; 0x19ec <malloc+0x44> |
||
4288 | 19ea: 9c 01 movw r18, r24 |
||
4289 | 19ec: fd 01 movw r30, r26 |
||
4290 | 19ee: a2 81 ldd r26, Z+2 ; 0x02 |
||
4291 | 19f0: b3 81 ldd r27, Z+3 ; 0x03 |
||
4292 | 19f2: 10 97 sbiw r26, 0x00 ; 0 |
||
4293 | 19f4: 59 f7 brne .-42 ; 0x19cc <malloc+0x24> |
||
4294 | 19f6: 21 15 cp r18, r1 |
||
4295 | 19f8: 31 05 cpc r19, r1 |
||
4296 | 19fa: a1 f1 breq .+104 ; 0x1a64 <malloc+0xbc> |
||
4297 | 19fc: c9 01 movw r24, r18 |
||
4298 | 19fe: 84 1b sub r24, r20 |
||
4299 | 1a00: 95 0b sbc r25, r21 |
||
4300 | 1a02: 04 97 sbiw r24, 0x04 ; 4 |
||
4301 | 1a04: 08 f4 brcc .+2 ; 0x1a08 <malloc+0x60> |
||
4302 | 1a06: a9 01 movw r20, r18 |
||
4303 | 1a08: db 01 movw r26, r22 |
||
4304 | 1a0a: e0 e0 ldi r30, 0x00 ; 0 |
||
4305 | 1a0c: f0 e0 ldi r31, 0x00 ; 0 |
||
4306 | 1a0e: 10 97 sbiw r26, 0x00 ; 0 |
||
4307 | 1a10: 49 f1 breq .+82 ; 0x1a64 <malloc+0xbc> |
||
4308 | 1a12: 8d 91 ld r24, X+ |
||
4309 | 1a14: 9c 91 ld r25, X |
||
4310 | 1a16: 11 97 sbiw r26, 0x01 ; 1 |
||
4311 | 1a18: 82 17 cp r24, r18 |
||
4312 | 1a1a: 93 07 cpc r25, r19 |
||
4313 | 1a1c: f9 f4 brne .+62 ; 0x1a5c <malloc+0xb4> |
||
4314 | 1a1e: 42 17 cp r20, r18 |
||
4315 | 1a20: 53 07 cpc r21, r19 |
||
4316 | 1a22: 79 f4 brne .+30 ; 0x1a42 <malloc+0x9a> |
||
4317 | 1a24: ed 01 movw r28, r26 |
||
4318 | 1a26: 8a 81 ldd r24, Y+2 ; 0x02 |
||
4319 | 1a28: 9b 81 ldd r25, Y+3 ; 0x03 |
||
4320 | 1a2a: 30 97 sbiw r30, 0x00 ; 0 |
||
4321 | 1a2c: 19 f0 breq .+6 ; 0x1a34 <malloc+0x8c> |
||
4322 | 1a2e: 93 83 std Z+3, r25 ; 0x03 |
||
4323 | 1a30: 82 83 std Z+2, r24 ; 0x02 |
||
4324 | 1a32: 04 c0 rjmp .+8 ; 0x1a3c <malloc+0x94> |
||
4325 | 1a34: 90 93 d9 01 sts 0x01D9, r25 |
||
4326 | 1a38: 80 93 d8 01 sts 0x01D8, r24 |
||
4327 | 1a3c: cd 01 movw r24, r26 |
||
4328 | 1a3e: 02 96 adiw r24, 0x02 ; 2 |
||
4329 | 1a40: 4a c0 rjmp .+148 ; 0x1ad6 <malloc+0x12e> |
||
4330 | 1a42: 24 1b sub r18, r20 |
||
4331 | 1a44: 35 0b sbc r19, r21 |
||
4332 | 1a46: fd 01 movw r30, r26 |
||
4333 | 1a48: e2 0f add r30, r18 |
||
4334 | 1a4a: f3 1f adc r31, r19 |
||
4335 | 1a4c: 41 93 st Z+, r20 |
||
4336 | 1a4e: 51 93 st Z+, r21 |
||
4337 | 1a50: 22 50 subi r18, 0x02 ; 2 |
||
4338 | 1a52: 30 40 sbci r19, 0x00 ; 0 |
||
4339 | 1a54: 2d 93 st X+, r18 |
||
4340 | 1a56: 3c 93 st X, r19 |
||
4341 | 1a58: cf 01 movw r24, r30 |
||
4342 | 1a5a: 3d c0 rjmp .+122 ; 0x1ad6 <malloc+0x12e> |
||
4343 | 1a5c: fd 01 movw r30, r26 |
||
4344 | 1a5e: a2 81 ldd r26, Z+2 ; 0x02 |
||
4345 | 1a60: b3 81 ldd r27, Z+3 ; 0x03 |
||
4346 | 1a62: d5 cf rjmp .-86 ; 0x1a0e <malloc+0x66> |
||
4347 | 1a64: 80 91 d6 01 lds r24, 0x01D6 |
||
4348 | 1a68: 90 91 d7 01 lds r25, 0x01D7 |
||
4349 | 1a6c: 89 2b or r24, r25 |
||
4350 | 1a6e: 41 f4 brne .+16 ; 0x1a80 <malloc+0xd8> |
||
4351 | 1a70: 80 91 80 00 lds r24, 0x0080 |
||
4352 | 1a74: 90 91 81 00 lds r25, 0x0081 |
||
4353 | 1a78: 90 93 d7 01 sts 0x01D7, r25 |
||
4354 | 1a7c: 80 93 d6 01 sts 0x01D6, r24 |
||
4355 | 1a80: e0 91 7e 00 lds r30, 0x007E |
||
4356 | 1a84: f0 91 7f 00 lds r31, 0x007F |
||
4357 | 1a88: 30 97 sbiw r30, 0x00 ; 0 |
||
4358 | 1a8a: 41 f4 brne .+16 ; 0x1a9c <malloc+0xf4> |
||
4359 | 1a8c: ed b7 in r30, 0x3d ; 61 |
||
4360 | 1a8e: fe b7 in r31, 0x3e ; 62 |
||
4361 | 1a90: 80 91 82 00 lds r24, 0x0082 |
||
4362 | 1a94: 90 91 83 00 lds r25, 0x0083 |
||
4363 | 1a98: e8 1b sub r30, r24 |
||
4364 | 1a9a: f9 0b sbc r31, r25 |
||
4365 | 1a9c: a0 91 d6 01 lds r26, 0x01D6 |
||
4366 | 1aa0: b0 91 d7 01 lds r27, 0x01D7 |
||
4367 | 1aa4: 9f 01 movw r18, r30 |
||
4368 | 1aa6: 2a 1b sub r18, r26 |
||
4369 | 1aa8: 3b 0b sbc r19, r27 |
||
4370 | 1aaa: 24 17 cp r18, r20 |
||
4371 | 1aac: 35 07 cpc r19, r21 |
||
4372 | 1aae: 88 f0 brcs .+34 ; 0x1ad2 <malloc+0x12a> |
||
4373 | 1ab0: ca 01 movw r24, r20 |
||
4374 | 1ab2: 02 96 adiw r24, 0x02 ; 2 |
||
4375 | 1ab4: 28 17 cp r18, r24 |
||
4376 | 1ab6: 39 07 cpc r19, r25 |
||
4377 | 1ab8: 60 f0 brcs .+24 ; 0x1ad2 <malloc+0x12a> |
||
4378 | 1aba: cd 01 movw r24, r26 |
||
4379 | 1abc: 84 0f add r24, r20 |
||
4380 | 1abe: 95 1f adc r25, r21 |
||
4381 | 1ac0: 02 96 adiw r24, 0x02 ; 2 |
||
4382 | 1ac2: 90 93 d7 01 sts 0x01D7, r25 |
||
4383 | 1ac6: 80 93 d6 01 sts 0x01D6, r24 |
||
4384 | 1aca: 4d 93 st X+, r20 |
||
4385 | 1acc: 5d 93 st X+, r21 |
||
4386 | 1ace: cd 01 movw r24, r26 |
||
4387 | 1ad0: 02 c0 rjmp .+4 ; 0x1ad6 <malloc+0x12e> |
||
4388 | 1ad2: 80 e0 ldi r24, 0x00 ; 0 |
||
4389 | 1ad4: 90 e0 ldi r25, 0x00 ; 0 |
||
4390 | 1ad6: df 91 pop r29 |
||
4391 | 1ad8: cf 91 pop r28 |
||
4392 | 1ada: 08 95 ret |
||
4393 | |||
4394 | 00001adc <free>: |
||
4395 | 1adc: cf 93 push r28 |
||
4396 | 1ade: df 93 push r29 |
||
4397 | 1ae0: 00 97 sbiw r24, 0x00 ; 0 |
||
4398 | 1ae2: 09 f4 brne .+2 ; 0x1ae6 <free+0xa> |
||
4399 | 1ae4: 54 c0 rjmp .+168 ; 0x1b8e <free+0xb2> |
||
4400 | 1ae6: dc 01 movw r26, r24 |
||
4401 | 1ae8: 12 97 sbiw r26, 0x02 ; 2 |
||
4402 | 1aea: ed 01 movw r28, r26 |
||
4403 | 1aec: 1b 82 std Y+3, r1 ; 0x03 |
||
4404 | 1aee: 1a 82 std Y+2, r1 ; 0x02 |
||
4405 | 1af0: 80 91 d8 01 lds r24, 0x01D8 |
||
4406 | 1af4: 90 91 d9 01 lds r25, 0x01D9 |
||
4407 | 1af8: 00 97 sbiw r24, 0x00 ; 0 |
||
4408 | 1afa: 21 f1 breq .+72 ; 0x1b44 <free+0x68> |
||
4409 | 1afc: fc 01 movw r30, r24 |
||
4410 | 1afe: 40 e0 ldi r20, 0x00 ; 0 |
||
4411 | 1b00: 50 e0 ldi r21, 0x00 ; 0 |
||
4412 | 1b02: ea 17 cp r30, r26 |
||
4413 | 1b04: fb 07 cpc r31, r27 |
||
4414 | 1b06: 18 f1 brcs .+70 ; 0x1b4e <free+0x72> |
||
4415 | 1b08: ed 01 movw r28, r26 |
||
4416 | 1b0a: fb 83 std Y+3, r31 ; 0x03 |
||
4417 | 1b0c: ea 83 std Y+2, r30 ; 0x02 |
||
4418 | 1b0e: 2d 91 ld r18, X+ |
||
4419 | 1b10: 3c 91 ld r19, X |
||
4420 | 1b12: 11 97 sbiw r26, 0x01 ; 1 |
||
4421 | 1b14: c2 0f add r28, r18 |
||
4422 | 1b16: d3 1f adc r29, r19 |
||
4423 | 1b18: ce 01 movw r24, r28 |
||
4424 | 1b1a: 02 96 adiw r24, 0x02 ; 2 |
||
4425 | 1b1c: 8e 17 cp r24, r30 |
||
4426 | 1b1e: 9f 07 cpc r25, r31 |
||
4427 | 1b20: 71 f4 brne .+28 ; 0x1b3e <free+0x62> |
||
4428 | 1b22: 8a 81 ldd r24, Y+2 ; 0x02 |
||
4429 | 1b24: 9b 81 ldd r25, Y+3 ; 0x03 |
||
4430 | 1b26: 28 0f add r18, r24 |
||
4431 | 1b28: 39 1f adc r19, r25 |
||
4432 | 1b2a: 2e 5f subi r18, 0xFE ; 254 |
||
4433 | 1b2c: 3f 4f sbci r19, 0xFF ; 255 |
||
4434 | 1b2e: 11 96 adiw r26, 0x01 ; 1 |
||
4435 | 1b30: 3c 93 st X, r19 |
||
4436 | 1b32: 2e 93 st -X, r18 |
||
4437 | 1b34: 82 81 ldd r24, Z+2 ; 0x02 |
||
4438 | 1b36: 93 81 ldd r25, Z+3 ; 0x03 |
||
4439 | 1b38: fd 01 movw r30, r26 |
||
4440 | 1b3a: 93 83 std Z+3, r25 ; 0x03 |
||
4441 | 1b3c: 82 83 std Z+2, r24 ; 0x02 |
||
4442 | 1b3e: 41 15 cp r20, r1 |
||
4443 | 1b40: 51 05 cpc r21, r1 |
||
4444 | 1b42: 59 f4 brne .+22 ; 0x1b5a <free+0x7e> |
||
4445 | 1b44: b0 93 d9 01 sts 0x01D9, r27 |
||
4446 | 1b48: a0 93 d8 01 sts 0x01D8, r26 |
||
4447 | 1b4c: 20 c0 rjmp .+64 ; 0x1b8e <free+0xb2> |
||
4448 | 1b4e: af 01 movw r20, r30 |
||
4449 | 1b50: 02 80 ldd r0, Z+2 ; 0x02 |
||
4450 | 1b52: f3 81 ldd r31, Z+3 ; 0x03 |
||
4451 | 1b54: e0 2d mov r30, r0 |
||
4452 | 1b56: 30 97 sbiw r30, 0x00 ; 0 |
||
4453 | 1b58: a1 f6 brne .-88 ; 0x1b02 <free+0x26> |
||
4454 | 1b5a: ea 01 movw r28, r20 |
||
4455 | 1b5c: bb 83 std Y+3, r27 ; 0x03 |
||
4456 | 1b5e: aa 83 std Y+2, r26 ; 0x02 |
||
4457 | 1b60: ca 01 movw r24, r20 |
||
4458 | 1b62: 02 96 adiw r24, 0x02 ; 2 |
||
4459 | 1b64: 28 81 ld r18, Y |
||
4460 | 1b66: 39 81 ldd r19, Y+1 ; 0x01 |
||
4461 | 1b68: 82 0f add r24, r18 |
||
4462 | 1b6a: 93 1f adc r25, r19 |
||
4463 | 1b6c: 8a 17 cp r24, r26 |
||
4464 | 1b6e: 9b 07 cpc r25, r27 |
||
4465 | 1b70: 71 f4 brne .+28 ; 0x1b8e <free+0xb2> |
||
4466 | 1b72: 8d 91 ld r24, X+ |
||
4467 | 1b74: 9c 91 ld r25, X |
||
4468 | 1b76: 11 97 sbiw r26, 0x01 ; 1 |
||
4469 | 1b78: 28 0f add r18, r24 |
||
4470 | 1b7a: 39 1f adc r19, r25 |
||
4471 | 1b7c: 2e 5f subi r18, 0xFE ; 254 |
||
4472 | 1b7e: 3f 4f sbci r19, 0xFF ; 255 |
||
4473 | 1b80: 39 83 std Y+1, r19 ; 0x01 |
||
4474 | 1b82: 28 83 st Y, r18 |
||
4475 | 1b84: fd 01 movw r30, r26 |
||
4476 | 1b86: 82 81 ldd r24, Z+2 ; 0x02 |
||
4477 | 1b88: 93 81 ldd r25, Z+3 ; 0x03 |
||
4478 | 1b8a: 9b 83 std Y+3, r25 ; 0x03 |
||
4479 | 1b8c: 8a 83 std Y+2, r24 ; 0x02 |
||
4480 | 1b8e: df 91 pop r29 |
||
4481 | 1b90: cf 91 pop r28 |
||
4482 | 1b92: 08 95 ret |
||
4483 | |||
4484 | 00001b94 <memset>: |
||
4485 | 1b94: dc 01 movw r26, r24 |
||
4486 | 1b96: 40 ff sbrs r20, 0 |
||
4487 | 1b98: 03 c0 rjmp .+6 ; 0x1ba0 <memset+0xc> |
||
4488 | 1b9a: 01 c0 rjmp .+2 ; 0x1b9e <memset+0xa> |
||
4489 | 1b9c: 6d 93 st X+, r22 |
||
4490 | 1b9e: 6d 93 st X+, r22 |
||
4491 | 1ba0: 42 50 subi r20, 0x02 ; 2 |
||
4492 | 1ba2: 50 40 sbci r21, 0x00 ; 0 |
||
4493 | 1ba4: d8 f7 brcc .-10 ; 0x1b9c <memset+0x8> |
||
4494 | 1ba6: 08 95 ret |
||
4495 | |||
4496 | 00001ba8 <__udivmodsi4>: |
||
4497 | 1ba8: a1 e2 ldi r26, 0x21 ; 33 |
||
4498 | 1baa: 1a 2e mov r1, r26 |
||
4499 | 1bac: aa 1b sub r26, r26 |
||
4500 | 1bae: bb 1b sub r27, r27 |
||
4501 | 1bb0: fd 01 movw r30, r26 |
||
4502 | 1bb2: 0d c0 rjmp .+26 ; 0x1bce <__udivmodsi4_ep> |
||
4503 | |||
4504 | 00001bb4 <__udivmodsi4_loop>: |
||
4505 | 1bb4: aa 1f adc r26, r26 |
||
4506 | 1bb6: bb 1f adc r27, r27 |
||
4507 | 1bb8: ee 1f adc r30, r30 |
||
4508 | 1bba: ff 1f adc r31, r31 |
||
4509 | 1bbc: a2 17 cp r26, r18 |
||
4510 | 1bbe: b3 07 cpc r27, r19 |
||
4511 | 1bc0: e4 07 cpc r30, r20 |
||
4512 | 1bc2: f5 07 cpc r31, r21 |
||
4513 | 1bc4: 20 f0 brcs .+8 ; 0x1bce <__udivmodsi4_ep> |
||
4514 | 1bc6: a2 1b sub r26, r18 |
||
4515 | 1bc8: b3 0b sbc r27, r19 |
||
4516 | 1bca: e4 0b sbc r30, r20 |
||
4517 | 1bcc: f5 0b sbc r31, r21 |
||
4518 | |||
4519 | 00001bce <__udivmodsi4_ep>: |
||
4520 | 1bce: 66 1f adc r22, r22 |
||
4521 | 1bd0: 77 1f adc r23, r23 |
||
4522 | 1bd2: 88 1f adc r24, r24 |
||
4523 | 1bd4: 99 1f adc r25, r25 |
||
4524 | 1bd6: 1a 94 dec r1 |
||
4525 | 1bd8: 69 f7 brne .-38 ; 0x1bb4 <__udivmodsi4_loop> |
||
4526 | 1bda: 60 95 com r22 |
||
4527 | 1bdc: 70 95 com r23 |
||
4528 | 1bde: 80 95 com r24 |
||
4529 | 1be0: 90 95 com r25 |
||
4530 | 1be2: 9b 01 movw r18, r22 |
||
4531 | 1be4: ac 01 movw r20, r24 |
||
4532 | 1be6: bd 01 movw r22, r26 |
||
4533 | 1be8: cf 01 movw r24, r30 |
||
4534 | 1bea: 08 95 ret |