|
|
-
- gassensor_reva.ino.elf: file format elf32-avr
-
-
- Disassembly of section .text:
-
- 00000000 <__vectors>:
- 0: 0c 94 5e 00 jmp 0xbc ; 0xbc <__ctors_end>
- 4: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 8: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 10: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 14: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 18: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 1c: 0c 94 ef 04 jmp 0x9de ; 0x9de <__vector_7>
- 20: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 24: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 28: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 2c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 30: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 34: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 38: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 3c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 40: 0c 94 a5 04 jmp 0x94a ; 0x94a <__vector_16>
- 44: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 48: 0c 94 97 05 jmp 0xb2e ; 0xb2e <__vector_18>
- 4c: 0c 94 71 05 jmp 0xae2 ; 0xae2 <__vector_19>
- 50: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 54: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 58: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 5c: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 60: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
- 64: 0c 94 86 00 jmp 0x10c ; 0x10c <__bad_interrupt>
-
- 00000068 <__trampolines_end>:
- 68: 00 00 nop
- 6a: 00 08 sbc r0, r0
- 6c: 00 02 muls r16, r16
- 6e: 01 00 .word 0x0001 ; ????
- 70: 00 03 mulsu r16, r16
- 72: 04 07 cpc r16, r20
- ...
-
- 0000007c <_ZL21tone_pin_to_timer_PGM>:
- 7c: 02 .
-
- 0000007d <port_to_output_PGM>:
- 7d: 00 00 00 00 25 00 28 00 2b 00 ....%.(.+.
-
- 00000087 <port_to_mode_PGM>:
- 87: 00 00 00 00 24 00 27 00 2a 00 ....$.'.*.
-
- 00000091 <digital_pin_to_port_PGM>:
- 91: 04 04 04 04 04 04 04 04 02 02 02 02 02 02 03 03 ................
- a1: 03 03 03 03 ....
-
- 000000a5 <digital_pin_to_bit_mask_PGM>:
- a5: 01 02 04 08 10 20 40 80 01 02 04 08 10 20 01 02 ..... @...... ..
- b5: 04 08 10 20 00 ... .
-
- 000000ba <__ctors_start>:
- ba: 50 08 sbc r5, r0
-
- 000000bc <__ctors_end>:
- bc: 11 24 eor r1, r1
- be: 1f be out 0x3f, r1 ; 63
- c0: cf ef ldi r28, 0xFF ; 255
- c2: d8 e0 ldi r29, 0x08 ; 8
- c4: de bf out 0x3e, r29 ; 62
- c6: cd bf out 0x3d, r28 ; 61
-
- 000000c8 <__do_copy_data>:
- c8: 11 e0 ldi r17, 0x01 ; 1
- ca: a0 e0 ldi r26, 0x00 ; 0
- cc: b1 e0 ldi r27, 0x01 ; 1
- ce: e4 eb ldi r30, 0xB4 ; 180
- d0: f1 e1 ldi r31, 0x11 ; 17
- d2: 02 c0 rjmp .+4 ; 0xd8 <__do_copy_data+0x10>
- d4: 05 90 lpm r0, Z+
- d6: 0d 92 st X+, r0
- d8: a2 33 cpi r26, 0x32 ; 50
- da: b1 07 cpc r27, r17
- dc: d9 f7 brne .-10 ; 0xd4 <__do_copy_data+0xc>
-
- 000000de <__do_clear_bss>:
- de: 21 e0 ldi r18, 0x01 ; 1
- e0: a2 e3 ldi r26, 0x32 ; 50
- e2: b1 e0 ldi r27, 0x01 ; 1
- e4: 01 c0 rjmp .+2 ; 0xe8 <.do_clear_bss_start>
-
- 000000e6 <.do_clear_bss_loop>:
- e6: 1d 92 st X+, r1
-
- 000000e8 <.do_clear_bss_start>:
- e8: ab 3e cpi r26, 0xEB ; 235
- ea: b2 07 cpc r27, r18
- ec: e1 f7 brne .-8 ; 0xe6 <.do_clear_bss_loop>
-
- 000000ee <__do_global_ctors>:
- ee: 10 e0 ldi r17, 0x00 ; 0
- f0: ce e5 ldi r28, 0x5E ; 94
- f2: d0 e0 ldi r29, 0x00 ; 0
- f4: 04 c0 rjmp .+8 ; 0xfe <__do_global_ctors+0x10>
- f6: 21 97 sbiw r28, 0x01 ; 1
- f8: fe 01 movw r30, r28
- fa: 0e 94 cd 08 call 0x119a ; 0x119a <__tablejump2__>
- fe: cd 35 cpi r28, 0x5D ; 93
- 100: d1 07 cpc r29, r17
- 102: c9 f7 brne .-14 ; 0xf6 <__do_global_ctors+0x8>
- 104: 0e 94 c9 05 call 0xb92 ; 0xb92 <main>
- 108: 0c 94 d8 08 jmp 0x11b0 ; 0x11b0 <_exit>
-
- 0000010c <__bad_interrupt>:
- 10c: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
-
- 00000110 <pinMode.constprop.17>:
- #include "wiring_private.h"
- #include "pins_arduino.h"
-
- void pinMode(uint8_t pin, uint8_t mode)
- {
- uint8_t bit = digitalPinToBitMask(pin);
- 110: 90 e0 ldi r25, 0x00 ; 0
- 112: fc 01 movw r30, r24
- 114: eb 55 subi r30, 0x5B ; 91
- 116: ff 4f sbci r31, 0xFF ; 255
- 118: 24 91 lpm r18, Z
- uint8_t port = digitalPinToPort(pin);
- 11a: fc 01 movw r30, r24
- 11c: ef 56 subi r30, 0x6F ; 111
- 11e: ff 4f sbci r31, 0xFF ; 255
- 120: 84 91 lpm r24, Z
- volatile uint8_t *reg, *out;
-
- if (port == NOT_A_PIN) return;
- 122: 88 23 and r24, r24
- 124: 99 f0 breq .+38 ; 0x14c <pinMode.constprop.17+0x3c>
-
- // JWS: can I let the optimizer do this?
- reg = portModeRegister(port);
- 126: 90 e0 ldi r25, 0x00 ; 0
- 128: 88 0f add r24, r24
- 12a: 99 1f adc r25, r25
- 12c: fc 01 movw r30, r24
- 12e: e9 57 subi r30, 0x79 ; 121
- 130: ff 4f sbci r31, 0xFF ; 255
- 132: a5 91 lpm r26, Z+
- 134: b4 91 lpm r27, Z
- out = portOutputRegister(port);
- 136: fc 01 movw r30, r24
- 138: e3 58 subi r30, 0x83 ; 131
- 13a: ff 4f sbci r31, 0xFF ; 255
- 13c: 85 91 lpm r24, Z+
- 13e: 94 91 lpm r25, Z
- cli();
- *reg &= ~bit;
- *out |= bit;
- SREG = oldSREG;
- } else {
- uint8_t oldSREG = SREG;
- 140: 8f b7 in r24, 0x3f ; 63
- cli();
- 142: f8 94 cli
- *reg |= bit;
- 144: ec 91 ld r30, X
- 146: e2 2b or r30, r18
- 148: ec 93 st X, r30
- SREG = oldSREG;
- 14a: 8f bf out 0x3f, r24 ; 63
- 14c: 08 95 ret
-
- 0000014e <_Z4tonehjm.constprop.15>:
-
-
-
- // frequency (in hertz) and duration (in milliseconds).
-
- void tone(uint8_t _pin, unsigned int frequency, unsigned long duration)
- 14e: 4f 92 push r4
- 150: 5f 92 push r5
- 152: 6f 92 push r6
- 154: 7f 92 push r7
- 156: 8f 92 push r8
- 158: 9f 92 push r9
- 15a: af 92 push r10
- 15c: bf 92 push r11
- 15e: cf 92 push r12
- 160: df 92 push r13
- 162: ef 92 push r14
- 164: ff 92 push r15
- 166: 1f 93 push r17
- 168: cf 93 push r28
- 16a: df 93 push r29
- 16c: ec 01 movw r28, r24
- {
- int8_t _timer = -1;
-
- // if we're already using the pin, the timer should be configured.
- for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
- if (tone_pins[i] == _pin) {
- 16e: 80 91 00 01 lds r24, 0x0100 ; 0x800100 <__data_start>
- 172: 85 30 cpi r24, 0x05 ; 5
- 174: 21 f0 breq .+8 ; 0x17e <_Z4tonehjm.constprop.15+0x30>
- }
- }
-
- // search for an unused timer.
- for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
- if (tone_pins[i] == 255) {
- 176: 8f 3f cpi r24, 0xFF ; 255
- 178: 09 f0 breq .+2 ; 0x17c <_Z4tonehjm.constprop.15+0x2e>
- 17a: 07 c2 rjmp .+1038 ; 0x58a <__LOCK_REGION_LENGTH__+0x18a>
- 17c: 04 c0 rjmp .+8 ; 0x186 <_Z4tonehjm.constprop.15+0x38>
- int8_t _timer = -1;
-
- // if we're already using the pin, the timer should be configured.
- for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
- if (tone_pins[i] == _pin) {
- return pgm_read_byte(tone_pin_to_timer_PGM + i);
- 17e: ec e7 ldi r30, 0x7C ; 124
- 180: f0 e0 ldi r31, 0x00 ; 0
- 182: 14 91 lpm r17, Z
- 184: 6e c0 rjmp .+220 ; 0x262 <_Z4tonehjm.constprop.15+0x114>
- }
-
- // search for an unused timer.
- for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
- if (tone_pins[i] == 255) {
- tone_pins[i] = _pin;
- 186: 85 e0 ldi r24, 0x05 ; 5
- 188: 80 93 00 01 sts 0x0100, r24 ; 0x800100 <__data_start>
- _timer = pgm_read_byte(tone_pin_to_timer_PGM + i);
- 18c: ec e7 ldi r30, 0x7C ; 124
- 18e: f0 e0 ldi r31, 0x00 ; 0
- 190: 14 91 lpm r17, Z
- break;
- }
- }
-
- if (_timer != -1)
- 192: 1f 3f cpi r17, 0xFF ; 255
- 194: 09 f4 brne .+2 ; 0x198 <_Z4tonehjm.constprop.15+0x4a>
- 196: f9 c1 rjmp .+1010 ; 0x58a <__LOCK_REGION_LENGTH__+0x18a>
- {
- // Set timer specific stuff
- // All timers in CTC mode
- // 8 bit timers will require changing prescalar values,
- // whereas 16 bit timers are set to either ck/1 or ck/64 prescalar
- switch (_timer)
- 198: 11 30 cpi r17, 0x01 ; 1
- 19a: 09 f4 brne .+2 ; 0x19e <_Z4tonehjm.constprop.15+0x50>
- 19c: 40 c0 rjmp .+128 ; 0x21e <_Z4tonehjm.constprop.15+0xd0>
- 19e: 30 f1 brcs .+76 ; 0x1ec <_Z4tonehjm.constprop.15+0x9e>
- 1a0: 12 30 cpi r17, 0x02 ; 2
- 1a2: 09 f0 breq .+2 ; 0x1a6 <_Z4tonehjm.constprop.15+0x58>
- 1a4: 5e c0 rjmp .+188 ; 0x262 <_Z4tonehjm.constprop.15+0x114>
- #endif
-
- #if defined(TCCR2A) && defined(TCCR2B)
- case 2:
- // 8 bit timer
- TCCR2A = 0;
- 1a6: 10 92 b0 00 sts 0x00B0, r1 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- TCCR2B = 0;
- 1aa: 10 92 b1 00 sts 0x00B1, r1 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
- bitWrite(TCCR2A, WGM21, 1);
- 1ae: 80 91 b0 00 lds r24, 0x00B0 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- 1b2: 82 60 ori r24, 0x02 ; 2
- 1b4: 80 93 b0 00 sts 0x00B0, r24 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- bitWrite(TCCR2B, CS20, 1);
- 1b8: 80 91 b1 00 lds r24, 0x00B1 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
- 1bc: 81 60 ori r24, 0x01 ; 1
- 1be: 80 93 b1 00 sts 0x00B1, r24 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
- timer2_pin_port = portOutputRegister(digitalPinToPort(_pin));
- 1c2: e6 e9 ldi r30, 0x96 ; 150
- 1c4: f0 e0 ldi r31, 0x00 ; 0
- 1c6: e4 91 lpm r30, Z
- 1c8: f0 e0 ldi r31, 0x00 ; 0
- 1ca: ee 0f add r30, r30
- 1cc: ff 1f adc r31, r31
- 1ce: e3 58 subi r30, 0x83 ; 131
- 1d0: ff 4f sbci r31, 0xFF ; 255
- 1d2: 85 91 lpm r24, Z+
- 1d4: 94 91 lpm r25, Z
- 1d6: 90 93 dc 01 sts 0x01DC, r25 ; 0x8001dc <timer2_pin_port+0x1>
- 1da: 80 93 db 01 sts 0x01DB, r24 ; 0x8001db <timer2_pin_port>
- timer2_pin_mask = digitalPinToBitMask(_pin);
- 1de: ea ea ldi r30, 0xAA ; 170
- 1e0: f0 e0 ldi r31, 0x00 ; 0
- 1e2: e4 91 lpm r30, Z
- 1e4: e0 93 da 01 sts 0x01DA, r30 ; 0x8001da <timer2_pin_mask>
- 1e8: 12 e0 ldi r17, 0x02 ; 2
- 1ea: cb c1 rjmp .+918 ; 0x582 <__LOCK_REGION_LENGTH__+0x182>
- switch (_timer)
- {
- #if defined(TCCR0A) && defined(TCCR0B) && defined(WGM01)
- case 0:
- // 8 bit timer
- TCCR0A = 0;
- 1ec: 14 bc out 0x24, r1 ; 36
- TCCR0B = 0;
- 1ee: 15 bc out 0x25, r1 ; 37
- bitWrite(TCCR0A, WGM01, 1);
- 1f0: 84 b5 in r24, 0x24 ; 36
- 1f2: 82 60 ori r24, 0x02 ; 2
- 1f4: 84 bd out 0x24, r24 ; 36
- bitWrite(TCCR0B, CS00, 1);
- 1f6: 85 b5 in r24, 0x25 ; 37
- 1f8: 81 60 ori r24, 0x01 ; 1
- 1fa: 85 bd out 0x25, r24 ; 37
- timer0_pin_port = portOutputRegister(digitalPinToPort(_pin));
- 1fc: e6 e9 ldi r30, 0x96 ; 150
- 1fe: f0 e0 ldi r31, 0x00 ; 0
- 200: e4 91 lpm r30, Z
- 202: f0 e0 ldi r31, 0x00 ; 0
- 204: ee 0f add r30, r30
- 206: ff 1f adc r31, r31
- 208: e3 58 subi r30, 0x83 ; 131
- 20a: ff 4f sbci r31, 0xFF ; 255
- 20c: 85 91 lpm r24, Z+
- 20e: 94 91 lpm r25, Z
- timer0_pin_mask = digitalPinToBitMask(_pin);
- 210: ea ea ldi r30, 0xAA ; 170
- 212: f0 e0 ldi r31, 0x00 ; 0
- 214: e4 91 lpm r30, Z
- 216: e0 93 de 01 sts 0x01DE, r30 ; 0x8001de <timer0_pin_mask>
- 21a: 10 e0 ldi r17, 0x00 ; 0
- 21c: b2 c1 rjmp .+868 ; 0x582 <__LOCK_REGION_LENGTH__+0x182>
- #endif
-
- #if defined(TCCR1A) && defined(TCCR1B) && defined(WGM12)
- case 1:
- // 16 bit timer
- TCCR1A = 0;
- 21e: 10 92 80 00 sts 0x0080, r1 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
- TCCR1B = 0;
- 222: 10 92 81 00 sts 0x0081, r1 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- bitWrite(TCCR1B, WGM12, 1);
- 226: 80 91 81 00 lds r24, 0x0081 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- 22a: 88 60 ori r24, 0x08 ; 8
- 22c: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- bitWrite(TCCR1B, CS10, 1);
- 230: 80 91 81 00 lds r24, 0x0081 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- 234: 81 60 ori r24, 0x01 ; 1
- 236: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- timer1_pin_port = portOutputRegister(digitalPinToPort(_pin));
- 23a: e6 e9 ldi r30, 0x96 ; 150
- 23c: f0 e0 ldi r31, 0x00 ; 0
- 23e: e4 91 lpm r30, Z
- 240: f0 e0 ldi r31, 0x00 ; 0
- 242: ee 0f add r30, r30
- 244: ff 1f adc r31, r31
- 246: e3 58 subi r30, 0x83 ; 131
- 248: ff 4f sbci r31, 0xFF ; 255
- 24a: 85 91 lpm r24, Z+
- 24c: 94 91 lpm r25, Z
- timer1_pin_mask = digitalPinToBitMask(_pin);
- 24e: ea ea ldi r30, 0xAA ; 170
- 250: f0 e0 ldi r31, 0x00 ; 0
- 252: e4 91 lpm r30, Z
- 254: e0 93 dd 01 sts 0x01DD, r30 ; 0x8001dd <timer1_pin_mask>
- _timer = toneBegin(_pin);
-
- if (_timer >= 0)
- {
- // Set the pinMode as OUTPUT
- pinMode(_pin, OUTPUT);
- 258: 85 e0 ldi r24, 0x05 ; 5
- 25a: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- 25e: 11 e0 ldi r17, 0x01 ; 1
- 260: b0 c0 rjmp .+352 ; 0x3c2 <_Z4tonehjm.constprop.15+0x274>
- uint32_t ocr = 0;
- int8_t _timer;
-
- _timer = toneBegin(_pin);
-
- if (_timer >= 0)
- 262: 17 fd sbrc r17, 7
- 264: 92 c1 rjmp .+804 ; 0x58a <__LOCK_REGION_LENGTH__+0x18a>
- {
- // Set the pinMode as OUTPUT
- pinMode(_pin, OUTPUT);
- 266: 85 e0 ldi r24, 0x05 ; 5
- 268: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
-
- // if we are using an 8 bit timer, scan through prescalars to find the best fit
- if (_timer == 0 || _timer == 2)
- 26c: 81 2f mov r24, r17
- 26e: 8d 7f andi r24, 0xFD ; 253
- 270: 09 f0 breq .+2 ; 0x274 <_Z4tonehjm.constprop.15+0x126>
- 272: a7 c0 rjmp .+334 ; 0x3c2 <_Z4tonehjm.constprop.15+0x274>
- {
- ocr = F_CPU / frequency / 2 - 1;
- 274: 4e 01 movw r8, r28
- 276: a1 2c mov r10, r1
- 278: b1 2c mov r11, r1
- 27a: 60 e0 ldi r22, 0x00 ; 0
- 27c: 72 e1 ldi r23, 0x12 ; 18
- 27e: 8a e7 ldi r24, 0x7A ; 122
- 280: 90 e0 ldi r25, 0x00 ; 0
- 282: a5 01 movw r20, r10
- 284: 94 01 movw r18, r8
- 286: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 28a: 29 01 movw r4, r18
- 28c: 3a 01 movw r6, r20
- 28e: 69 01 movw r12, r18
- 290: 7a 01 movw r14, r20
- 292: 21 e0 ldi r18, 0x01 ; 1
- 294: c2 1a sub r12, r18
- 296: d1 08 sbc r13, r1
- 298: e1 08 sbc r14, r1
- 29a: f1 08 sbc r15, r1
- prescalarbits = 0b001; // ck/1: same for both timers
- if (ocr > 255)
- 29c: 8f ef ldi r24, 0xFF ; 255
- 29e: c8 16 cp r12, r24
- 2a0: d1 04 cpc r13, r1
- 2a2: e1 04 cpc r14, r1
- 2a4: f1 04 cpc r15, r1
- 2a6: 09 f0 breq .+2 ; 0x2aa <_Z4tonehjm.constprop.15+0x15c>
- 2a8: 08 f4 brcc .+2 ; 0x2ac <_Z4tonehjm.constprop.15+0x15e>
- 2aa: 4b c0 rjmp .+150 ; 0x342 <_Z4tonehjm.constprop.15+0x1f4>
- {
- ocr = F_CPU / frequency / 2 / 8 - 1;
- 2ac: 60 e4 ldi r22, 0x40 ; 64
- 2ae: 72 e4 ldi r23, 0x42 ; 66
- 2b0: 8f e0 ldi r24, 0x0F ; 15
- 2b2: 90 e0 ldi r25, 0x00 ; 0
- 2b4: a5 01 movw r20, r10
- 2b6: 94 01 movw r18, r8
- 2b8: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 2bc: 69 01 movw r12, r18
- 2be: 7a 01 movw r14, r20
- 2c0: 81 e0 ldi r24, 0x01 ; 1
- 2c2: c8 1a sub r12, r24
- 2c4: d1 08 sbc r13, r1
- 2c6: e1 08 sbc r14, r1
- 2c8: f1 08 sbc r15, r1
- prescalarbits = 0b010; // ck/8: same for both timers
-
- if (_timer == 2 && ocr > 255)
- 2ca: 12 30 cpi r17, 0x02 ; 2
- 2cc: 01 f5 brne .+64 ; 0x30e <_Z4tonehjm.constprop.15+0x1c0>
- 2ce: 2f ef ldi r18, 0xFF ; 255
- 2d0: c2 16 cp r12, r18
- 2d2: d1 04 cpc r13, r1
- 2d4: e1 04 cpc r14, r1
- 2d6: f1 04 cpc r15, r1
- 2d8: 09 f0 breq .+2 ; 0x2dc <_Z4tonehjm.constprop.15+0x18e>
- 2da: 08 f4 brcc .+2 ; 0x2de <_Z4tonehjm.constprop.15+0x190>
- 2dc: ea c0 rjmp .+468 ; 0x4b2 <__LOCK_REGION_LENGTH__+0xb2>
- {
- ocr = F_CPU / frequency / 2 / 32 - 1;
- 2de: 60 e9 ldi r22, 0x90 ; 144
- 2e0: 70 ed ldi r23, 0xD0 ; 208
- 2e2: 83 e0 ldi r24, 0x03 ; 3
- 2e4: 90 e0 ldi r25, 0x00 ; 0
- 2e6: a5 01 movw r20, r10
- 2e8: 94 01 movw r18, r8
- 2ea: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 2ee: 69 01 movw r12, r18
- 2f0: 7a 01 movw r14, r20
- 2f2: 81 e0 ldi r24, 0x01 ; 1
- 2f4: c8 1a sub r12, r24
- 2f6: d1 08 sbc r13, r1
- 2f8: e1 08 sbc r14, r1
- 2fa: f1 08 sbc r15, r1
- prescalarbits = 0b011;
- }
-
- if (ocr > 255)
- 2fc: 2f ef ldi r18, 0xFF ; 255
- 2fe: c2 16 cp r12, r18
- 300: d1 04 cpc r13, r1
- 302: e1 04 cpc r14, r1
- 304: f1 04 cpc r15, r1
- 306: 09 f0 breq .+2 ; 0x30a <_Z4tonehjm.constprop.15+0x1bc>
- 308: 30 f5 brcc .+76 ; 0x356 <_Z4tonehjm.constprop.15+0x208>
- prescalarbits = 0b010; // ck/8: same for both timers
-
- if (_timer == 2 && ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 32 - 1;
- prescalarbits = 0b011;
- 30a: 83 e0 ldi r24, 0x03 ; 3
- 30c: 53 c0 rjmp .+166 ; 0x3b4 <_Z4tonehjm.constprop.15+0x266>
- }
-
- if (ocr > 255)
- 30e: 8f ef ldi r24, 0xFF ; 255
- 310: c8 16 cp r12, r24
- 312: d1 04 cpc r13, r1
- 314: e1 04 cpc r14, r1
- 316: f1 04 cpc r15, r1
- 318: b1 f0 breq .+44 ; 0x346 <_Z4tonehjm.constprop.15+0x1f8>
- 31a: a8 f0 brcs .+42 ; 0x346 <_Z4tonehjm.constprop.15+0x1f8>
- {
- ocr = F_CPU / frequency / 2 / 64 - 1;
- 31c: 68 e4 ldi r22, 0x48 ; 72
- 31e: 78 ee ldi r23, 0xE8 ; 232
- 320: 81 e0 ldi r24, 0x01 ; 1
- 322: 90 e0 ldi r25, 0x00 ; 0
- 324: a5 01 movw r20, r10
- 326: 94 01 movw r18, r8
- 328: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 32c: 69 01 movw r12, r18
- 32e: 7a 01 movw r14, r20
- 330: 81 e0 ldi r24, 0x01 ; 1
- 332: c8 1a sub r12, r24
- 334: d1 08 sbc r13, r1
- 336: e1 08 sbc r14, r1
- 338: f1 08 sbc r15, r1
- prescalarbits = _timer == 0 ? 0b011 : 0b100;
- 33a: 11 23 and r17, r17
- 33c: 09 f4 brne .+2 ; 0x340 <_Z4tonehjm.constprop.15+0x1f2>
- 33e: ee c0 rjmp .+476 ; 0x51c <__LOCK_REGION_LENGTH__+0x11c>
- 340: e4 c0 rjmp .+456 ; 0x50a <__LOCK_REGION_LENGTH__+0x10a>
-
- // if we are using an 8 bit timer, scan through prescalars to find the best fit
- if (_timer == 0 || _timer == 2)
- {
- ocr = F_CPU / frequency / 2 - 1;
- prescalarbits = 0b001; // ck/1: same for both timers
- 342: 81 e0 ldi r24, 0x01 ; 1
- 344: 01 c0 rjmp .+2 ; 0x348 <_Z4tonehjm.constprop.15+0x1fa>
- if (ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 8 - 1;
- prescalarbits = 0b010; // ck/8: same for both timers
- 346: 82 e0 ldi r24, 0x02 ; 2
- }
- }
- }
-
- #if defined(TCCR0B)
- if (_timer == 0)
- 348: 11 11 cpse r17, r1
- 34a: 34 c0 rjmp .+104 ; 0x3b4 <_Z4tonehjm.constprop.15+0x266>
- {
- TCCR0B = (TCCR0B & 0b11111000) | prescalarbits;
- 34c: 95 b5 in r25, 0x25 ; 37
- 34e: 98 7f andi r25, 0xF8 ; 248
- 350: 89 2b or r24, r25
- 352: 85 bd out 0x25, r24 ; 37
- 354: 68 c0 rjmp .+208 ; 0x426 <__LOCK_REGION_LENGTH__+0x26>
- prescalarbits = 0b011;
- }
-
- if (ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 64 - 1;
- 356: 68 e4 ldi r22, 0x48 ; 72
- 358: 78 ee ldi r23, 0xE8 ; 232
- 35a: 81 e0 ldi r24, 0x01 ; 1
- 35c: 90 e0 ldi r25, 0x00 ; 0
- 35e: a5 01 movw r20, r10
- 360: 94 01 movw r18, r8
- 362: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 366: 69 01 movw r12, r18
- 368: 7a 01 movw r14, r20
- 36a: 81 e0 ldi r24, 0x01 ; 1
- 36c: c8 1a sub r12, r24
- 36e: d1 08 sbc r13, r1
- 370: e1 08 sbc r14, r1
- 372: f1 08 sbc r15, r1
- prescalarbits = _timer == 0 ? 0b011 : 0b100;
-
- if (_timer == 2 && ocr > 255)
- 374: 2f ef ldi r18, 0xFF ; 255
- 376: c2 16 cp r12, r18
- 378: d1 04 cpc r13, r1
- 37a: e1 04 cpc r14, r1
- 37c: f1 04 cpc r15, r1
- 37e: 09 f0 breq .+2 ; 0x382 <_Z4tonehjm.constprop.15+0x234>
- 380: 08 f4 brcc .+2 ; 0x384 <_Z4tonehjm.constprop.15+0x236>
- 382: 95 c0 rjmp .+298 ; 0x4ae <__LOCK_REGION_LENGTH__+0xae>
- {
- ocr = F_CPU / frequency / 2 / 128 - 1;
- 384: 64 e2 ldi r22, 0x24 ; 36
- 386: 74 ef ldi r23, 0xF4 ; 244
- 388: 80 e0 ldi r24, 0x00 ; 0
- 38a: 90 e0 ldi r25, 0x00 ; 0
- 38c: a5 01 movw r20, r10
- 38e: 94 01 movw r18, r8
- 390: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 394: 69 01 movw r12, r18
- 396: 7a 01 movw r14, r20
- 398: 81 e0 ldi r24, 0x01 ; 1
- 39a: c8 1a sub r12, r24
- 39c: d1 08 sbc r13, r1
- 39e: e1 08 sbc r14, r1
- 3a0: f1 08 sbc r15, r1
- prescalarbits = 0b101;
- }
-
- if (ocr > 255)
- 3a2: 2f ef ldi r18, 0xFF ; 255
- 3a4: c2 16 cp r12, r18
- 3a6: d1 04 cpc r13, r1
- 3a8: e1 04 cpc r14, r1
- 3aa: f1 04 cpc r15, r1
- 3ac: 11 f0 breq .+4 ; 0x3b2 <_Z4tonehjm.constprop.15+0x264>
- 3ae: 08 f0 brcs .+2 ; 0x3b2 <_Z4tonehjm.constprop.15+0x264>
- 3b0: 82 c0 rjmp .+260 ; 0x4b6 <__LOCK_REGION_LENGTH__+0xb6>
- prescalarbits = _timer == 0 ? 0b011 : 0b100;
-
- if (_timer == 2 && ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 128 - 1;
- prescalarbits = 0b101;
- 3b2: 85 e0 ldi r24, 0x05 ; 5
- }
- else
- #endif
- #if defined(TCCR2B)
- {
- TCCR2B = (TCCR2B & 0b11111000) | prescalarbits;
- 3b4: 90 91 b1 00 lds r25, 0x00B1 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
- 3b8: 98 7f andi r25, 0xF8 ; 248
- 3ba: 89 2b or r24, r25
- 3bc: 80 93 b1 00 sts 0x00B1, r24 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
- 3c0: 32 c0 rjmp .+100 ; 0x426 <__LOCK_REGION_LENGTH__+0x26>
- #endif
- }
- else
- {
- // two choices for the 16 bit timers: ck/1 or ck/64
- ocr = F_CPU / frequency / 2 - 1;
- 3c2: 4e 01 movw r8, r28
- 3c4: a1 2c mov r10, r1
- 3c6: b1 2c mov r11, r1
- 3c8: 60 e0 ldi r22, 0x00 ; 0
- 3ca: 72 e1 ldi r23, 0x12 ; 18
- 3cc: 8a e7 ldi r24, 0x7A ; 122
- 3ce: 90 e0 ldi r25, 0x00 ; 0
- 3d0: a5 01 movw r20, r10
- 3d2: 94 01 movw r18, r8
- 3d4: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 3d8: 69 01 movw r12, r18
- 3da: 7a 01 movw r14, r20
- 3dc: 81 e0 ldi r24, 0x01 ; 1
- 3de: c8 1a sub r12, r24
- 3e0: d1 08 sbc r13, r1
- 3e2: e1 08 sbc r14, r1
- 3e4: f1 08 sbc r15, r1
-
- prescalarbits = 0b001;
- if (ocr > 0xffff)
- 3e6: c1 14 cp r12, r1
- 3e8: d1 04 cpc r13, r1
- 3ea: 21 e0 ldi r18, 0x01 ; 1
- 3ec: e2 06 cpc r14, r18
- 3ee: f1 04 cpc r15, r1
- 3f0: 88 f0 brcs .+34 ; 0x414 <__LOCK_REGION_LENGTH__+0x14>
- {
- ocr = F_CPU / frequency / 2 / 64 - 1;
- 3f2: 68 e4 ldi r22, 0x48 ; 72
- 3f4: 78 ee ldi r23, 0xE8 ; 232
- 3f6: 81 e0 ldi r24, 0x01 ; 1
- 3f8: 90 e0 ldi r25, 0x00 ; 0
- 3fa: a5 01 movw r20, r10
- 3fc: 94 01 movw r18, r8
- 3fe: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 402: 69 01 movw r12, r18
- 404: 7a 01 movw r14, r20
- 406: 81 e0 ldi r24, 0x01 ; 1
- 408: c8 1a sub r12, r24
- 40a: d1 08 sbc r13, r1
- 40c: e1 08 sbc r14, r1
- 40e: f1 08 sbc r15, r1
- prescalarbits = 0b011;
- 410: 83 e0 ldi r24, 0x03 ; 3
- 412: 01 c0 rjmp .+2 ; 0x416 <__LOCK_REGION_LENGTH__+0x16>
- else
- {
- // two choices for the 16 bit timers: ck/1 or ck/64
- ocr = F_CPU / frequency / 2 - 1;
-
- prescalarbits = 0b001;
- 414: 81 e0 ldi r24, 0x01 ; 1
- {
- ocr = F_CPU / frequency / 2 / 64 - 1;
- prescalarbits = 0b011;
- }
-
- if (_timer == 1)
- 416: 11 30 cpi r17, 0x01 ; 1
- 418: 31 f4 brne .+12 ; 0x426 <__LOCK_REGION_LENGTH__+0x26>
- {
- #if defined(TCCR1B)
- TCCR1B = (TCCR1B & 0b11111000) | prescalarbits;
- 41a: 90 91 81 00 lds r25, 0x0081 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- 41e: 98 7f andi r25, 0xF8 ; 248
- 420: 89 2b or r24, r25
- 422: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
-
-
- // Calculate the toggle count
- if (duration > 0)
- {
- toggle_count = 2 * frequency * duration / 1000;
- 426: 9e 01 movw r18, r28
- 428: 22 0f add r18, r18
- 42a: 33 1f adc r19, r19
- 42c: a4 e6 ldi r26, 0x64 ; 100
- 42e: b0 e0 ldi r27, 0x00 ; 0
- 430: 0e 94 be 08 call 0x117c ; 0x117c <__umulhisi3>
- 434: 28 ee ldi r18, 0xE8 ; 232
- 436: 33 e0 ldi r19, 0x03 ; 3
- 438: 40 e0 ldi r20, 0x00 ; 0
- 43a: 50 e0 ldi r21, 0x00 ; 0
- 43c: 0e 94 7d 08 call 0x10fa ; 0x10fa <__udivmodsi4>
- }
-
- // Set the OCR for the given timer,
- // set the toggle count,
- // then turn on the interrupts
- switch (_timer)
- 440: 11 30 cpi r17, 0x01 ; 1
- 442: 99 f0 breq .+38 ; 0x46a <__LOCK_REGION_LENGTH__+0x6a>
- 444: 12 30 cpi r17, 0x02 ; 2
- 446: 19 f1 breq .+70 ; 0x48e <__LOCK_REGION_LENGTH__+0x8e>
- 448: 11 11 cpse r17, r1
- 44a: 9f c0 rjmp .+318 ; 0x58a <__LOCK_REGION_LENGTH__+0x18a>
- {
-
- #if defined(OCR0A) && defined(TIMSK0) && defined(OCIE0A)
- case 0:
- OCR0A = ocr;
- 44c: c7 bc out 0x27, r12 ; 39
- timer0_toggle_count = toggle_count;
- 44e: 20 93 e7 01 sts 0x01E7, r18 ; 0x8001e7 <timer0_toggle_count>
- 452: 30 93 e8 01 sts 0x01E8, r19 ; 0x8001e8 <timer0_toggle_count+0x1>
- 456: 40 93 e9 01 sts 0x01E9, r20 ; 0x8001e9 <timer0_toggle_count+0x2>
- 45a: 50 93 ea 01 sts 0x01EA, r21 ; 0x8001ea <timer0_toggle_count+0x3>
- bitWrite(TIMSK0, OCIE0A, 1);
- 45e: 80 91 6e 00 lds r24, 0x006E ; 0x80006e <__TEXT_REGION_LENGTH__+0x7e006e>
- 462: 82 60 ori r24, 0x02 ; 2
- 464: 80 93 6e 00 sts 0x006E, r24 ; 0x80006e <__TEXT_REGION_LENGTH__+0x7e006e>
- 468: 90 c0 rjmp .+288 ; 0x58a <__LOCK_REGION_LENGTH__+0x18a>
- break;
- #endif
-
- case 1:
- #if defined(OCR1A) && defined(TIMSK1) && defined(OCIE1A)
- OCR1A = ocr;
- 46a: d0 92 89 00 sts 0x0089, r13 ; 0x800089 <__TEXT_REGION_LENGTH__+0x7e0089>
- 46e: c0 92 88 00 sts 0x0088, r12 ; 0x800088 <__TEXT_REGION_LENGTH__+0x7e0088>
- timer1_toggle_count = toggle_count;
- 472: 20 93 e3 01 sts 0x01E3, r18 ; 0x8001e3 <timer1_toggle_count>
- 476: 30 93 e4 01 sts 0x01E4, r19 ; 0x8001e4 <timer1_toggle_count+0x1>
- 47a: 40 93 e5 01 sts 0x01E5, r20 ; 0x8001e5 <timer1_toggle_count+0x2>
- 47e: 50 93 e6 01 sts 0x01E6, r21 ; 0x8001e6 <timer1_toggle_count+0x3>
- bitWrite(TIMSK1, OCIE1A, 1);
- 482: 80 91 6f 00 lds r24, 0x006F ; 0x80006f <__TEXT_REGION_LENGTH__+0x7e006f>
- 486: 82 60 ori r24, 0x02 ; 2
- 488: 80 93 6f 00 sts 0x006F, r24 ; 0x80006f <__TEXT_REGION_LENGTH__+0x7e006f>
- 48c: 7e c0 rjmp .+252 ; 0x58a <__LOCK_REGION_LENGTH__+0x18a>
- #endif
- break;
-
- #if defined(OCR2A) && defined(TIMSK2) && defined(OCIE2A)
- case 2:
- OCR2A = ocr;
- 48e: c0 92 b3 00 sts 0x00B3, r12 ; 0x8000b3 <__TEXT_REGION_LENGTH__+0x7e00b3>
- timer2_toggle_count = toggle_count;
- 492: 20 93 df 01 sts 0x01DF, r18 ; 0x8001df <timer2_toggle_count>
- 496: 30 93 e0 01 sts 0x01E0, r19 ; 0x8001e0 <timer2_toggle_count+0x1>
- 49a: 40 93 e1 01 sts 0x01E1, r20 ; 0x8001e1 <timer2_toggle_count+0x2>
- 49e: 50 93 e2 01 sts 0x01E2, r21 ; 0x8001e2 <timer2_toggle_count+0x3>
- bitWrite(TIMSK2, OCIE2A, 1);
- 4a2: 80 91 70 00 lds r24, 0x0070 ; 0x800070 <__TEXT_REGION_LENGTH__+0x7e0070>
- 4a6: 82 60 ori r24, 0x02 ; 2
- 4a8: 80 93 70 00 sts 0x0070, r24 ; 0x800070 <__TEXT_REGION_LENGTH__+0x7e0070>
- 4ac: 6e c0 rjmp .+220 ; 0x58a <__LOCK_REGION_LENGTH__+0x18a>
- }
-
- if (ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 64 - 1;
- prescalarbits = _timer == 0 ? 0b011 : 0b100;
- 4ae: 84 e0 ldi r24, 0x04 ; 4
- 4b0: 81 cf rjmp .-254 ; 0x3b4 <_Z4tonehjm.constprop.15+0x266>
- ocr = F_CPU / frequency / 2 - 1;
- prescalarbits = 0b001; // ck/1: same for both timers
- if (ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 8 - 1;
- prescalarbits = 0b010; // ck/8: same for both timers
- 4b2: 82 e0 ldi r24, 0x02 ; 2
- 4b4: 7f cf rjmp .-258 ; 0x3b4 <_Z4tonehjm.constprop.15+0x266>
- prescalarbits = 0b101;
- }
-
- if (ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 256 - 1;
- 4b6: 62 e1 ldi r22, 0x12 ; 18
- 4b8: 7a e7 ldi r23, 0x7A ; 122
- 4ba: 80 e0 ldi r24, 0x00 ; 0
- 4bc: 90 e0 ldi r25, 0x00 ; 0
- 4be: a5 01 movw r20, r10
- 4c0: 94 01 movw r18, r8
- 4c2: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 4c6: 69 01 movw r12, r18
- 4c8: 7a 01 movw r14, r20
- 4ca: 81 e0 ldi r24, 0x01 ; 1
- 4cc: c8 1a sub r12, r24
- 4ce: d1 08 sbc r13, r1
- 4d0: e1 08 sbc r14, r1
- 4d2: f1 08 sbc r15, r1
- prescalarbits = _timer == 0 ? 0b100 : 0b110;
- if (ocr > 255)
- 4d4: 8f ef ldi r24, 0xFF ; 255
- 4d6: c8 16 cp r12, r24
- 4d8: d1 04 cpc r13, r1
- 4da: e1 04 cpc r14, r1
- 4dc: f1 04 cpc r15, r1
- 4de: 99 f0 breq .+38 ; 0x506 <__LOCK_REGION_LENGTH__+0x106>
- 4e0: 90 f0 brcs .+36 ; 0x506 <__LOCK_REGION_LENGTH__+0x106>
- {
- // can't do any better than /1024
- ocr = F_CPU / frequency / 2 / 1024 - 1;
- 4e2: d3 01 movw r26, r6
- 4e4: c2 01 movw r24, r4
- 4e6: 2a e0 ldi r18, 0x0A ; 10
- 4e8: b5 95 asr r27
- 4ea: a7 95 ror r26
- 4ec: 97 95 ror r25
- 4ee: 87 95 ror r24
- 4f0: 2a 95 dec r18
- 4f2: d1 f7 brne .-12 ; 0x4e8 <__LOCK_REGION_LENGTH__+0xe8>
- 4f4: 6c 01 movw r12, r24
- 4f6: 7d 01 movw r14, r26
- 4f8: 21 e0 ldi r18, 0x01 ; 1
- 4fa: c2 1a sub r12, r18
- 4fc: d1 08 sbc r13, r1
- 4fe: e1 08 sbc r14, r1
- 500: f1 08 sbc r15, r1
- prescalarbits = _timer == 0 ? 0b101 : 0b111;
- 502: 87 e0 ldi r24, 0x07 ; 7
- 504: 57 cf rjmp .-338 ; 0x3b4 <_Z4tonehjm.constprop.15+0x266>
- }
-
- if (ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 256 - 1;
- prescalarbits = _timer == 0 ? 0b100 : 0b110;
- 506: 86 e0 ldi r24, 0x06 ; 6
- 508: 55 cf rjmp .-342 ; 0x3b4 <_Z4tonehjm.constprop.15+0x266>
- {
- ocr = F_CPU / frequency / 2 / 128 - 1;
- prescalarbits = 0b101;
- }
-
- if (ocr > 255)
- 50a: 2f ef ldi r18, 0xFF ; 255
- 50c: c2 16 cp r12, r18
- 50e: d1 04 cpc r13, r1
- 510: e1 04 cpc r14, r1
- 512: f1 04 cpc r15, r1
- 514: 09 f0 breq .+2 ; 0x518 <__LOCK_REGION_LENGTH__+0x118>
- 516: 78 f6 brcc .-98 ; 0x4b6 <__LOCK_REGION_LENGTH__+0xb6>
- }
-
- if (ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 64 - 1;
- prescalarbits = _timer == 0 ? 0b011 : 0b100;
- 518: 84 e0 ldi r24, 0x04 ; 4
- 51a: 16 cf rjmp .-468 ; 0x348 <_Z4tonehjm.constprop.15+0x1fa>
- {
- ocr = F_CPU / frequency / 2 / 128 - 1;
- prescalarbits = 0b101;
- }
-
- if (ocr > 255)
- 51c: 8f ef ldi r24, 0xFF ; 255
- 51e: c8 16 cp r12, r24
- 520: d1 04 cpc r13, r1
- 522: e1 04 cpc r14, r1
- 524: f1 04 cpc r15, r1
- 526: 59 f1 breq .+86 ; 0x57e <__LOCK_REGION_LENGTH__+0x17e>
- 528: 50 f1 brcs .+84 ; 0x57e <__LOCK_REGION_LENGTH__+0x17e>
- {
- ocr = F_CPU / frequency / 2 / 256 - 1;
- 52a: 62 e1 ldi r22, 0x12 ; 18
- 52c: 7a e7 ldi r23, 0x7A ; 122
- 52e: 80 e0 ldi r24, 0x00 ; 0
- 530: 90 e0 ldi r25, 0x00 ; 0
- 532: a5 01 movw r20, r10
- 534: 94 01 movw r18, r8
- 536: 0e 94 9f 08 call 0x113e ; 0x113e <__divmodsi4>
- 53a: 69 01 movw r12, r18
- 53c: 7a 01 movw r14, r20
- 53e: 81 e0 ldi r24, 0x01 ; 1
- 540: c8 1a sub r12, r24
- 542: d1 08 sbc r13, r1
- 544: e1 08 sbc r14, r1
- 546: f1 08 sbc r15, r1
- prescalarbits = _timer == 0 ? 0b100 : 0b110;
- if (ocr > 255)
- 548: 2f ef ldi r18, 0xFF ; 255
- 54a: c2 16 cp r12, r18
- 54c: d1 04 cpc r13, r1
- 54e: e1 04 cpc r14, r1
- 550: f1 04 cpc r15, r1
- 552: 99 f0 breq .+38 ; 0x57a <__LOCK_REGION_LENGTH__+0x17a>
- 554: 90 f0 brcs .+36 ; 0x57a <__LOCK_REGION_LENGTH__+0x17a>
- {
- // can't do any better than /1024
- ocr = F_CPU / frequency / 2 / 1024 - 1;
- 556: d3 01 movw r26, r6
- 558: c2 01 movw r24, r4
- 55a: 3a e0 ldi r19, 0x0A ; 10
- 55c: b5 95 asr r27
- 55e: a7 95 ror r26
- 560: 97 95 ror r25
- 562: 87 95 ror r24
- 564: 3a 95 dec r19
- 566: d1 f7 brne .-12 ; 0x55c <__LOCK_REGION_LENGTH__+0x15c>
- 568: 6c 01 movw r12, r24
- 56a: 7d 01 movw r14, r26
- 56c: 21 e0 ldi r18, 0x01 ; 1
- 56e: c2 1a sub r12, r18
- 570: d1 08 sbc r13, r1
- 572: e1 08 sbc r14, r1
- 574: f1 08 sbc r15, r1
- prescalarbits = _timer == 0 ? 0b101 : 0b111;
- 576: 85 e0 ldi r24, 0x05 ; 5
- 578: e9 ce rjmp .-558 ; 0x34c <_Z4tonehjm.constprop.15+0x1fe>
- }
-
- if (ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 256 - 1;
- prescalarbits = _timer == 0 ? 0b100 : 0b110;
- 57a: 84 e0 ldi r24, 0x04 ; 4
- 57c: e7 ce rjmp .-562 ; 0x34c <_Z4tonehjm.constprop.15+0x1fe>
- }
-
- if (ocr > 255)
- {
- ocr = F_CPU / frequency / 2 / 64 - 1;
- prescalarbits = _timer == 0 ? 0b011 : 0b100;
- 57e: 83 e0 ldi r24, 0x03 ; 3
- 580: e5 ce rjmp .-566 ; 0x34c <_Z4tonehjm.constprop.15+0x1fe>
- _timer = toneBegin(_pin);
-
- if (_timer >= 0)
- {
- // Set the pinMode as OUTPUT
- pinMode(_pin, OUTPUT);
- 582: 85 e0 ldi r24, 0x05 ; 5
- 584: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- 588: 75 ce rjmp .-790 ; 0x274 <_Z4tonehjm.constprop.15+0x126>
- break;
- #endif
-
- }
- }
- }
- 58a: df 91 pop r29
- 58c: cf 91 pop r28
- 58e: 1f 91 pop r17
- 590: ff 90 pop r15
- 592: ef 90 pop r14
- 594: df 90 pop r13
- 596: cf 90 pop r12
- 598: bf 90 pop r11
- 59a: af 90 pop r10
- 59c: 9f 90 pop r9
- 59e: 8f 90 pop r8
- 5a0: 7f 90 pop r7
- 5a2: 6f 90 pop r6
- 5a4: 5f 90 pop r5
- 5a6: 4f 90 pop r4
- 5a8: 08 95 ret
-
- 000005aa <digitalWrite>:
- }
- }
-
- void digitalWrite(uint8_t pin, uint8_t val)
- {
- uint8_t timer = digitalPinToTimer(pin);
- 5aa: 90 e0 ldi r25, 0x00 ; 0
- 5ac: fc 01 movw r30, r24
- 5ae: e8 59 subi r30, 0x98 ; 152
- 5b0: ff 4f sbci r31, 0xFF ; 255
- 5b2: 24 91 lpm r18, Z
- uint8_t bit = digitalPinToBitMask(pin);
- 5b4: fc 01 movw r30, r24
- 5b6: eb 55 subi r30, 0x5B ; 91
- 5b8: ff 4f sbci r31, 0xFF ; 255
- 5ba: 34 91 lpm r19, Z
- uint8_t port = digitalPinToPort(pin);
- 5bc: fc 01 movw r30, r24
- 5be: ef 56 subi r30, 0x6F ; 111
- 5c0: ff 4f sbci r31, 0xFF ; 255
- 5c2: e4 91 lpm r30, Z
- volatile uint8_t *out;
-
- if (port == NOT_A_PIN) return;
- 5c4: ee 23 and r30, r30
- 5c6: 09 f4 brne .+2 ; 0x5ca <digitalWrite+0x20>
- 5c8: 3c c0 rjmp .+120 ; 0x642 <digitalWrite+0x98>
-
- // If the pin that support PWM output, we need to turn it off
- // before doing a digital write.
- if (timer != NOT_ON_TIMER) turnOffPWM(timer);
- 5ca: 22 23 and r18, r18
- 5cc: 39 f1 breq .+78 ; 0x61c <digitalWrite+0x72>
- //
- //static inline void turnOffPWM(uint8_t timer) __attribute__ ((always_inline));
- //static inline void turnOffPWM(uint8_t timer)
- static void turnOffPWM(uint8_t timer)
- {
- switch (timer)
- 5ce: 23 30 cpi r18, 0x03 ; 3
- 5d0: 91 f0 breq .+36 ; 0x5f6 <digitalWrite+0x4c>
- 5d2: 38 f4 brcc .+14 ; 0x5e2 <digitalWrite+0x38>
- 5d4: 21 30 cpi r18, 0x01 ; 1
- 5d6: a9 f0 breq .+42 ; 0x602 <digitalWrite+0x58>
- 5d8: 22 30 cpi r18, 0x02 ; 2
- 5da: 01 f5 brne .+64 ; 0x61c <digitalWrite+0x72>
- #if defined(TCCR0A) && defined(COM0A1)
- case TIMER0A: cbi(TCCR0A, COM0A1); break;
- #endif
-
- #if defined(TCCR0A) && defined(COM0B1)
- case TIMER0B: cbi(TCCR0A, COM0B1); break;
- 5dc: 84 b5 in r24, 0x24 ; 36
- 5de: 8f 7d andi r24, 0xDF ; 223
- 5e0: 12 c0 rjmp .+36 ; 0x606 <digitalWrite+0x5c>
- //
- //static inline void turnOffPWM(uint8_t timer) __attribute__ ((always_inline));
- //static inline void turnOffPWM(uint8_t timer)
- static void turnOffPWM(uint8_t timer)
- {
- switch (timer)
- 5e2: 27 30 cpi r18, 0x07 ; 7
- 5e4: 91 f0 breq .+36 ; 0x60a <digitalWrite+0x60>
- 5e6: 28 30 cpi r18, 0x08 ; 8
- 5e8: a1 f0 breq .+40 ; 0x612 <digitalWrite+0x68>
- 5ea: 24 30 cpi r18, 0x04 ; 4
- 5ec: b9 f4 brne .+46 ; 0x61c <digitalWrite+0x72>
- {
- #if defined(TCCR1A) && defined(COM1A1)
- case TIMER1A: cbi(TCCR1A, COM1A1); break;
- #endif
- #if defined(TCCR1A) && defined(COM1B1)
- case TIMER1B: cbi(TCCR1A, COM1B1); break;
- 5ee: 80 91 80 00 lds r24, 0x0080 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
- 5f2: 8f 7d andi r24, 0xDF ; 223
- 5f4: 03 c0 rjmp .+6 ; 0x5fc <digitalWrite+0x52>
- static void turnOffPWM(uint8_t timer)
- {
- switch (timer)
- {
- #if defined(TCCR1A) && defined(COM1A1)
- case TIMER1A: cbi(TCCR1A, COM1A1); break;
- 5f6: 80 91 80 00 lds r24, 0x0080 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
- 5fa: 8f 77 andi r24, 0x7F ; 127
- #endif
- #if defined(TCCR1A) && defined(COM1B1)
- case TIMER1B: cbi(TCCR1A, COM1B1); break;
- 5fc: 80 93 80 00 sts 0x0080, r24 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
- 600: 0d c0 rjmp .+26 ; 0x61c <digitalWrite+0x72>
- #if defined(TCCR2) && defined(COM21)
- case TIMER2: cbi(TCCR2, COM21); break;
- #endif
-
- #if defined(TCCR0A) && defined(COM0A1)
- case TIMER0A: cbi(TCCR0A, COM0A1); break;
- 602: 84 b5 in r24, 0x24 ; 36
- 604: 8f 77 andi r24, 0x7F ; 127
- #endif
-
- #if defined(TCCR0A) && defined(COM0B1)
- case TIMER0B: cbi(TCCR0A, COM0B1); break;
- 606: 84 bd out 0x24, r24 ; 36
- 608: 09 c0 rjmp .+18 ; 0x61c <digitalWrite+0x72>
- #endif
- #if defined(TCCR2A) && defined(COM2A1)
- case TIMER2A: cbi(TCCR2A, COM2A1); break;
- 60a: 80 91 b0 00 lds r24, 0x00B0 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- 60e: 8f 77 andi r24, 0x7F ; 127
- 610: 03 c0 rjmp .+6 ; 0x618 <digitalWrite+0x6e>
- #endif
- #if defined(TCCR2A) && defined(COM2B1)
- case TIMER2B: cbi(TCCR2A, COM2B1); break;
- 612: 80 91 b0 00 lds r24, 0x00B0 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- 616: 8f 7d andi r24, 0xDF ; 223
- 618: 80 93 b0 00 sts 0x00B0, r24 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
-
- // If the pin that support PWM output, we need to turn it off
- // before doing a digital write.
- if (timer != NOT_ON_TIMER) turnOffPWM(timer);
-
- out = portOutputRegister(port);
- 61c: f0 e0 ldi r31, 0x00 ; 0
- 61e: ee 0f add r30, r30
- 620: ff 1f adc r31, r31
- 622: e3 58 subi r30, 0x83 ; 131
- 624: ff 4f sbci r31, 0xFF ; 255
- 626: a5 91 lpm r26, Z+
- 628: b4 91 lpm r27, Z
-
- uint8_t oldSREG = SREG;
- 62a: 9f b7 in r25, 0x3f ; 63
- cli();
- 62c: f8 94 cli
-
- if (val == LOW) {
- 62e: 61 11 cpse r22, r1
- 630: 04 c0 rjmp .+8 ; 0x63a <digitalWrite+0x90>
- *out &= ~bit;
- 632: 8c 91 ld r24, X
- 634: 30 95 com r19
- 636: 38 23 and r19, r24
- 638: 02 c0 rjmp .+4 ; 0x63e <digitalWrite+0x94>
- } else {
- *out |= bit;
- 63a: ec 91 ld r30, X
- 63c: 3e 2b or r19, r30
- 63e: 3c 93 st X, r19
- }
-
- SREG = oldSREG;
- 640: 9f bf out 0x3f, r25 ; 63
- 642: 08 95 ret
-
- 00000644 <micros>:
- return m;
- }
-
- unsigned long micros() {
- unsigned long m;
- uint8_t oldSREG = SREG, t;
- 644: 3f b7 in r19, 0x3f ; 63
-
- cli();
- 646: f8 94 cli
- m = timer0_overflow_count;
- 648: 80 91 39 01 lds r24, 0x0139 ; 0x800139 <timer0_overflow_count>
- 64c: 90 91 3a 01 lds r25, 0x013A ; 0x80013a <timer0_overflow_count+0x1>
- 650: a0 91 3b 01 lds r26, 0x013B ; 0x80013b <timer0_overflow_count+0x2>
- 654: b0 91 3c 01 lds r27, 0x013C ; 0x80013c <timer0_overflow_count+0x3>
- #if defined(TCNT0)
- t = TCNT0;
- 658: 26 b5 in r18, 0x26 ; 38
- #else
- #error TIMER 0 not defined
- #endif
-
- #ifdef TIFR0
- if ((TIFR0 & _BV(TOV0)) && (t < 255))
- 65a: a8 9b sbis 0x15, 0 ; 21
- 65c: 05 c0 rjmp .+10 ; 0x668 <micros+0x24>
- 65e: 2f 3f cpi r18, 0xFF ; 255
- 660: 19 f0 breq .+6 ; 0x668 <micros+0x24>
- m++;
- 662: 01 96 adiw r24, 0x01 ; 1
- 664: a1 1d adc r26, r1
- 666: b1 1d adc r27, r1
- #else
- if ((TIFR & _BV(TOV0)) && (t < 255))
- m++;
- #endif
-
- SREG = oldSREG;
- 668: 3f bf out 0x3f, r19 ; 63
-
- return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
- 66a: ba 2f mov r27, r26
- 66c: a9 2f mov r26, r25
- 66e: 98 2f mov r25, r24
- 670: 88 27 eor r24, r24
- 672: 82 0f add r24, r18
- 674: 91 1d adc r25, r1
- 676: a1 1d adc r26, r1
- 678: b1 1d adc r27, r1
- 67a: bc 01 movw r22, r24
- 67c: cd 01 movw r24, r26
- 67e: 42 e0 ldi r20, 0x02 ; 2
- 680: 66 0f add r22, r22
- 682: 77 1f adc r23, r23
- 684: 88 1f adc r24, r24
- 686: 99 1f adc r25, r25
- 688: 4a 95 dec r20
- 68a: d1 f7 brne .-12 ; 0x680 <micros+0x3c>
- }
- 68c: 08 95 ret
-
- 0000068e <delay>:
-
- void delay(unsigned long ms)
- {
- 68e: 8f 92 push r8
- 690: 9f 92 push r9
- 692: af 92 push r10
- 694: bf 92 push r11
- 696: cf 92 push r12
- 698: df 92 push r13
- 69a: ef 92 push r14
- 69c: ff 92 push r15
- 69e: 6b 01 movw r12, r22
- 6a0: 7c 01 movw r14, r24
- uint32_t start = micros();
- 6a2: 0e 94 22 03 call 0x644 ; 0x644 <micros>
- 6a6: 4b 01 movw r8, r22
- 6a8: 5c 01 movw r10, r24
-
- while (ms > 0) {
- 6aa: c1 14 cp r12, r1
- 6ac: d1 04 cpc r13, r1
- 6ae: e1 04 cpc r14, r1
- 6b0: f1 04 cpc r15, r1
- 6b2: f1 f0 breq .+60 ; 0x6f0 <delay+0x62>
- yield();
- while ( ms > 0 && (micros() - start) >= 1000) {
- 6b4: 0e 94 22 03 call 0x644 ; 0x644 <micros>
- 6b8: dc 01 movw r26, r24
- 6ba: cb 01 movw r24, r22
- 6bc: 88 19 sub r24, r8
- 6be: 99 09 sbc r25, r9
- 6c0: aa 09 sbc r26, r10
- 6c2: bb 09 sbc r27, r11
- 6c4: 88 3e cpi r24, 0xE8 ; 232
- 6c6: 93 40 sbci r25, 0x03 ; 3
- 6c8: a1 05 cpc r26, r1
- 6ca: b1 05 cpc r27, r1
- 6cc: 70 f3 brcs .-36 ; 0x6aa <delay+0x1c>
- ms--;
- 6ce: 21 e0 ldi r18, 0x01 ; 1
- 6d0: c2 1a sub r12, r18
- 6d2: d1 08 sbc r13, r1
- 6d4: e1 08 sbc r14, r1
- 6d6: f1 08 sbc r15, r1
- start += 1000;
- 6d8: 88 ee ldi r24, 0xE8 ; 232
- 6da: 88 0e add r8, r24
- 6dc: 83 e0 ldi r24, 0x03 ; 3
- 6de: 98 1e adc r9, r24
- 6e0: a1 1c adc r10, r1
- 6e2: b1 1c adc r11, r1
- {
- uint32_t start = micros();
-
- while (ms > 0) {
- yield();
- while ( ms > 0 && (micros() - start) >= 1000) {
- 6e4: c1 14 cp r12, r1
- 6e6: d1 04 cpc r13, r1
- 6e8: e1 04 cpc r14, r1
- 6ea: f1 04 cpc r15, r1
- 6ec: 19 f7 brne .-58 ; 0x6b4 <delay+0x26>
- 6ee: dd cf rjmp .-70 ; 0x6aa <delay+0x1c>
- ms--;
- start += 1000;
- }
- }
- }
- 6f0: ff 90 pop r15
- 6f2: ef 90 pop r14
- 6f4: df 90 pop r13
- 6f6: cf 90 pop r12
- 6f8: bf 90 pop r11
- 6fa: af 90 pop r10
- 6fc: 9f 90 pop r9
- 6fe: 8f 90 pop r8
- 700: 08 95 ret
-
- 00000702 <_ZN5Print5writeEPKhj>:
-
- // Public Methods //////////////////////////////////////////////////////////////
-
- /* default implementation: may be overridden */
- size_t Print::write(const uint8_t *buffer, size_t size)
- {
- 702: cf 92 push r12
- 704: df 92 push r13
- 706: ef 92 push r14
- 708: ff 92 push r15
- 70a: 0f 93 push r16
- 70c: 1f 93 push r17
- 70e: cf 93 push r28
- 710: df 93 push r29
- 712: 6c 01 movw r12, r24
- 714: 7a 01 movw r14, r20
- 716: 8b 01 movw r16, r22
- size_t n = 0;
- 718: c0 e0 ldi r28, 0x00 ; 0
- 71a: d0 e0 ldi r29, 0x00 ; 0
- while (size--) {
- 71c: ce 15 cp r28, r14
- 71e: df 05 cpc r29, r15
- 720: 81 f0 breq .+32 ; 0x742 <_ZN5Print5writeEPKhj+0x40>
- if (write(*buffer++)) n++;
- 722: d8 01 movw r26, r16
- 724: 6d 91 ld r22, X+
- 726: 8d 01 movw r16, r26
- 728: d6 01 movw r26, r12
- 72a: ed 91 ld r30, X+
- 72c: fc 91 ld r31, X
- 72e: 01 90 ld r0, Z+
- 730: f0 81 ld r31, Z
- 732: e0 2d mov r30, r0
- 734: c6 01 movw r24, r12
- 736: 09 95 icall
- 738: 89 2b or r24, r25
- 73a: 11 f0 breq .+4 ; 0x740 <_ZN5Print5writeEPKhj+0x3e>
- 73c: 21 96 adiw r28, 0x01 ; 1
- 73e: ee cf rjmp .-36 ; 0x71c <_ZN5Print5writeEPKhj+0x1a>
- 740: 7e 01 movw r14, r28
- else break;
- }
- return n;
- }
- 742: c7 01 movw r24, r14
- 744: df 91 pop r29
- 746: cf 91 pop r28
- 748: 1f 91 pop r17
- 74a: 0f 91 pop r16
- 74c: ff 90 pop r15
- 74e: ef 90 pop r14
- 750: df 90 pop r13
- 752: cf 90 pop r12
- 754: 08 95 ret
-
- 00000756 <_ZN5Print5flushEv>:
- size_t println(unsigned long, int = DEC);
- size_t println(double, int = 2);
- size_t println(const Printable&);
- size_t println(void);
-
- virtual void flush() { /* Empty implementation for backward compatibility */ }
- 756: 08 95 ret
-
- 00000758 <_ZN5Print17availableForWriteEv>:
- return write((const uint8_t *)buffer, size);
- }
-
- // default to zero, meaning "a single write may block"
- // should be overriden by subclasses with buffering
- virtual int availableForWrite() { return 0; }
- 758: 80 e0 ldi r24, 0x00 ; 0
- 75a: 90 e0 ldi r25, 0x00 ; 0
- 75c: 08 95 ret
-
- 0000075e <_ZN14HardwareSerial17availableForWriteEv>:
- {
- tx_buffer_index_t head;
- tx_buffer_index_t tail;
-
- TX_BUFFER_ATOMIC {
- head = _tx_buffer_head;
- 75e: fc 01 movw r30, r24
- 760: 53 8d ldd r21, Z+27 ; 0x1b
- tail = _tx_buffer_tail;
- 762: 44 8d ldd r20, Z+28 ; 0x1c
- 764: 25 2f mov r18, r21
- 766: 30 e0 ldi r19, 0x00 ; 0
- 768: 84 2f mov r24, r20
- 76a: 90 e0 ldi r25, 0x00 ; 0
- }
- if (head >= tail) return SERIAL_TX_BUFFER_SIZE - 1 - head + tail;
- 76c: 82 1b sub r24, r18
- 76e: 93 0b sbc r25, r19
- 770: 54 17 cp r21, r20
- 772: 10 f0 brcs .+4 ; 0x778 <_ZN14HardwareSerial17availableForWriteEv+0x1a>
- 774: cf 96 adiw r24, 0x3f ; 63
- 776: 08 95 ret
- return tail - head - 1;
- 778: 01 97 sbiw r24, 0x01 ; 1
- }
- 77a: 08 95 ret
-
- 0000077c <_ZN14HardwareSerial4readEv>:
- return _rx_buffer[_rx_buffer_tail];
- }
- }
-
- int HardwareSerial::read(void)
- {
- 77c: fc 01 movw r30, r24
- // if the head isn't ahead of the tail, we don't have any characters
- if (_rx_buffer_head == _rx_buffer_tail) {
- 77e: 91 8d ldd r25, Z+25 ; 0x19
- 780: 82 8d ldd r24, Z+26 ; 0x1a
- 782: 98 17 cp r25, r24
- 784: 61 f0 breq .+24 ; 0x79e <_ZN14HardwareSerial4readEv+0x22>
- return -1;
- } else {
- unsigned char c = _rx_buffer[_rx_buffer_tail];
- 786: 82 8d ldd r24, Z+26 ; 0x1a
- 788: df 01 movw r26, r30
- 78a: a8 0f add r26, r24
- 78c: b1 1d adc r27, r1
- 78e: 5d 96 adiw r26, 0x1d ; 29
- 790: 8c 91 ld r24, X
- _rx_buffer_tail = (rx_buffer_index_t)(_rx_buffer_tail + 1) % SERIAL_RX_BUFFER_SIZE;
- 792: 92 8d ldd r25, Z+26 ; 0x1a
- 794: 9f 5f subi r25, 0xFF ; 255
- 796: 9f 73 andi r25, 0x3F ; 63
- 798: 92 8f std Z+26, r25 ; 0x1a
- return c;
- 79a: 90 e0 ldi r25, 0x00 ; 0
- 79c: 08 95 ret
-
- int HardwareSerial::read(void)
- {
- // if the head isn't ahead of the tail, we don't have any characters
- if (_rx_buffer_head == _rx_buffer_tail) {
- return -1;
- 79e: 8f ef ldi r24, 0xFF ; 255
- 7a0: 9f ef ldi r25, 0xFF ; 255
- } else {
- unsigned char c = _rx_buffer[_rx_buffer_tail];
- _rx_buffer_tail = (rx_buffer_index_t)(_rx_buffer_tail + 1) % SERIAL_RX_BUFFER_SIZE;
- return c;
- }
- }
- 7a2: 08 95 ret
-
- 000007a4 <_ZN14HardwareSerial4peekEv>:
- {
- return ((unsigned int)(SERIAL_RX_BUFFER_SIZE + _rx_buffer_head - _rx_buffer_tail)) % SERIAL_RX_BUFFER_SIZE;
- }
-
- int HardwareSerial::peek(void)
- {
- 7a4: fc 01 movw r30, r24
- if (_rx_buffer_head == _rx_buffer_tail) {
- 7a6: 91 8d ldd r25, Z+25 ; 0x19
- 7a8: 82 8d ldd r24, Z+26 ; 0x1a
- 7aa: 98 17 cp r25, r24
- 7ac: 31 f0 breq .+12 ; 0x7ba <_ZN14HardwareSerial4peekEv+0x16>
- return -1;
- } else {
- return _rx_buffer[_rx_buffer_tail];
- 7ae: 82 8d ldd r24, Z+26 ; 0x1a
- 7b0: e8 0f add r30, r24
- 7b2: f1 1d adc r31, r1
- 7b4: 85 8d ldd r24, Z+29 ; 0x1d
- 7b6: 90 e0 ldi r25, 0x00 ; 0
- 7b8: 08 95 ret
- }
-
- int HardwareSerial::peek(void)
- {
- if (_rx_buffer_head == _rx_buffer_tail) {
- return -1;
- 7ba: 8f ef ldi r24, 0xFF ; 255
- 7bc: 9f ef ldi r25, 0xFF ; 255
- } else {
- return _rx_buffer[_rx_buffer_tail];
- }
- }
- 7be: 08 95 ret
-
- 000007c0 <_ZN14HardwareSerial9availableEv>:
- // clear any received data
- _rx_buffer_head = _rx_buffer_tail;
- }
-
- int HardwareSerial::available(void)
- {
- 7c0: fc 01 movw r30, r24
- return ((unsigned int)(SERIAL_RX_BUFFER_SIZE + _rx_buffer_head - _rx_buffer_tail)) % SERIAL_RX_BUFFER_SIZE;
- 7c2: 91 8d ldd r25, Z+25 ; 0x19
- 7c4: 22 8d ldd r18, Z+26 ; 0x1a
- 7c6: 89 2f mov r24, r25
- 7c8: 90 e0 ldi r25, 0x00 ; 0
- 7ca: 80 5c subi r24, 0xC0 ; 192
- 7cc: 9f 4f sbci r25, 0xFF ; 255
- 7ce: 82 1b sub r24, r18
- 7d0: 91 09 sbc r25, r1
- }
- 7d2: 8f 73 andi r24, 0x3F ; 63
- 7d4: 99 27 eor r25, r25
- 7d6: 08 95 ret
-
- 000007d8 <_Z17Serial0_availablev>:
- #endif
-
- // Function that can be weakly referenced by serialEventRun to prevent
- // pulling in this file if it's not otherwise used.
- bool Serial0_available() {
- return Serial.available();
- 7d8: 8d e3 ldi r24, 0x3D ; 61
- 7da: 91 e0 ldi r25, 0x01 ; 1
- 7dc: 0e 94 e0 03 call 0x7c0 ; 0x7c0 <_ZN14HardwareSerial9availableEv>
- 7e0: 21 e0 ldi r18, 0x01 ; 1
- 7e2: 89 2b or r24, r25
- 7e4: 09 f4 brne .+2 ; 0x7e8 <_Z17Serial0_availablev+0x10>
- 7e6: 20 e0 ldi r18, 0x00 ; 0
- }
- 7e8: 82 2f mov r24, r18
- 7ea: 08 95 ret
-
- 000007ec <_ZN14HardwareSerial17_tx_udr_empty_irqEv>:
- #endif
-
- // Actual interrupt handlers //////////////////////////////////////////////////////////////
-
- void HardwareSerial::_tx_udr_empty_irq(void)
- {
- 7ec: fc 01 movw r30, r24
- // If interrupts are enabled, there must be more data in the output
- // buffer. Send the next byte
- unsigned char c = _tx_buffer[_tx_buffer_tail];
- 7ee: 84 8d ldd r24, Z+28 ; 0x1c
- 7f0: df 01 movw r26, r30
- 7f2: a8 0f add r26, r24
- 7f4: b1 1d adc r27, r1
- 7f6: a3 5a subi r26, 0xA3 ; 163
- 7f8: bf 4f sbci r27, 0xFF ; 255
- 7fa: 2c 91 ld r18, X
- _tx_buffer_tail = (_tx_buffer_tail + 1) % SERIAL_TX_BUFFER_SIZE;
- 7fc: 84 8d ldd r24, Z+28 ; 0x1c
- 7fe: 90 e0 ldi r25, 0x00 ; 0
- 800: 01 96 adiw r24, 0x01 ; 1
- 802: 8f 73 andi r24, 0x3F ; 63
- 804: 99 27 eor r25, r25
- 806: 84 8f std Z+28, r24 ; 0x1c
-
- *_udr = c;
- 808: a6 89 ldd r26, Z+22 ; 0x16
- 80a: b7 89 ldd r27, Z+23 ; 0x17
- 80c: 2c 93 st X, r18
- // location". This makes sure flush() won't return until the bytes
- // actually got written. Other r/w bits are preserved, and zeroes
- // written to the rest.
-
- #ifdef MPCM0
- *_ucsra = ((*_ucsra) & ((1 << U2X0) | (1 << MPCM0))) | (1 << TXC0);
- 80e: a0 89 ldd r26, Z+16 ; 0x10
- 810: b1 89 ldd r27, Z+17 ; 0x11
- 812: 8c 91 ld r24, X
- 814: 83 70 andi r24, 0x03 ; 3
- 816: 80 64 ori r24, 0x40 ; 64
- 818: 8c 93 st X, r24
- #else
- *_ucsra = ((*_ucsra) & ((1 << U2X0) | (1 << TXC0)));
- #endif
-
- if (_tx_buffer_head == _tx_buffer_tail) {
- 81a: 93 8d ldd r25, Z+27 ; 0x1b
- 81c: 84 8d ldd r24, Z+28 ; 0x1c
- 81e: 98 13 cpse r25, r24
- 820: 06 c0 rjmp .+12 ; 0x82e <_ZN14HardwareSerial17_tx_udr_empty_irqEv+0x42>
- // Buffer empty, so disable interrupts
- cbi(*_ucsrb, UDRIE0);
- 822: 02 88 ldd r0, Z+18 ; 0x12
- 824: f3 89 ldd r31, Z+19 ; 0x13
- 826: e0 2d mov r30, r0
- 828: 80 81 ld r24, Z
- 82a: 8f 7d andi r24, 0xDF ; 223
- 82c: 80 83 st Z, r24
- 82e: 08 95 ret
-
- 00000830 <_ZN14HardwareSerial5writeEh>:
- // If we get here, nothing is queued anymore (DRIE is disabled) and
- // the hardware finished tranmission (TXC is set).
- }
-
- size_t HardwareSerial::write(uint8_t c)
- {
- 830: ef 92 push r14
- 832: ff 92 push r15
- 834: 0f 93 push r16
- 836: 1f 93 push r17
- 838: cf 93 push r28
- 83a: df 93 push r29
- 83c: ec 01 movw r28, r24
- _written = true;
- 83e: 81 e0 ldi r24, 0x01 ; 1
- 840: 88 8f std Y+24, r24 ; 0x18
- // If the buffer and the data register is empty, just write the byte
- // to the data register and be done. This shortcut helps
- // significantly improve the effective datarate at high (>
- // 500kbit/s) bitrates, where interrupt overhead becomes a slowdown.
- if (_tx_buffer_head == _tx_buffer_tail && bit_is_set(*_ucsra, UDRE0)) {
- 842: 9b 8d ldd r25, Y+27 ; 0x1b
- 844: 8c 8d ldd r24, Y+28 ; 0x1c
- 846: 98 13 cpse r25, r24
- 848: 05 c0 rjmp .+10 ; 0x854 <_ZN14HardwareSerial5writeEh+0x24>
- 84a: e8 89 ldd r30, Y+16 ; 0x10
- 84c: f9 89 ldd r31, Y+17 ; 0x11
- 84e: 80 81 ld r24, Z
- 850: 85 fd sbrc r24, 5
- 852: 26 c0 rjmp .+76 ; 0x8a0 <_ZN14HardwareSerial5writeEh+0x70>
- 854: f6 2e mov r15, r22
- *_ucsra = ((*_ucsra) & ((1 << U2X0) | (1 << TXC0)));
- #endif
- }
- return 1;
- }
- tx_buffer_index_t i = (_tx_buffer_head + 1) % SERIAL_TX_BUFFER_SIZE;
- 856: 0b 8d ldd r16, Y+27 ; 0x1b
- 858: 10 e0 ldi r17, 0x00 ; 0
- 85a: 0f 5f subi r16, 0xFF ; 255
- 85c: 1f 4f sbci r17, 0xFF ; 255
- 85e: 0f 73 andi r16, 0x3F ; 63
- 860: 11 27 eor r17, r17
- 862: e0 2e mov r14, r16
-
- // If the output buffer is full, there's nothing for it other than to
- // wait for the interrupt handler to empty it a bit
- while (i == _tx_buffer_tail) {
- 864: 8c 8d ldd r24, Y+28 ; 0x1c
- 866: e8 12 cpse r14, r24
- 868: 0c c0 rjmp .+24 ; 0x882 <_ZN14HardwareSerial5writeEh+0x52>
- if (bit_is_clear(SREG, SREG_I)) {
- 86a: 0f b6 in r0, 0x3f ; 63
- 86c: 07 fc sbrc r0, 7
- 86e: fa cf rjmp .-12 ; 0x864 <_ZN14HardwareSerial5writeEh+0x34>
- // Interrupts are disabled, so we'll have to poll the data
- // register empty flag ourselves. If it is set, pretend an
- // interrupt has happened and call the handler to free up
- // space for us.
- if(bit_is_set(*_ucsra, UDRE0))
- 870: e8 89 ldd r30, Y+16 ; 0x10
- 872: f9 89 ldd r31, Y+17 ; 0x11
- 874: 80 81 ld r24, Z
- 876: 85 ff sbrs r24, 5
- 878: f5 cf rjmp .-22 ; 0x864 <_ZN14HardwareSerial5writeEh+0x34>
- _tx_udr_empty_irq();
- 87a: ce 01 movw r24, r28
- 87c: 0e 94 f6 03 call 0x7ec ; 0x7ec <_ZN14HardwareSerial17_tx_udr_empty_irqEv>
- 880: f1 cf rjmp .-30 ; 0x864 <_ZN14HardwareSerial5writeEh+0x34>
- } else {
- // nop, the interrupt handler will free up space for us
- }
- }
-
- _tx_buffer[_tx_buffer_head] = c;
- 882: 8b 8d ldd r24, Y+27 ; 0x1b
- 884: fe 01 movw r30, r28
- 886: e8 0f add r30, r24
- 888: f1 1d adc r31, r1
- 88a: e3 5a subi r30, 0xA3 ; 163
- 88c: ff 4f sbci r31, 0xFF ; 255
- 88e: f0 82 st Z, r15
-
- // make atomic to prevent execution of ISR between setting the
- // head pointer and setting the interrupt flag resulting in buffer
- // retransmission
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
- 890: 9f b7 in r25, 0x3f ; 63
- return 1;
- }
-
- static __inline__ uint8_t __iCliRetVal(void)
- {
- cli();
- 892: f8 94 cli
- _tx_buffer_head = i;
- 894: 0b 8f std Y+27, r16 ; 0x1b
- sbi(*_ucsrb, UDRIE0);
- 896: ea 89 ldd r30, Y+18 ; 0x12
- 898: fb 89 ldd r31, Y+19 ; 0x13
- 89a: 80 81 ld r24, Z
- 89c: 80 62 ori r24, 0x20 ; 32
- 89e: 0a c0 rjmp .+20 ; 0x8b4 <_ZN14HardwareSerial5writeEh+0x84>
- // So writing UDR must happen first.
- // Writing UDR and clearing TC must be done atomically, otherwise
- // interrupts might delay the TXC clear so the byte written to UDR
- // is transmitted (setting TXC) before clearing TXC. Then TXC will
- // be cleared when no bytes are left, causing flush() to hang
- ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
- 8a0: 9f b7 in r25, 0x3f ; 63
- 8a2: f8 94 cli
- *_udr = c;
- 8a4: ee 89 ldd r30, Y+22 ; 0x16
- 8a6: ff 89 ldd r31, Y+23 ; 0x17
- 8a8: 60 83 st Z, r22
- #ifdef MPCM0
- *_ucsra = ((*_ucsra) & ((1 << U2X0) | (1 << MPCM0))) | (1 << TXC0);
- 8aa: e8 89 ldd r30, Y+16 ; 0x10
- 8ac: f9 89 ldd r31, Y+17 ; 0x11
- 8ae: 80 81 ld r24, Z
- 8b0: 83 70 andi r24, 0x03 ; 3
- 8b2: 80 64 ori r24, 0x40 ; 64
- 8b4: 80 83 st Z, r24
- (void)__s;
- }
-
- static __inline__ void __iRestore(const uint8_t *__s)
- {
- SREG = *__s;
- 8b6: 9f bf out 0x3f, r25 ; 63
- _tx_buffer_head = i;
- sbi(*_ucsrb, UDRIE0);
- }
-
- return 1;
- }
- 8b8: 81 e0 ldi r24, 0x01 ; 1
- 8ba: 90 e0 ldi r25, 0x00 ; 0
- 8bc: df 91 pop r29
- 8be: cf 91 pop r28
- 8c0: 1f 91 pop r17
- 8c2: 0f 91 pop r16
- 8c4: ff 90 pop r15
- 8c6: ef 90 pop r14
- 8c8: 08 95 ret
-
- 000008ca <_ZN14HardwareSerial5flushEv>:
- if (head >= tail) return SERIAL_TX_BUFFER_SIZE - 1 - head + tail;
- return tail - head - 1;
- }
-
- void HardwareSerial::flush()
- {
- 8ca: cf 93 push r28
- 8cc: df 93 push r29
- 8ce: ec 01 movw r28, r24
- // If we have never written a byte, no need to flush. This special
- // case is needed since there is no way to force the TXC (transmit
- // complete) bit to 1 during initialization
- if (!_written)
- 8d0: 88 8d ldd r24, Y+24 ; 0x18
- 8d2: 88 23 and r24, r24
- 8d4: c9 f0 breq .+50 ; 0x908 <__stack+0x9>
- return;
-
- while (bit_is_set(*_ucsrb, UDRIE0) || bit_is_clear(*_ucsra, TXC0)) {
- 8d6: ea 89 ldd r30, Y+18 ; 0x12
- 8d8: fb 89 ldd r31, Y+19 ; 0x13
- 8da: 80 81 ld r24, Z
- 8dc: 85 fd sbrc r24, 5
- 8de: 05 c0 rjmp .+10 ; 0x8ea <_ZN14HardwareSerial5flushEv+0x20>
- 8e0: a8 89 ldd r26, Y+16 ; 0x10
- 8e2: b9 89 ldd r27, Y+17 ; 0x11
- 8e4: 8c 91 ld r24, X
- 8e6: 86 fd sbrc r24, 6
- 8e8: 0f c0 rjmp .+30 ; 0x908 <__stack+0x9>
- if (bit_is_clear(SREG, SREG_I) && bit_is_set(*_ucsrb, UDRIE0))
- 8ea: 0f b6 in r0, 0x3f ; 63
- 8ec: 07 fc sbrc r0, 7
- 8ee: f5 cf rjmp .-22 ; 0x8da <_ZN14HardwareSerial5flushEv+0x10>
- 8f0: 80 81 ld r24, Z
- 8f2: 85 ff sbrs r24, 5
- 8f4: f2 cf rjmp .-28 ; 0x8da <_ZN14HardwareSerial5flushEv+0x10>
- // Interrupts are globally disabled, but the DR empty
- // interrupt should be enabled, so poll the DR empty flag to
- // prevent deadlock
- if (bit_is_set(*_ucsra, UDRE0))
- 8f6: a8 89 ldd r26, Y+16 ; 0x10
- 8f8: b9 89 ldd r27, Y+17 ; 0x11
- 8fa: 8c 91 ld r24, X
- 8fc: 85 ff sbrs r24, 5
- 8fe: ed cf rjmp .-38 ; 0x8da <_ZN14HardwareSerial5flushEv+0x10>
- _tx_udr_empty_irq();
- 900: ce 01 movw r24, r28
- 902: 0e 94 f6 03 call 0x7ec ; 0x7ec <_ZN14HardwareSerial17_tx_udr_empty_irqEv>
- 906: e7 cf rjmp .-50 ; 0x8d6 <_ZN14HardwareSerial5flushEv+0xc>
- }
- // If we get here, nothing is queued anymore (DRIE is disabled) and
- // the hardware finished tranmission (TXC is set).
- }
- 908: df 91 pop r29
- 90a: cf 91 pop r28
- 90c: 08 95 ret
-
- 0000090e <_Z14serialEventRunv>:
- #endif
-
- void serialEventRun(void)
- {
- #if defined(HAVE_HWSERIAL0)
- if (Serial0_available && serialEvent && Serial0_available()) serialEvent();
- 90e: 80 e0 ldi r24, 0x00 ; 0
- 910: 90 e0 ldi r25, 0x00 ; 0
- 912: 89 2b or r24, r25
- 914: 29 f0 breq .+10 ; 0x920 <_Z14serialEventRunv+0x12>
- 916: 0e 94 ec 03 call 0x7d8 ; 0x7d8 <_Z17Serial0_availablev>
- 91a: 81 11 cpse r24, r1
- 91c: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
- 920: 08 95 ret
-
- 00000922 <_ZN5Print5writeEPKc.constprop.14>:
- int getWriteError() { return write_error; }
- void clearWriteError() { setWriteError(0); }
-
- virtual size_t write(uint8_t) = 0;
- size_t write(const char *str) {
- if (str == NULL) return 0;
- 922: 00 97 sbiw r24, 0x00 ; 0
- 924: 69 f0 breq .+26 ; 0x940 <_ZN5Print5writeEPKc.constprop.14+0x1e>
- return write((const uint8_t *)str, strlen(str));
- 926: fc 01 movw r30, r24
- 928: 01 90 ld r0, Z+
- 92a: 00 20 and r0, r0
- 92c: e9 f7 brne .-6 ; 0x928 <_ZN5Print5writeEPKc.constprop.14+0x6>
- 92e: 31 97 sbiw r30, 0x01 ; 1
- 930: af 01 movw r20, r30
- 932: 48 1b sub r20, r24
- 934: 59 0b sbc r21, r25
- 936: bc 01 movw r22, r24
- 938: 8d e3 ldi r24, 0x3D ; 61
- 93a: 91 e0 ldi r25, 0x01 ; 1
- 93c: 0c 94 81 03 jmp 0x702 ; 0x702 <_ZN5Print5writeEPKhj>
- }
- 940: 80 e0 ldi r24, 0x00 ; 0
- 942: 90 e0 ldi r25, 0x00 ; 0
- 944: 08 95 ret
-
- 00000946 <__cxa_pure_virtual>:
- extern "C" void __cxa_deleted_virtual(void) __attribute__ ((__noreturn__));
-
- void __cxa_pure_virtual(void) {
- // We might want to write some diagnostics to uart in this case
- //std::terminate();
- abort();
- 946: 0e 94 d3 08 call 0x11a6 ; 0x11a6 <abort>
-
- 0000094a <__vector_16>:
- #if defined(TIM0_OVF_vect)
- ISR(TIM0_OVF_vect)
- #else
- ISR(TIMER0_OVF_vect)
- #endif
- {
- 94a: 1f 92 push r1
- 94c: 0f 92 push r0
- 94e: 0f b6 in r0, 0x3f ; 63
- 950: 0f 92 push r0
- 952: 11 24 eor r1, r1
- 954: 2f 93 push r18
- 956: 3f 93 push r19
- 958: 8f 93 push r24
- 95a: 9f 93 push r25
- 95c: af 93 push r26
- 95e: bf 93 push r27
- // copy these to local variables so they can be stored in registers
- // (volatile variables must be read from memory on every access)
- unsigned long m = timer0_millis;
- 960: 80 91 35 01 lds r24, 0x0135 ; 0x800135 <timer0_millis>
- 964: 90 91 36 01 lds r25, 0x0136 ; 0x800136 <timer0_millis+0x1>
- 968: a0 91 37 01 lds r26, 0x0137 ; 0x800137 <timer0_millis+0x2>
- 96c: b0 91 38 01 lds r27, 0x0138 ; 0x800138 <timer0_millis+0x3>
- unsigned char f = timer0_fract;
- 970: 30 91 34 01 lds r19, 0x0134 ; 0x800134 <timer0_fract>
-
- m += MILLIS_INC;
- f += FRACT_INC;
- 974: 23 e0 ldi r18, 0x03 ; 3
- 976: 23 0f add r18, r19
- if (f >= FRACT_MAX) {
- 978: 2d 37 cpi r18, 0x7D ; 125
- 97a: 20 f4 brcc .+8 ; 0x984 <__vector_16+0x3a>
- // copy these to local variables so they can be stored in registers
- // (volatile variables must be read from memory on every access)
- unsigned long m = timer0_millis;
- unsigned char f = timer0_fract;
-
- m += MILLIS_INC;
- 97c: 01 96 adiw r24, 0x01 ; 1
- 97e: a1 1d adc r26, r1
- 980: b1 1d adc r27, r1
- 982: 05 c0 rjmp .+10 ; 0x98e <__vector_16+0x44>
- f += FRACT_INC;
- if (f >= FRACT_MAX) {
- f -= FRACT_MAX;
- 984: 26 e8 ldi r18, 0x86 ; 134
- 986: 23 0f add r18, r19
- m += 1;
- 988: 02 96 adiw r24, 0x02 ; 2
- 98a: a1 1d adc r26, r1
- 98c: b1 1d adc r27, r1
- }
-
- timer0_fract = f;
- 98e: 20 93 34 01 sts 0x0134, r18 ; 0x800134 <timer0_fract>
- timer0_millis = m;
- 992: 80 93 35 01 sts 0x0135, r24 ; 0x800135 <timer0_millis>
- 996: 90 93 36 01 sts 0x0136, r25 ; 0x800136 <timer0_millis+0x1>
- 99a: a0 93 37 01 sts 0x0137, r26 ; 0x800137 <timer0_millis+0x2>
- 99e: b0 93 38 01 sts 0x0138, r27 ; 0x800138 <timer0_millis+0x3>
- timer0_overflow_count++;
- 9a2: 80 91 39 01 lds r24, 0x0139 ; 0x800139 <timer0_overflow_count>
- 9a6: 90 91 3a 01 lds r25, 0x013A ; 0x80013a <timer0_overflow_count+0x1>
- 9aa: a0 91 3b 01 lds r26, 0x013B ; 0x80013b <timer0_overflow_count+0x2>
- 9ae: b0 91 3c 01 lds r27, 0x013C ; 0x80013c <timer0_overflow_count+0x3>
- 9b2: 01 96 adiw r24, 0x01 ; 1
- 9b4: a1 1d adc r26, r1
- 9b6: b1 1d adc r27, r1
- 9b8: 80 93 39 01 sts 0x0139, r24 ; 0x800139 <timer0_overflow_count>
- 9bc: 90 93 3a 01 sts 0x013A, r25 ; 0x80013a <timer0_overflow_count+0x1>
- 9c0: a0 93 3b 01 sts 0x013B, r26 ; 0x80013b <timer0_overflow_count+0x2>
- 9c4: b0 93 3c 01 sts 0x013C, r27 ; 0x80013c <timer0_overflow_count+0x3>
- }
- 9c8: bf 91 pop r27
- 9ca: af 91 pop r26
- 9cc: 9f 91 pop r25
- 9ce: 8f 91 pop r24
- 9d0: 3f 91 pop r19
- 9d2: 2f 91 pop r18
- 9d4: 0f 90 pop r0
- 9d6: 0f be out 0x3f, r0 ; 63
- 9d8: 0f 90 pop r0
- 9da: 1f 90 pop r1
- 9dc: 18 95 reti
-
- 000009de <__vector_7>:
- #endif
-
-
- #ifdef USE_TIMER2
- ISR(TIMER2_COMPA_vect)
- {
- 9de: 1f 92 push r1
- 9e0: 0f 92 push r0
- 9e2: 0f b6 in r0, 0x3f ; 63
- 9e4: 0f 92 push r0
- 9e6: 11 24 eor r1, r1
- 9e8: 2f 93 push r18
- 9ea: 3f 93 push r19
- 9ec: 4f 93 push r20
- 9ee: 5f 93 push r21
- 9f0: 6f 93 push r22
- 9f2: 7f 93 push r23
- 9f4: 8f 93 push r24
- 9f6: 9f 93 push r25
- 9f8: af 93 push r26
- 9fa: bf 93 push r27
- 9fc: ef 93 push r30
- 9fe: ff 93 push r31
-
- if (timer2_toggle_count != 0)
- a00: 80 91 df 01 lds r24, 0x01DF ; 0x8001df <timer2_toggle_count>
- a04: 90 91 e0 01 lds r25, 0x01E0 ; 0x8001e0 <timer2_toggle_count+0x1>
- a08: a0 91 e1 01 lds r26, 0x01E1 ; 0x8001e1 <timer2_toggle_count+0x2>
- a0c: b0 91 e2 01 lds r27, 0x01E2 ; 0x8001e2 <timer2_toggle_count+0x3>
- a10: 89 2b or r24, r25
- a12: 8a 2b or r24, r26
- a14: 8b 2b or r24, r27
- a16: 59 f1 breq .+86 ; 0xa6e <__vector_7+0x90>
- {
- // toggle the pin
- *timer2_pin_port ^= timer2_pin_mask;
- a18: 90 91 da 01 lds r25, 0x01DA ; 0x8001da <timer2_pin_mask>
- a1c: e0 91 db 01 lds r30, 0x01DB ; 0x8001db <timer2_pin_port>
- a20: f0 91 dc 01 lds r31, 0x01DC ; 0x8001dc <timer2_pin_port+0x1>
- a24: 80 81 ld r24, Z
- a26: 89 27 eor r24, r25
- a28: 80 83 st Z, r24
-
- if (timer2_toggle_count > 0)
- a2a: 80 91 df 01 lds r24, 0x01DF ; 0x8001df <timer2_toggle_count>
- a2e: 90 91 e0 01 lds r25, 0x01E0 ; 0x8001e0 <timer2_toggle_count+0x1>
- a32: a0 91 e1 01 lds r26, 0x01E1 ; 0x8001e1 <timer2_toggle_count+0x2>
- a36: b0 91 e2 01 lds r27, 0x01E2 ; 0x8001e2 <timer2_toggle_count+0x3>
- a3a: 18 16 cp r1, r24
- a3c: 19 06 cpc r1, r25
- a3e: 1a 06 cpc r1, r26
- a40: 1b 06 cpc r1, r27
- a42: 0c f0 brlt .+2 ; 0xa46 <__vector_7+0x68>
- a44: 3d c0 rjmp .+122 ; 0xac0 <__vector_7+0xe2>
- timer2_toggle_count--;
- a46: 80 91 df 01 lds r24, 0x01DF ; 0x8001df <timer2_toggle_count>
- a4a: 90 91 e0 01 lds r25, 0x01E0 ; 0x8001e0 <timer2_toggle_count+0x1>
- a4e: a0 91 e1 01 lds r26, 0x01E1 ; 0x8001e1 <timer2_toggle_count+0x2>
- a52: b0 91 e2 01 lds r27, 0x01E2 ; 0x8001e2 <timer2_toggle_count+0x3>
- a56: 01 97 sbiw r24, 0x01 ; 1
- a58: a1 09 sbc r26, r1
- a5a: b1 09 sbc r27, r1
- a5c: 80 93 df 01 sts 0x01DF, r24 ; 0x8001df <timer2_toggle_count>
- a60: 90 93 e0 01 sts 0x01E0, r25 ; 0x8001e0 <timer2_toggle_count+0x1>
- a64: a0 93 e1 01 sts 0x01E1, r26 ; 0x8001e1 <timer2_toggle_count+0x2>
- a68: b0 93 e2 01 sts 0x01E2, r27 ; 0x8001e2 <timer2_toggle_count+0x3>
- a6c: 29 c0 rjmp .+82 ; 0xac0 <__vector_7+0xe2>
- else
- {
- // need to call noTone() so that the tone_pins[] entry is reset, so the
- // timer gets initialized next time we call tone().
- // XXX: this assumes timer 2 is always the first one used.
- noTone(tone_pins[0]);
- a6e: 80 91 00 01 lds r24, 0x0100 ; 0x800100 <__data_start>
- {
- int8_t _timer = -1;
-
- for (int i = 0; i < AVAILABLE_TONE_PINS; i++) {
- if (tone_pins[i] == _pin) {
- _timer = pgm_read_byte(tone_pin_to_timer_PGM + i);
- a72: ec e7 ldi r30, 0x7C ; 124
- a74: f0 e0 ldi r31, 0x00 ; 0
- a76: e4 91 lpm r30, Z
- tone_pins[i] = 255;
- a78: 9f ef ldi r25, 0xFF ; 255
- a7a: 90 93 00 01 sts 0x0100, r25 ; 0x800100 <__data_start>
- // XXX: this function only works properly for timer 2 (the only one we use
- // currently). for the others, it should end the tone, but won't restore
- // proper PWM functionality for the timer.
- void disableTimer(uint8_t _timer)
- {
- switch (_timer)
- a7e: e1 30 cpi r30, 0x01 ; 1
- a80: b9 f0 breq .+46 ; 0xab0 <__vector_7+0xd2>
- a82: 98 f0 brcs .+38 ; 0xaaa <__vector_7+0xcc>
- a84: e2 30 cpi r30, 0x02 ; 2
- a86: c9 f4 brne .+50 ; 0xaba <__vector_7+0xdc>
- break;
- #endif
-
- case 2:
- #if defined(TIMSK2) && defined(OCIE2A)
- bitWrite(TIMSK2, OCIE2A, 0); // disable interrupt
- a88: 90 91 70 00 lds r25, 0x0070 ; 0x800070 <__TEXT_REGION_LENGTH__+0x7e0070>
- a8c: 9d 7f andi r25, 0xFD ; 253
- a8e: 90 93 70 00 sts 0x0070, r25 ; 0x800070 <__TEXT_REGION_LENGTH__+0x7e0070>
- #endif
- #if defined(TCCR2A) && defined(WGM20)
- TCCR2A = (1 << WGM20);
- a92: 91 e0 ldi r25, 0x01 ; 1
- a94: 90 93 b0 00 sts 0x00B0, r25 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- #endif
- #if defined(TCCR2B) && defined(CS22)
- TCCR2B = (TCCR2B & 0b11111000) | (1 << CS22);
- a98: 90 91 b1 00 lds r25, 0x00B1 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
- a9c: 98 7f andi r25, 0xF8 ; 248
- a9e: 94 60 ori r25, 0x04 ; 4
- aa0: 90 93 b1 00 sts 0x00B1, r25 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
- #endif
- #if defined(OCR2A)
- OCR2A = 0;
- aa4: 10 92 b3 00 sts 0x00B3, r1 ; 0x8000b3 <__TEXT_REGION_LENGTH__+0x7e00b3>
- aa8: 08 c0 rjmp .+16 ; 0xaba <__vector_7+0xdc>
- {
- switch (_timer)
- {
- case 0:
- #if defined(TIMSK0)
- TIMSK0 = 0;
- aaa: 10 92 6e 00 sts 0x006E, r1 ; 0x80006e <__TEXT_REGION_LENGTH__+0x7e006e>
- aae: 05 c0 rjmp .+10 ; 0xaba <__vector_7+0xdc>
- #endif
- break;
-
- #if defined(TIMSK1) && defined(OCIE1A)
- case 1:
- bitWrite(TIMSK1, OCIE1A, 0);
- ab0: 90 91 6f 00 lds r25, 0x006F ; 0x80006f <__TEXT_REGION_LENGTH__+0x7e006f>
- ab4: 9d 7f andi r25, 0xFD ; 253
- ab6: 90 93 6f 00 sts 0x006F, r25 ; 0x80006f <__TEXT_REGION_LENGTH__+0x7e006f>
- }
- }
-
- disableTimer(_timer);
-
- digitalWrite(_pin, 0);
- aba: 60 e0 ldi r22, 0x00 ; 0
- abc: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- // XXX: this assumes timer 2 is always the first one used.
- noTone(tone_pins[0]);
- // disableTimer(2);
- // *timer2_pin_port &= ~(timer2_pin_mask); // keep pin low after stop
- }
- }
- ac0: ff 91 pop r31
- ac2: ef 91 pop r30
- ac4: bf 91 pop r27
- ac6: af 91 pop r26
- ac8: 9f 91 pop r25
- aca: 8f 91 pop r24
- acc: 7f 91 pop r23
- ace: 6f 91 pop r22
- ad0: 5f 91 pop r21
- ad2: 4f 91 pop r20
- ad4: 3f 91 pop r19
- ad6: 2f 91 pop r18
- ad8: 0f 90 pop r0
- ada: 0f be out 0x3f, r0 ; 63
- adc: 0f 90 pop r0
- ade: 1f 90 pop r1
- ae0: 18 95 reti
-
- 00000ae2 <__vector_19>:
- #elif defined(USART_UDRE_vect)
- ISR(USART_UDRE_vect)
- #else
- #error "Don't know what the Data Register Empty vector is called for Serial"
- #endif
- {
- ae2: 1f 92 push r1
- ae4: 0f 92 push r0
- ae6: 0f b6 in r0, 0x3f ; 63
- ae8: 0f 92 push r0
- aea: 11 24 eor r1, r1
- aec: 2f 93 push r18
- aee: 3f 93 push r19
- af0: 4f 93 push r20
- af2: 5f 93 push r21
- af4: 6f 93 push r22
- af6: 7f 93 push r23
- af8: 8f 93 push r24
- afa: 9f 93 push r25
- afc: af 93 push r26
- afe: bf 93 push r27
- b00: ef 93 push r30
- b02: ff 93 push r31
- Serial._tx_udr_empty_irq();
- b04: 8d e3 ldi r24, 0x3D ; 61
- b06: 91 e0 ldi r25, 0x01 ; 1
- b08: 0e 94 f6 03 call 0x7ec ; 0x7ec <_ZN14HardwareSerial17_tx_udr_empty_irqEv>
- }
- b0c: ff 91 pop r31
- b0e: ef 91 pop r30
- b10: bf 91 pop r27
- b12: af 91 pop r26
- b14: 9f 91 pop r25
- b16: 8f 91 pop r24
- b18: 7f 91 pop r23
- b1a: 6f 91 pop r22
- b1c: 5f 91 pop r21
- b1e: 4f 91 pop r20
- b20: 3f 91 pop r19
- b22: 2f 91 pop r18
- b24: 0f 90 pop r0
- b26: 0f be out 0x3f, r0 ; 63
- b28: 0f 90 pop r0
- b2a: 1f 90 pop r1
- b2c: 18 95 reti
-
- 00000b2e <__vector_18>:
- #elif defined(USART_RXC_vect)
- ISR(USART_RXC_vect) // ATmega8
- #else
- #error "Don't know what the Data Received vector is called for Serial"
- #endif
- {
- b2e: 1f 92 push r1
- b30: 0f 92 push r0
- b32: 0f b6 in r0, 0x3f ; 63
- b34: 0f 92 push r0
- b36: 11 24 eor r1, r1
- b38: 2f 93 push r18
- b3a: 8f 93 push r24
- b3c: 9f 93 push r25
- b3e: ef 93 push r30
- b40: ff 93 push r31
-
- // Actual interrupt handlers //////////////////////////////////////////////////////////////
-
- void HardwareSerial::_rx_complete_irq(void)
- {
- if (bit_is_clear(*_ucsra, UPE0)) {
- b42: e0 91 4d 01 lds r30, 0x014D ; 0x80014d <Serial+0x10>
- b46: f0 91 4e 01 lds r31, 0x014E ; 0x80014e <Serial+0x11>
- b4a: 80 81 ld r24, Z
- b4c: e0 91 53 01 lds r30, 0x0153 ; 0x800153 <Serial+0x16>
- b50: f0 91 54 01 lds r31, 0x0154 ; 0x800154 <Serial+0x17>
- b54: 82 fd sbrc r24, 2
- b56: 12 c0 rjmp .+36 ; 0xb7c <__vector_18+0x4e>
- // No Parity error, read byte and store it in the buffer if there is
- // room
- unsigned char c = *_udr;
- b58: 90 81 ld r25, Z
- rx_buffer_index_t i = (unsigned int)(_rx_buffer_head + 1) % SERIAL_RX_BUFFER_SIZE;
- b5a: 80 91 56 01 lds r24, 0x0156 ; 0x800156 <Serial+0x19>
- b5e: 8f 5f subi r24, 0xFF ; 255
- b60: 8f 73 andi r24, 0x3F ; 63
-
- // if we should be storing the received character into the location
- // just before the tail (meaning that the head would advance to the
- // current location of the tail), we're about to overflow the buffer
- // and so we don't write the character or advance the head.
- if (i != _rx_buffer_tail) {
- b62: 20 91 57 01 lds r18, 0x0157 ; 0x800157 <Serial+0x1a>
- b66: 82 17 cp r24, r18
- b68: 51 f0 breq .+20 ; 0xb7e <__vector_18+0x50>
- _rx_buffer[_rx_buffer_head] = c;
- b6a: e0 91 56 01 lds r30, 0x0156 ; 0x800156 <Serial+0x19>
- b6e: f0 e0 ldi r31, 0x00 ; 0
- b70: e3 5c subi r30, 0xC3 ; 195
- b72: fe 4f sbci r31, 0xFE ; 254
- b74: 95 8f std Z+29, r25 ; 0x1d
- _rx_buffer_head = i;
- b76: 80 93 56 01 sts 0x0156, r24 ; 0x800156 <Serial+0x19>
- b7a: 01 c0 rjmp .+2 ; 0xb7e <__vector_18+0x50>
- }
- } else {
- // Parity error, read byte but discard it
- *_udr;
- b7c: 80 81 ld r24, Z
- Serial._rx_complete_irq();
- }
- b7e: ff 91 pop r31
- b80: ef 91 pop r30
- b82: 9f 91 pop r25
- b84: 8f 91 pop r24
- b86: 2f 91 pop r18
- b88: 0f 90 pop r0
- b8a: 0f be out 0x3f, r0 ; 63
- b8c: 0f 90 pop r0
- b8e: 1f 90 pop r1
- b90: 18 95 reti
-
- 00000b92 <main>:
-
- void setupUSB() __attribute__((weak));
- void setupUSB() { }
-
- int main(void)
- {
- b92: cf 93 push r28
- b94: df 93 push r29
- b96: cd b7 in r28, 0x3d ; 61
- b98: de b7 in r29, 0x3e ; 62
- b9a: a1 97 sbiw r28, 0x21 ; 33
- b9c: 0f b6 in r0, 0x3f ; 63
- b9e: f8 94 cli
- ba0: de bf out 0x3e, r29 ; 62
- ba2: 0f be out 0x3f, r0 ; 63
- ba4: cd bf out 0x3d, r28 ; 61
-
- void init()
- {
- // this needs to be called before setup() or some functions won't
- // work there
- sei();
- ba6: 78 94 sei
-
- // on the ATmega168, timer 0 is also used for fast hardware pwm
- // (using phase-correct PWM would mean that timer 0 overflowed half as often
- // resulting in different millis() behavior on the ATmega8 and ATmega168)
- #if defined(TCCR0A) && defined(WGM01)
- sbi(TCCR0A, WGM01);
- ba8: 84 b5 in r24, 0x24 ; 36
- baa: 82 60 ori r24, 0x02 ; 2
- bac: 84 bd out 0x24, r24 ; 36
- sbi(TCCR0A, WGM00);
- bae: 84 b5 in r24, 0x24 ; 36
- bb0: 81 60 ori r24, 0x01 ; 1
- bb2: 84 bd out 0x24, r24 ; 36
- // this combination is for the standard atmega8
- sbi(TCCR0, CS01);
- sbi(TCCR0, CS00);
- #elif defined(TCCR0B) && defined(CS01) && defined(CS00)
- // this combination is for the standard 168/328/1280/2560
- sbi(TCCR0B, CS01);
- bb4: 85 b5 in r24, 0x25 ; 37
- bb6: 82 60 ori r24, 0x02 ; 2
- bb8: 85 bd out 0x25, r24 ; 37
- sbi(TCCR0B, CS00);
- bba: 85 b5 in r24, 0x25 ; 37
- bbc: 81 60 ori r24, 0x01 ; 1
- bbe: 85 bd out 0x25, r24 ; 37
-
- // enable timer 0 overflow interrupt
- #if defined(TIMSK) && defined(TOIE0)
- sbi(TIMSK, TOIE0);
- #elif defined(TIMSK0) && defined(TOIE0)
- sbi(TIMSK0, TOIE0);
- bc0: 80 91 6e 00 lds r24, 0x006E ; 0x80006e <__TEXT_REGION_LENGTH__+0x7e006e>
- bc4: 81 60 ori r24, 0x01 ; 1
- bc6: 80 93 6e 00 sts 0x006E, r24 ; 0x80006e <__TEXT_REGION_LENGTH__+0x7e006e>
- // this is better for motors as it ensures an even waveform
- // note, however, that fast pwm mode can achieve a frequency of up
- // 8 MHz (with a 16 MHz clock) at 50% duty cycle
-
- #if defined(TCCR1B) && defined(CS11) && defined(CS10)
- TCCR1B = 0;
- bca: 10 92 81 00 sts 0x0081, r1 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
-
- // set timer 1 prescale factor to 64
- sbi(TCCR1B, CS11);
- bce: 80 91 81 00 lds r24, 0x0081 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- bd2: 82 60 ori r24, 0x02 ; 2
- bd4: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- #if F_CPU >= 8000000L
- sbi(TCCR1B, CS10);
- bd8: 80 91 81 00 lds r24, 0x0081 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- bdc: 81 60 ori r24, 0x01 ; 1
- bde: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- sbi(TCCR1, CS10);
- #endif
- #endif
- // put timer 1 in 8-bit phase correct pwm mode
- #if defined(TCCR1A) && defined(WGM10)
- sbi(TCCR1A, WGM10);
- be2: 80 91 80 00 lds r24, 0x0080 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
- be6: 81 60 ori r24, 0x01 ; 1
- be8: 80 93 80 00 sts 0x0080, r24 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
-
- // set timer 2 prescale factor to 64
- #if defined(TCCR2) && defined(CS22)
- sbi(TCCR2, CS22);
- #elif defined(TCCR2B) && defined(CS22)
- sbi(TCCR2B, CS22);
- bec: 80 91 b1 00 lds r24, 0x00B1 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
- bf0: 84 60 ori r24, 0x04 ; 4
- bf2: 80 93 b1 00 sts 0x00B1, r24 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
-
- // configure timer 2 for phase correct pwm (8-bit)
- #if defined(TCCR2) && defined(WGM20)
- sbi(TCCR2, WGM20);
- #elif defined(TCCR2A) && defined(WGM20)
- sbi(TCCR2A, WGM20);
- bf6: 80 91 b0 00 lds r24, 0x00B0 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- bfa: 81 60 ori r24, 0x01 ; 1
- bfc: 80 93 b0 00 sts 0x00B0, r24 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- #endif
-
- #if defined(ADCSRA)
- // set a2d prescaler so we are inside the desired 50-200 KHz range.
- #if F_CPU >= 16000000 // 16 MHz / 128 = 125 KHz
- sbi(ADCSRA, ADPS2);
- c00: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- c04: 84 60 ori r24, 0x04 ; 4
- c06: 80 93 7a 00 sts 0x007A, r24 ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- sbi(ADCSRA, ADPS1);
- c0a: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- c0e: 82 60 ori r24, 0x02 ; 2
- c10: 80 93 7a 00 sts 0x007A, r24 ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- sbi(ADCSRA, ADPS0);
- c14: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- c18: 81 60 ori r24, 0x01 ; 1
- c1a: 80 93 7a 00 sts 0x007A, r24 ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- cbi(ADCSRA, ADPS2);
- cbi(ADCSRA, ADPS1);
- sbi(ADCSRA, ADPS0);
- #endif
- // enable a2d conversions
- sbi(ADCSRA, ADEN);
- c1e: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- c22: 80 68 ori r24, 0x80 ; 128
- c24: 80 93 7a 00 sts 0x007A, r24 ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- // here so they can be used as normal digital i/o; they will be
- // reconnected in Serial.begin()
- #if defined(UCSRB)
- UCSRB = 0;
- #elif defined(UCSR0B)
- UCSR0B = 0;
- c28: 10 92 c1 00 sts 0x00C1, r1 ; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
-
- void HardwareSerial::begin(unsigned long baud, byte config)
- {
- // Try u2x mode first
- uint16_t baud_setting = (F_CPU / 4 / baud - 1) / 2;
- *_ucsra = 1 << U2X0;
- c2c: e0 91 4d 01 lds r30, 0x014D ; 0x80014d <Serial+0x10>
- c30: f0 91 4e 01 lds r31, 0x014E ; 0x80014e <Serial+0x11>
- c34: 82 e0 ldi r24, 0x02 ; 2
- c36: 80 83 st Z, r24
- *_ucsra = 0;
- baud_setting = (F_CPU / 8 / baud - 1) / 2;
- }
-
- // assign the baud_setting, a.k.a. ubrr (USART Baud Rate Register)
- *_ubrrh = baud_setting >> 8;
- c38: e0 91 49 01 lds r30, 0x0149 ; 0x800149 <Serial+0xc>
- c3c: f0 91 4a 01 lds r31, 0x014A ; 0x80014a <Serial+0xd>
- c40: 10 82 st Z, r1
- *_ubrrl = baud_setting;
- c42: e0 91 4b 01 lds r30, 0x014B ; 0x80014b <Serial+0xe>
- c46: f0 91 4c 01 lds r31, 0x014C ; 0x80014c <Serial+0xf>
- c4a: 8f ec ldi r24, 0xCF ; 207
- c4c: 80 83 st Z, r24
-
- _written = false;
- c4e: 10 92 55 01 sts 0x0155, r1 ; 0x800155 <Serial+0x18>
-
- //set the data bits, parity, and stop bits
- #if defined(__AVR_ATmega8__)
- config |= 0x80; // select UCSRC register (shared with UBRRH)
- #endif
- *_ucsrc = config;
- c52: e0 91 51 01 lds r30, 0x0151 ; 0x800151 <Serial+0x14>
- c56: f0 91 52 01 lds r31, 0x0152 ; 0x800152 <Serial+0x15>
- c5a: 86 e0 ldi r24, 0x06 ; 6
- c5c: 80 83 st Z, r24
-
- sbi(*_ucsrb, RXEN0);
- c5e: e0 91 4f 01 lds r30, 0x014F ; 0x80014f <Serial+0x12>
- c62: f0 91 50 01 lds r31, 0x0150 ; 0x800150 <Serial+0x13>
- c66: 80 81 ld r24, Z
- c68: 80 61 ori r24, 0x10 ; 16
- c6a: 80 83 st Z, r24
- sbi(*_ucsrb, TXEN0);
- c6c: e0 91 4f 01 lds r30, 0x014F ; 0x80014f <Serial+0x12>
- c70: f0 91 50 01 lds r31, 0x0150 ; 0x800150 <Serial+0x13>
- c74: 80 81 ld r24, Z
- c76: 88 60 ori r24, 0x08 ; 8
- c78: 80 83 st Z, r24
- sbi(*_ucsrb, RXCIE0);
- c7a: e0 91 4f 01 lds r30, 0x014F ; 0x80014f <Serial+0x12>
- c7e: f0 91 50 01 lds r31, 0x0150 ; 0x800150 <Serial+0x13>
- c82: 80 81 ld r24, Z
- c84: 80 68 ori r24, 0x80 ; 128
- c86: 80 83 st Z, r24
- cbi(*_ucsrb, UDRIE0);
- c88: e0 91 4f 01 lds r30, 0x014F ; 0x80014f <Serial+0x12>
- c8c: f0 91 50 01 lds r31, 0x0150 ; 0x800150 <Serial+0x13>
- c90: 80 81 ld r24, Z
- c92: 8f 7d andi r24, 0xDF ; 223
- c94: 80 83 st Z, r24
-
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
-
- pinMode(LED1, OUTPUT);
- c96: 8e e0 ldi r24, 0x0E ; 14
- c98: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- pinMode(LED2, OUTPUT);
- c9c: 8f e0 ldi r24, 0x0F ; 15
- c9e: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- pinMode(LED3, OUTPUT);
- ca2: 80 e1 ldi r24, 0x10 ; 16
- ca4: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- pinMode(LED4, OUTPUT);
- ca8: 81 e1 ldi r24, 0x11 ; 17
- caa: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- pinMode(LED5, OUTPUT);
- cae: 82 e1 ldi r24, 0x12 ; 18
- cb0: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- pinMode(LED6, OUTPUT);
- cb4: 83 e1 ldi r24, 0x13 ; 19
- cb6: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- pinMode(LED7, OUTPUT);
- cba: 87 e0 ldi r24, 0x07 ; 7
- cbc: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- pinMode(LED8, OUTPUT);
- cc0: 88 e0 ldi r24, 0x08 ; 8
- cc2: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
-
- pinMode(SPKR, OUTPUT);
- cc6: 85 e0 ldi r24, 0x05 ; 5
- cc8: 0e 94 88 00 call 0x110 ; 0x110 <pinMode.constprop.17>
- return write(s.c_str(), s.length());
- }
-
- size_t Print::print(const char str[])
- {
- return write(str);
- ccc: 83 e1 ldi r24, 0x13 ; 19
- cce: 91 e0 ldi r25, 0x01 ; 1
- cd0: 0e 94 91 04 call 0x922 ; 0x922 <_ZN5Print5writeEPKc.constprop.14>
- return x.printTo(*this);
- }
-
- size_t Print::println(void)
- {
- return write("\r\n");
- cd4: 88 e2 ldi r24, 0x28 ; 40
- cd6: 91 e0 ldi r25, 0x01 ; 1
- cd8: 0e 94 91 04 call 0x922 ; 0x922 <_ZN5Print5writeEPKc.constprop.14>
- return write(s.c_str(), s.length());
- }
-
- size_t Print::print(const char str[])
- {
- return write(str);
- cdc: 8b e2 ldi r24, 0x2B ; 43
- cde: 91 e0 ldi r25, 0x01 ; 1
- ce0: 0e 94 91 04 call 0x922 ; 0x922 <_ZN5Print5writeEPKc.constprop.14>
- return x.printTo(*this);
- }
-
- size_t Print::println(void)
- {
- return write("\r\n");
- ce4: 88 e2 ldi r24, 0x28 ; 40
- ce6: 91 e0 ldi r25, 0x01 ; 1
- ce8: 0e 94 91 04 call 0x922 ; 0x922 <_ZN5Print5writeEPKc.constprop.14>
-
- Serial.println("Flammable Gas Sensor");
- Serial.println("Begin");
-
- int yy = 0;
- for(yy=200;yy<1200;yy+=150){
- cec: 08 ec ldi r16, 0xC8 ; 200
- cee: 10 e0 ldi r17, 0x00 ; 0
- tone(SPKR,yy,100);
- cf0: c8 01 movw r24, r16
- cf2: 0e 94 a7 00 call 0x14e ; 0x14e <_Z4tonehjm.constprop.15>
- delay(100);
- cf6: 64 e6 ldi r22, 0x64 ; 100
- cf8: 70 e0 ldi r23, 0x00 ; 0
- cfa: 80 e0 ldi r24, 0x00 ; 0
- cfc: 90 e0 ldi r25, 0x00 ; 0
- cfe: 0e 94 47 03 call 0x68e ; 0x68e <delay>
-
- Serial.println("Flammable Gas Sensor");
- Serial.println("Begin");
-
- int yy = 0;
- for(yy=200;yy<1200;yy+=150){
- d02: 0a 56 subi r16, 0x6A ; 106
- d04: 1f 4f sbci r17, 0xFF ; 255
- d06: 02 3e cpi r16, 0xE2 ; 226
- d08: 24 e0 ldi r18, 0x04 ; 4
- d0a: 12 07 cpc r17, r18
- d0c: 89 f7 brne .-30 ; 0xcf0 <main+0x15e>
- tone(SPKR,yy,100);
- delay(50);
- }*/
-
-
- digitalWrite(LED1,HIGH);
- d0e: 61 e0 ldi r22, 0x01 ; 1
- d10: 8e e0 ldi r24, 0x0E ; 14
- d12: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,HIGH);
- d16: 61 e0 ldi r22, 0x01 ; 1
- d18: 8f e0 ldi r24, 0x0F ; 15
- d1a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,HIGH);
- d1e: 61 e0 ldi r22, 0x01 ; 1
- d20: 80 e1 ldi r24, 0x10 ; 16
- d22: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,HIGH);
- d26: 61 e0 ldi r22, 0x01 ; 1
- d28: 81 e1 ldi r24, 0x11 ; 17
- d2a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
-
- delay(500);
- d2e: 64 ef ldi r22, 0xF4 ; 244
- d30: 71 e0 ldi r23, 0x01 ; 1
- d32: 80 e0 ldi r24, 0x00 ; 0
- d34: 90 e0 ldi r25, 0x00 ; 0
- d36: 0e 94 47 03 call 0x68e ; 0x68e <delay>
- digitalWrite(LED1,LOW);
- d3a: 60 e0 ldi r22, 0x00 ; 0
- d3c: 8e e0 ldi r24, 0x0E ; 14
- d3e: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,LOW);
- d42: 60 e0 ldi r22, 0x00 ; 0
- d44: 8f e0 ldi r24, 0x0F ; 15
- d46: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,LOW);
- d4a: 60 e0 ldi r22, 0x00 ; 0
- d4c: 80 e1 ldi r24, 0x10 ; 16
- d4e: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,LOW);
- d52: 60 e0 ldi r22, 0x00 ; 0
- d54: 81 e1 ldi r24, 0x11 ; 17
- d56: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
-
- digitalWrite(LED5,HIGH);
- d5a: 61 e0 ldi r22, 0x01 ; 1
- d5c: 82 e1 ldi r24, 0x12 ; 18
- d5e: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,HIGH);
- d62: 61 e0 ldi r22, 0x01 ; 1
- d64: 83 e1 ldi r24, 0x13 ; 19
- d66: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,HIGH);
- d6a: 61 e0 ldi r22, 0x01 ; 1
- d6c: 87 e0 ldi r24, 0x07 ; 7
- d6e: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,HIGH);
- d72: 61 e0 ldi r22, 0x01 ; 1
- d74: 88 e0 ldi r24, 0x08 ; 8
- d76: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
-
- delay(500);
- d7a: 64 ef ldi r22, 0xF4 ; 244
- d7c: 71 e0 ldi r23, 0x01 ; 1
- d7e: 80 e0 ldi r24, 0x00 ; 0
- d80: 90 e0 ldi r25, 0x00 ; 0
- d82: 0e 94 47 03 call 0x68e ; 0x68e <delay>
- digitalWrite(LED5,LOW);
- d86: 60 e0 ldi r22, 0x00 ; 0
- d88: 82 e1 ldi r24, 0x12 ; 18
- d8a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,LOW);
- d8e: 60 e0 ldi r22, 0x00 ; 0
- d90: 83 e1 ldi r24, 0x13 ; 19
- d92: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,LOW);
- d96: 60 e0 ldi r22, 0x00 ; 0
- d98: 87 e0 ldi r24, 0x07 ; 7
- d9a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,LOW);
- d9e: 60 e0 ldi r22, 0x00 ; 0
- da0: 88 e0 ldi r24, 0x08 ; 8
- da2: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- // to 0 (the default).
- #if defined(ADMUX)
- #if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
- ADMUX = (analog_reference << 4) | (pin & 0x07);
- #else
- ADMUX = (analog_reference << 6) | (pin & 0x07);
- da6: 86 e4 ldi r24, 0x46 ; 70
- da8: b8 2e mov r11, r24
-
- // prevent crash if called with base == 1
- if (base < 2) base = 10;
-
- do {
- char c = n % base;
- daa: 9a e0 ldi r25, 0x0A ; 10
- dac: c9 2e mov r12, r25
- dae: d1 2c mov r13, r1
- db0: e1 2c mov r14, r1
- db2: f1 2c mov r15, r1
- db4: b0 92 7c 00 sts 0x007C, r11 ; 0x80007c <__TEXT_REGION_LENGTH__+0x7e007c>
- // without a delay, we seem to read from the wrong channel
- //delay(1);
-
- #if defined(ADCSRA) && defined(ADCL)
- // start the conversion
- sbi(ADCSRA, ADSC);
- db8: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- dbc: 80 64 ori r24, 0x40 ; 64
- dbe: 80 93 7a 00 sts 0x007A, r24 ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
-
- // ADSC is cleared when the conversion finishes
- while (bit_is_set(ADCSRA, ADSC));
- dc2: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- dc6: 86 fd sbrc r24, 6
- dc8: fc cf rjmp .-8 ; 0xdc2 <main+0x230>
-
- // we have to read ADCL first; doing so locks both ADCL
- // and ADCH until ADCH is read. reading ADCL second would
- // cause the results of each conversion to be discarded,
- // as ADCL and ADCH would be locked when it completed.
- low = ADCL;
- dca: 20 91 78 00 lds r18, 0x0078 ; 0x800078 <__TEXT_REGION_LENGTH__+0x7e0078>
- high = ADCH;
- dce: 80 91 79 00 lds r24, 0x0079 ; 0x800079 <__TEXT_REGION_LENGTH__+0x7e0079>
- }
-
- void loop() {
- // put your main code here, to run repeatedly:
-
- gasVAL = analogRead(Sensor);
- dd2: 30 e0 ldi r19, 0x00 ; 0
- dd4: 38 2b or r19, r24
- dd6: 30 93 33 01 sts 0x0133, r19 ; 0x800133 <__data_end+0x1>
- dda: 20 93 32 01 sts 0x0132, r18 ; 0x800132 <__data_end>
- return print((long) n, base);
- }
-
- size_t Print::print(unsigned int n, int base)
- {
- return print((unsigned long) n, base);
- dde: 40 e0 ldi r20, 0x00 ; 0
- de0: 50 e0 ldi r21, 0x00 ; 0
- size_t Print::printNumber(unsigned long n, uint8_t base)
- {
- char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
- char *str = &buf[sizeof(buf) - 1];
-
- *str = '\0';
- de2: 19 a2 std Y+33, r1 ; 0x21
- de4: 8e 01 movw r16, r28
- de6: 0f 5d subi r16, 0xDF ; 223
- de8: 1f 4f sbci r17, 0xFF ; 255
- // prevent crash if called with base == 1
- if (base < 2) base = 10;
-
- do {
- char c = n % base;
- n /= base;
- dea: ca 01 movw r24, r20
- dec: b9 01 movw r22, r18
- dee: a7 01 movw r20, r14
- df0: 96 01 movw r18, r12
- df2: 0e 94 7d 08 call 0x10fa ; 0x10fa <__udivmodsi4>
-
- *--str = c < 10 ? c + '0' : c + 'A' - 10;
- df6: 60 5d subi r22, 0xD0 ; 208
- df8: f8 01 movw r30, r16
- dfa: 62 93 st -Z, r22
- dfc: 8f 01 movw r16, r30
- *str = '\0';
-
- // prevent crash if called with base == 1
- if (base < 2) base = 10;
-
- do {
- dfe: 21 15 cp r18, r1
- e00: 31 05 cpc r19, r1
- e02: 41 05 cpc r20, r1
- e04: 51 05 cpc r21, r1
- e06: 89 f7 brne .-30 ; 0xdea <main+0x258>
- n /= base;
-
- *--str = c < 10 ? c + '0' : c + 'A' - 10;
- } while(n);
-
- return write(str);
- e08: cf 01 movw r24, r30
- e0a: 0e 94 91 04 call 0x922 ; 0x922 <_ZN5Print5writeEPKc.constprop.14>
- return x.printTo(*this);
- }
-
- size_t Print::println(void)
- {
- return write("\r\n");
- e0e: 88 e2 ldi r24, 0x28 ; 40
- e10: 91 e0 ldi r25, 0x01 ; 1
- e12: 0e 94 91 04 call 0x922 ; 0x922 <_ZN5Print5writeEPKc.constprop.14>
- Serial.println(gasVAL);
- lightLED(gasVAL);
- e16: 80 91 32 01 lds r24, 0x0132 ; 0x800132 <__data_end>
- e1a: 90 91 33 01 lds r25, 0x0133 ; 0x800133 <__data_end+0x1>
-
- }
-
- void lightLED( uint16_t reading){
-
- if (reading >= 750){
- e1e: 8e 3e cpi r24, 0xEE ; 238
- e20: f2 e0 ldi r31, 0x02 ; 2
- e22: 9f 07 cpc r25, r31
- e24: 18 f1 brcs .+70 ; 0xe6c <main+0x2da>
- digitalWrite(LED1,HIGH);
- e26: 61 e0 ldi r22, 0x01 ; 1
- e28: 8e e0 ldi r24, 0x0E ; 14
- e2a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,HIGH);
- e2e: 61 e0 ldi r22, 0x01 ; 1
- e30: 8f e0 ldi r24, 0x0F ; 15
- e32: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,HIGH);
- e36: 61 e0 ldi r22, 0x01 ; 1
- e38: 80 e1 ldi r24, 0x10 ; 16
- e3a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,HIGH);
- e3e: 61 e0 ldi r22, 0x01 ; 1
- e40: 81 e1 ldi r24, 0x11 ; 17
- e42: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED5,HIGH);
- e46: 61 e0 ldi r22, 0x01 ; 1
- e48: 82 e1 ldi r24, 0x12 ; 18
- e4a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,HIGH);
- e4e: 61 e0 ldi r22, 0x01 ; 1
- e50: 83 e1 ldi r24, 0x13 ; 19
- e52: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,HIGH);
- e56: 61 e0 ldi r22, 0x01 ; 1
- e58: 87 e0 ldi r24, 0x07 ; 7
- e5a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,HIGH);
- e5e: 61 e0 ldi r22, 0x01 ; 1
- e60: 88 e0 ldi r24, 0x08 ; 8
- e62: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- tone(SPKR,750,100);
- e66: 8e ee ldi r24, 0xEE ; 238
- e68: 92 e0 ldi r25, 0x02 ; 2
- e6a: 26 c0 rjmp .+76 ; 0xeb8 <main+0x326>
- }
- else if (reading >= 700){
- e6c: 8c 3b cpi r24, 0xBC ; 188
- e6e: 22 e0 ldi r18, 0x02 ; 2
- e70: 92 07 cpc r25, r18
- e72: 28 f1 brcs .+74 ; 0xebe <main+0x32c>
- digitalWrite(LED1,HIGH);
- e74: 61 e0 ldi r22, 0x01 ; 1
- e76: 8e e0 ldi r24, 0x0E ; 14
- e78: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,HIGH);
- e7c: 61 e0 ldi r22, 0x01 ; 1
- e7e: 8f e0 ldi r24, 0x0F ; 15
- e80: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,HIGH);
- e84: 61 e0 ldi r22, 0x01 ; 1
- e86: 80 e1 ldi r24, 0x10 ; 16
- e88: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,HIGH);
- e8c: 61 e0 ldi r22, 0x01 ; 1
- e8e: 81 e1 ldi r24, 0x11 ; 17
- e90: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED5,HIGH);
- e94: 61 e0 ldi r22, 0x01 ; 1
- e96: 82 e1 ldi r24, 0x12 ; 18
- e98: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,HIGH);
- e9c: 61 e0 ldi r22, 0x01 ; 1
- e9e: 83 e1 ldi r24, 0x13 ; 19
- ea0: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,HIGH);
- ea4: 61 e0 ldi r22, 0x01 ; 1
- ea6: 87 e0 ldi r24, 0x07 ; 7
- ea8: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,LOW);
- eac: 60 e0 ldi r22, 0x00 ; 0
- eae: 88 e0 ldi r24, 0x08 ; 8
- eb0: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- tone(SPKR,700,100);
- eb4: 8c eb ldi r24, 0xBC ; 188
- eb6: 92 e0 ldi r25, 0x02 ; 2
- eb8: 0e 94 a7 00 call 0x14e ; 0x14e <_Z4tonehjm.constprop.15>
- ebc: e8 c0 rjmp .+464 ; 0x108e <main+0x4fc>
- }
- else if (reading >= 650){
- ebe: 8a 38 cpi r24, 0x8A ; 138
- ec0: e2 e0 ldi r30, 0x02 ; 2
- ec2: 9e 07 cpc r25, r30
- ec4: 18 f1 brcs .+70 ; 0xf0c <main+0x37a>
- digitalWrite(LED1,HIGH);
- ec6: 61 e0 ldi r22, 0x01 ; 1
- ec8: 8e e0 ldi r24, 0x0E ; 14
- eca: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,HIGH);
- ece: 61 e0 ldi r22, 0x01 ; 1
- ed0: 8f e0 ldi r24, 0x0F ; 15
- ed2: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,HIGH);
- ed6: 61 e0 ldi r22, 0x01 ; 1
- ed8: 80 e1 ldi r24, 0x10 ; 16
- eda: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,HIGH);
- ede: 61 e0 ldi r22, 0x01 ; 1
- ee0: 81 e1 ldi r24, 0x11 ; 17
- ee2: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED5,HIGH);
- ee6: 61 e0 ldi r22, 0x01 ; 1
- ee8: 82 e1 ldi r24, 0x12 ; 18
- eea: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,HIGH);
- eee: 61 e0 ldi r22, 0x01 ; 1
- ef0: 83 e1 ldi r24, 0x13 ; 19
- ef2: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,LOW);
- ef6: 60 e0 ldi r22, 0x00 ; 0
- ef8: 87 e0 ldi r24, 0x07 ; 7
- efa: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,LOW);
- efe: 60 e0 ldi r22, 0x00 ; 0
- f00: 88 e0 ldi r24, 0x08 ; 8
- f02: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- tone(SPKR,650,100);
- f06: 8a e8 ldi r24, 0x8A ; 138
- f08: 92 e0 ldi r25, 0x02 ; 2
- f0a: d6 cf rjmp .-84 ; 0xeb8 <main+0x326>
- }
- else if (reading >= 600){
- f0c: 88 35 cpi r24, 0x58 ; 88
- f0e: f2 e0 ldi r31, 0x02 ; 2
- f10: 9f 07 cpc r25, r31
- f12: 18 f1 brcs .+70 ; 0xf5a <main+0x3c8>
- digitalWrite(LED1,HIGH);
- f14: 61 e0 ldi r22, 0x01 ; 1
- f16: 8e e0 ldi r24, 0x0E ; 14
- f18: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,HIGH);
- f1c: 61 e0 ldi r22, 0x01 ; 1
- f1e: 8f e0 ldi r24, 0x0F ; 15
- f20: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,HIGH);
- f24: 61 e0 ldi r22, 0x01 ; 1
- f26: 80 e1 ldi r24, 0x10 ; 16
- f28: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,HIGH);
- f2c: 61 e0 ldi r22, 0x01 ; 1
- f2e: 81 e1 ldi r24, 0x11 ; 17
- f30: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED5,HIGH);
- f34: 61 e0 ldi r22, 0x01 ; 1
- f36: 82 e1 ldi r24, 0x12 ; 18
- f38: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,LOW);
- f3c: 60 e0 ldi r22, 0x00 ; 0
- f3e: 83 e1 ldi r24, 0x13 ; 19
- f40: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,LOW);
- f44: 60 e0 ldi r22, 0x00 ; 0
- f46: 87 e0 ldi r24, 0x07 ; 7
- f48: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,LOW);
- f4c: 60 e0 ldi r22, 0x00 ; 0
- f4e: 88 e0 ldi r24, 0x08 ; 8
- f50: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- tone(SPKR,600,100);
- f54: 88 e5 ldi r24, 0x58 ; 88
- f56: 92 e0 ldi r25, 0x02 ; 2
- f58: af cf rjmp .-162 ; 0xeb8 <main+0x326>
- }
- else if (reading >= 550){
- f5a: 86 32 cpi r24, 0x26 ; 38
- f5c: 22 e0 ldi r18, 0x02 ; 2
- f5e: 92 07 cpc r25, r18
- f60: 18 f1 brcs .+70 ; 0xfa8 <main+0x416>
- digitalWrite(LED1,HIGH);
- f62: 61 e0 ldi r22, 0x01 ; 1
- f64: 8e e0 ldi r24, 0x0E ; 14
- f66: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,HIGH);
- f6a: 61 e0 ldi r22, 0x01 ; 1
- f6c: 8f e0 ldi r24, 0x0F ; 15
- f6e: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,HIGH);
- f72: 61 e0 ldi r22, 0x01 ; 1
- f74: 80 e1 ldi r24, 0x10 ; 16
- f76: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,HIGH);
- f7a: 61 e0 ldi r22, 0x01 ; 1
- f7c: 81 e1 ldi r24, 0x11 ; 17
- f7e: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED5,LOW);
- f82: 60 e0 ldi r22, 0x00 ; 0
- f84: 82 e1 ldi r24, 0x12 ; 18
- f86: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,LOW);
- f8a: 60 e0 ldi r22, 0x00 ; 0
- f8c: 83 e1 ldi r24, 0x13 ; 19
- f8e: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,LOW);
- f92: 60 e0 ldi r22, 0x00 ; 0
- f94: 87 e0 ldi r24, 0x07 ; 7
- f96: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,LOW);
- f9a: 60 e0 ldi r22, 0x00 ; 0
- f9c: 88 e0 ldi r24, 0x08 ; 8
- f9e: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- tone(SPKR,550,100);
- fa2: 86 e2 ldi r24, 0x26 ; 38
- fa4: 92 e0 ldi r25, 0x02 ; 2
- fa6: 88 cf rjmp .-240 ; 0xeb8 <main+0x326>
- }
- else if (reading >= 500){
- fa8: 84 3f cpi r24, 0xF4 ; 244
- faa: e1 e0 ldi r30, 0x01 ; 1
- fac: 9e 07 cpc r25, r30
- fae: 18 f1 brcs .+70 ; 0xff6 <main+0x464>
- digitalWrite(LED1,HIGH);
- fb0: 61 e0 ldi r22, 0x01 ; 1
- fb2: 8e e0 ldi r24, 0x0E ; 14
- fb4: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,HIGH);
- fb8: 61 e0 ldi r22, 0x01 ; 1
- fba: 8f e0 ldi r24, 0x0F ; 15
- fbc: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,HIGH);
- fc0: 61 e0 ldi r22, 0x01 ; 1
- fc2: 80 e1 ldi r24, 0x10 ; 16
- fc4: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,LOW);
- fc8: 60 e0 ldi r22, 0x00 ; 0
- fca: 81 e1 ldi r24, 0x11 ; 17
- fcc: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED5,LOW);
- fd0: 60 e0 ldi r22, 0x00 ; 0
- fd2: 82 e1 ldi r24, 0x12 ; 18
- fd4: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,LOW);
- fd8: 60 e0 ldi r22, 0x00 ; 0
- fda: 83 e1 ldi r24, 0x13 ; 19
- fdc: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,LOW);
- fe0: 60 e0 ldi r22, 0x00 ; 0
- fe2: 87 e0 ldi r24, 0x07 ; 7
- fe4: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,LOW);
- fe8: 60 e0 ldi r22, 0x00 ; 0
- fea: 88 e0 ldi r24, 0x08 ; 8
- fec: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- tone(SPKR,500,100);
- ff0: 84 ef ldi r24, 0xF4 ; 244
- ff2: 91 e0 ldi r25, 0x01 ; 1
- ff4: 61 cf rjmp .-318 ; 0xeb8 <main+0x326>
- }
- else if (reading >= 410){
- ff6: 8a 39 cpi r24, 0x9A ; 154
- ff8: f1 e0 ldi r31, 0x01 ; 1
- ffa: 9f 07 cpc r25, r31
- ffc: 18 f1 brcs .+70 ; 0x1044 <main+0x4b2>
- digitalWrite(LED1,HIGH);
- ffe: 61 e0 ldi r22, 0x01 ; 1
- 1000: 8e e0 ldi r24, 0x0E ; 14
- 1002: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,HIGH);
- 1006: 61 e0 ldi r22, 0x01 ; 1
- 1008: 8f e0 ldi r24, 0x0F ; 15
- 100a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,LOW);
- 100e: 60 e0 ldi r22, 0x00 ; 0
- 1010: 80 e1 ldi r24, 0x10 ; 16
- 1012: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,LOW);
- 1016: 60 e0 ldi r22, 0x00 ; 0
- 1018: 81 e1 ldi r24, 0x11 ; 17
- 101a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED5,LOW);
- 101e: 60 e0 ldi r22, 0x00 ; 0
- 1020: 82 e1 ldi r24, 0x12 ; 18
- 1022: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,LOW);
- 1026: 60 e0 ldi r22, 0x00 ; 0
- 1028: 83 e1 ldi r24, 0x13 ; 19
- 102a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,LOW);
- 102e: 60 e0 ldi r22, 0x00 ; 0
- 1030: 87 e0 ldi r24, 0x07 ; 7
- 1032: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,LOW);
- 1036: 60 e0 ldi r22, 0x00 ; 0
- 1038: 88 e0 ldi r24, 0x08 ; 8
- 103a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- tone(SPKR,410,100);
- 103e: 8a e9 ldi r24, 0x9A ; 154
- 1040: 91 e0 ldi r25, 0x01 ; 1
- 1042: 3a cf rjmp .-396 ; 0xeb8 <main+0x326>
- }
- else if (reading >= 300){
- 1044: 8c 32 cpi r24, 0x2C ; 44
- 1046: 91 40 sbci r25, 0x01 ; 1
- 1048: 10 f0 brcs .+4 ; 0x104e <main+0x4bc>
- digitalWrite(LED1,HIGH);
- 104a: 61 e0 ldi r22, 0x01 ; 1
- 104c: 01 c0 rjmp .+2 ; 0x1050 <main+0x4be>
- digitalWrite(LED6,LOW);
- digitalWrite(LED7,LOW);
- digitalWrite(LED8,LOW);
- }
- else if (reading >= 0){
- digitalWrite(LED1,LOW);
- 104e: 60 e0 ldi r22, 0x00 ; 0
- 1050: 8e e0 ldi r24, 0x0E ; 14
- 1052: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED2,LOW);
- 1056: 60 e0 ldi r22, 0x00 ; 0
- 1058: 8f e0 ldi r24, 0x0F ; 15
- 105a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED3,LOW);
- 105e: 60 e0 ldi r22, 0x00 ; 0
- 1060: 80 e1 ldi r24, 0x10 ; 16
- 1062: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED4,LOW);
- 1066: 60 e0 ldi r22, 0x00 ; 0
- 1068: 81 e1 ldi r24, 0x11 ; 17
- 106a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED5,LOW);
- 106e: 60 e0 ldi r22, 0x00 ; 0
- 1070: 82 e1 ldi r24, 0x12 ; 18
- 1072: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED6,LOW);
- 1076: 60 e0 ldi r22, 0x00 ; 0
- 1078: 83 e1 ldi r24, 0x13 ; 19
- 107a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED7,LOW);
- 107e: 60 e0 ldi r22, 0x00 ; 0
- 1080: 87 e0 ldi r24, 0x07 ; 7
- 1082: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- digitalWrite(LED8,LOW);
- 1086: 60 e0 ldi r22, 0x00 ; 0
- 1088: 88 e0 ldi r24, 0x08 ; 8
- 108a: 0e 94 d5 02 call 0x5aa ; 0x5aa <digitalWrite>
- // put your main code here, to run repeatedly:
-
- gasVAL = analogRead(Sensor);
- Serial.println(gasVAL);
- lightLED(gasVAL);
- delay(30);
- 108e: 6e e1 ldi r22, 0x1E ; 30
- 1090: 70 e0 ldi r23, 0x00 ; 0
- 1092: 80 e0 ldi r24, 0x00 ; 0
- 1094: 90 e0 ldi r25, 0x00 ; 0
- 1096: 0e 94 47 03 call 0x68e ; 0x68e <delay>
-
- setup();
-
- for (;;) {
- loop();
- if (serialEventRun) serialEventRun();
- 109a: 0e 94 87 04 call 0x90e ; 0x90e <_Z14serialEventRunv>
- 109e: 8a ce rjmp .-748 ; 0xdb4 <main+0x222>
-
- 000010a0 <_GLOBAL__sub_I___vector_18>:
- size_t printNumber(unsigned long, uint8_t);
- size_t printFloat(double, uint8_t);
- protected:
- void setWriteError(int err = 1) { write_error = err; }
- public:
- Print() : write_error(0) {}
- 10a0: ed e3 ldi r30, 0x3D ; 61
- 10a2: f1 e0 ldi r31, 0x01 ; 1
- 10a4: 13 82 std Z+3, r1 ; 0x03
- 10a6: 12 82 std Z+2, r1 ; 0x02
- public:
- virtual int available() = 0;
- virtual int read() = 0;
- virtual int peek() = 0;
-
- Stream() {_timeout=1000;}
- 10a8: 88 ee ldi r24, 0xE8 ; 232
- 10aa: 93 e0 ldi r25, 0x03 ; 3
- 10ac: a0 e0 ldi r26, 0x00 ; 0
- 10ae: b0 e0 ldi r27, 0x00 ; 0
- 10b0: 84 83 std Z+4, r24 ; 0x04
- 10b2: 95 83 std Z+5, r25 ; 0x05
- 10b4: a6 83 std Z+6, r26 ; 0x06
- 10b6: b7 83 std Z+7, r27 ; 0x07
- volatile uint8_t *ucsrc, volatile uint8_t *udr) :
- _ubrrh(ubrrh), _ubrrl(ubrrl),
- _ucsra(ucsra), _ucsrb(ucsrb), _ucsrc(ucsrc),
- _udr(udr),
- _rx_buffer_head(0), _rx_buffer_tail(0),
- _tx_buffer_head(0), _tx_buffer_tail(0)
- 10b8: 85 e0 ldi r24, 0x05 ; 5
- 10ba: 91 e0 ldi r25, 0x01 ; 1
- 10bc: 91 83 std Z+1, r25 ; 0x01
- 10be: 80 83 st Z, r24
- 10c0: 85 ec ldi r24, 0xC5 ; 197
- 10c2: 90 e0 ldi r25, 0x00 ; 0
- 10c4: 95 87 std Z+13, r25 ; 0x0d
- 10c6: 84 87 std Z+12, r24 ; 0x0c
- 10c8: 84 ec ldi r24, 0xC4 ; 196
- 10ca: 90 e0 ldi r25, 0x00 ; 0
- 10cc: 97 87 std Z+15, r25 ; 0x0f
- 10ce: 86 87 std Z+14, r24 ; 0x0e
- 10d0: 80 ec ldi r24, 0xC0 ; 192
- 10d2: 90 e0 ldi r25, 0x00 ; 0
- 10d4: 91 8b std Z+17, r25 ; 0x11
- 10d6: 80 8b std Z+16, r24 ; 0x10
- 10d8: 81 ec ldi r24, 0xC1 ; 193
- 10da: 90 e0 ldi r25, 0x00 ; 0
- 10dc: 93 8b std Z+19, r25 ; 0x13
- 10de: 82 8b std Z+18, r24 ; 0x12
- 10e0: 82 ec ldi r24, 0xC2 ; 194
- 10e2: 90 e0 ldi r25, 0x00 ; 0
- 10e4: 95 8b std Z+21, r25 ; 0x15
- 10e6: 84 8b std Z+20, r24 ; 0x14
- 10e8: 86 ec ldi r24, 0xC6 ; 198
- 10ea: 90 e0 ldi r25, 0x00 ; 0
- 10ec: 97 8b std Z+23, r25 ; 0x17
- 10ee: 86 8b std Z+22, r24 ; 0x16
- 10f0: 11 8e std Z+25, r1 ; 0x19
- 10f2: 12 8e std Z+26, r1 ; 0x1a
- 10f4: 13 8e std Z+27, r1 ; 0x1b
- 10f6: 14 8e std Z+28, r1 ; 0x1c
- 10f8: 08 95 ret
-
- 000010fa <__udivmodsi4>:
- 10fa: a1 e2 ldi r26, 0x21 ; 33
- 10fc: 1a 2e mov r1, r26
- 10fe: aa 1b sub r26, r26
- 1100: bb 1b sub r27, r27
- 1102: fd 01 movw r30, r26
- 1104: 0d c0 rjmp .+26 ; 0x1120 <__udivmodsi4_ep>
-
- 00001106 <__udivmodsi4_loop>:
- 1106: aa 1f adc r26, r26
- 1108: bb 1f adc r27, r27
- 110a: ee 1f adc r30, r30
- 110c: ff 1f adc r31, r31
- 110e: a2 17 cp r26, r18
- 1110: b3 07 cpc r27, r19
- 1112: e4 07 cpc r30, r20
- 1114: f5 07 cpc r31, r21
- 1116: 20 f0 brcs .+8 ; 0x1120 <__udivmodsi4_ep>
- 1118: a2 1b sub r26, r18
- 111a: b3 0b sbc r27, r19
- 111c: e4 0b sbc r30, r20
- 111e: f5 0b sbc r31, r21
-
- 00001120 <__udivmodsi4_ep>:
- 1120: 66 1f adc r22, r22
- 1122: 77 1f adc r23, r23
- 1124: 88 1f adc r24, r24
- 1126: 99 1f adc r25, r25
- 1128: 1a 94 dec r1
- 112a: 69 f7 brne .-38 ; 0x1106 <__udivmodsi4_loop>
- 112c: 60 95 com r22
- 112e: 70 95 com r23
- 1130: 80 95 com r24
- 1132: 90 95 com r25
- 1134: 9b 01 movw r18, r22
- 1136: ac 01 movw r20, r24
- 1138: bd 01 movw r22, r26
- 113a: cf 01 movw r24, r30
- 113c: 08 95 ret
-
- 0000113e <__divmodsi4>:
- 113e: 05 2e mov r0, r21
- 1140: 97 fb bst r25, 7
- 1142: 1e f4 brtc .+6 ; 0x114a <__divmodsi4+0xc>
- 1144: 00 94 com r0
- 1146: 0e 94 b6 08 call 0x116c ; 0x116c <__negsi2>
- 114a: 57 fd sbrc r21, 7
- 114c: 07 d0 rcall .+14 ; 0x115c <__divmodsi4_neg2>
- 114e: 0e 94 7d 08 call 0x10fa ; 0x10fa <__udivmodsi4>
- 1152: 07 fc sbrc r0, 7
- 1154: 03 d0 rcall .+6 ; 0x115c <__divmodsi4_neg2>
- 1156: 4e f4 brtc .+18 ; 0x116a <__divmodsi4_exit>
- 1158: 0c 94 b6 08 jmp 0x116c ; 0x116c <__negsi2>
-
- 0000115c <__divmodsi4_neg2>:
- 115c: 50 95 com r21
- 115e: 40 95 com r20
- 1160: 30 95 com r19
- 1162: 21 95 neg r18
- 1164: 3f 4f sbci r19, 0xFF ; 255
- 1166: 4f 4f sbci r20, 0xFF ; 255
- 1168: 5f 4f sbci r21, 0xFF ; 255
-
- 0000116a <__divmodsi4_exit>:
- 116a: 08 95 ret
-
- 0000116c <__negsi2>:
- 116c: 90 95 com r25
- 116e: 80 95 com r24
- 1170: 70 95 com r23
- 1172: 61 95 neg r22
- 1174: 7f 4f sbci r23, 0xFF ; 255
- 1176: 8f 4f sbci r24, 0xFF ; 255
- 1178: 9f 4f sbci r25, 0xFF ; 255
- 117a: 08 95 ret
-
- 0000117c <__umulhisi3>:
- 117c: a2 9f mul r26, r18
- 117e: b0 01 movw r22, r0
- 1180: b3 9f mul r27, r19
- 1182: c0 01 movw r24, r0
- 1184: a3 9f mul r26, r19
- 1186: 70 0d add r23, r0
- 1188: 81 1d adc r24, r1
- 118a: 11 24 eor r1, r1
- 118c: 91 1d adc r25, r1
- 118e: b2 9f mul r27, r18
- 1190: 70 0d add r23, r0
- 1192: 81 1d adc r24, r1
- 1194: 11 24 eor r1, r1
- 1196: 91 1d adc r25, r1
- 1198: 08 95 ret
-
- 0000119a <__tablejump2__>:
- 119a: ee 0f add r30, r30
- 119c: ff 1f adc r31, r31
- 119e: 05 90 lpm r0, Z+
- 11a0: f4 91 lpm r31, Z
- 11a2: e0 2d mov r30, r0
- 11a4: 09 94 ijmp
-
- 000011a6 <abort>:
- 11a6: 81 e0 ldi r24, 0x01 ; 1
- 11a8: 90 e0 ldi r25, 0x00 ; 0
- 11aa: f8 94 cli
- 11ac: 0c 94 d8 08 jmp 0x11b0 ; 0x11b0 <_exit>
-
- 000011b0 <_exit>:
- 11b0: f8 94 cli
-
- 000011b2 <__stop_program>:
- 11b2: ff cf rjmp .-2 ; 0x11b2 <__stop_program>
|