|
|
-
- shiftin_try6_wLED.ino.elf: file format elf32-avr
-
-
- Disassembly of section .text:
-
- 00000000 <__vectors>:
- 0: 0c 94 a2 00 jmp 0x144 ; 0x144 <__ctors_end>
- 4: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 8: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- c: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 10: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 14: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 18: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 1c: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 20: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 24: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 28: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 2c: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 30: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 34: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 38: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 3c: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 40: 0c 94 75 04 jmp 0x8ea ; 0x8ea <__vector_16>
- 44: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 48: 0c 94 43 04 jmp 0x886 ; 0x886 <__vector_18>
- 4c: 0c 94 1d 04 jmp 0x83a ; 0x83a <__vector_19>
- 50: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 54: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 58: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 5c: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 60: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
- 64: 0c 94 ca 00 jmp 0x194 ; 0x194 <__bad_interrupt>
-
- 00000068 <__trampolines_end>:
- 68: 00 00 nop
- 6a: 00 00 nop
- 6c: 24 00 .word 0x0024 ; ????
- 6e: 27 00 .word 0x0027 ; ????
- 70: 2a 00 .word 0x002a ; ????
-
- 00000072 <port_to_output_PGM>:
- 72: 00 00 00 00 25 00 28 00 2b 00 ....%.(.+.
-
- 0000007c <port_to_input_PGM>:
- 7c: 00 00 00 00 23 00 26 00 29 00 ....#.&.).
-
- 00000086 <digital_pin_to_port_PGM>:
- 86: 04 04 04 04 04 04 04 04 02 02 02 02 02 02 03 03 ................
- 96: 03 03 03 03 ....
-
- 0000009a <digital_pin_to_bit_mask_PGM>:
- 9a: 01 02 04 08 10 20 40 80 01 02 04 08 10 20 01 02 ..... @...... ..
- aa: 04 08 10 20 ...
-
- 000000ae <digital_pin_to_timer_PGM>:
- ae: 00 00 00 08 00 02 01 00 00 03 04 07 00 00 00 00 ................
- be: 00 00 00 00 ....
-
- 000000c2 <charTable>:
- c2: 7e 30 6d 79 33 5b 5f 70 7f 7b 77 1f 0d 3d 4f 47 ~0my3[_p.{w..=OG
- ...
- ee: 80 01 80 00 7e 30 6d 79 33 5b 5f 70 7f 7b 00 00 ....~0my3[_p.{..
- fe: 00 00 00 00 00 77 1f 0d 3d 4f 47 00 37 00 00 00 .....w..=OG.7...
- 10e: 0e 00 00 00 67 00 00 00 00 00 00 00 00 00 00 00 ....g...........
- 11e: 00 00 00 08 00 77 1f 0d 3d 4f 47 00 37 00 00 00 .....w..=OG.7...
- 12e: 0e 00 15 1d 67 00 00 00 00 00 00 00 00 00 00 00 ....g...........
- 13e: 00 00 00 00 ....
-
- 00000142 <__ctors_start>:
- 142: bf 04 cpc r11, r15
-
- 00000144 <__ctors_end>:
- 144: 11 24 eor r1, r1
- 146: 1f be out 0x3f, r1 ; 63
- 148: cf ef ldi r28, 0xFF ; 255
- 14a: d8 e0 ldi r29, 0x08 ; 8
- 14c: de bf out 0x3e, r29 ; 62
- 14e: cd bf out 0x3d, r28 ; 61
-
- 00000150 <__do_copy_data>:
- 150: 11 e0 ldi r17, 0x01 ; 1
- 152: a0 e0 ldi r26, 0x00 ; 0
- 154: b1 e0 ldi r27, 0x01 ; 1
- 156: e4 e5 ldi r30, 0x54 ; 84
- 158: ff e0 ldi r31, 0x0F ; 15
- 15a: 02 c0 rjmp .+4 ; 0x160 <__do_copy_data+0x10>
- 15c: 05 90 lpm r0, Z+
- 15e: 0d 92 st X+, r0
- 160: a6 31 cpi r26, 0x16 ; 22
- 162: b1 07 cpc r27, r17
- 164: d9 f7 brne .-10 ; 0x15c <__do_copy_data+0xc>
-
- 00000166 <__do_clear_bss>:
- 166: 22 e0 ldi r18, 0x02 ; 2
- 168: a6 e1 ldi r26, 0x16 ; 22
- 16a: b1 e0 ldi r27, 0x01 ; 1
- 16c: 01 c0 rjmp .+2 ; 0x170 <.do_clear_bss_start>
-
- 0000016e <.do_clear_bss_loop>:
- 16e: 1d 92 st X+, r1
-
- 00000170 <.do_clear_bss_start>:
- 170: ac 33 cpi r26, 0x3C ; 60
- 172: b2 07 cpc r27, r18
- 174: e1 f7 brne .-8 ; 0x16e <.do_clear_bss_loop>
-
- 00000176 <__do_global_ctors>:
- 176: 10 e0 ldi r17, 0x00 ; 0
- 178: c2 ea ldi r28, 0xA2 ; 162
- 17a: d0 e0 ldi r29, 0x00 ; 0
- 17c: 04 c0 rjmp .+8 ; 0x186 <__do_global_ctors+0x10>
- 17e: 21 97 sbiw r28, 0x01 ; 1
- 180: fe 01 movw r30, r28
- 182: 0e 94 9d 07 call 0xf3a ; 0xf3a <__tablejump2__>
- 186: c1 3a cpi r28, 0xA1 ; 161
- 188: d1 07 cpc r29, r17
- 18a: c9 f7 brne .-14 ; 0x17e <__do_global_ctors+0x8>
- 18c: 0e 94 7a 05 call 0xaf4 ; 0xaf4 <main>
- 190: 0c 94 a8 07 jmp 0xf50 ; 0xf50 <_exit>
-
- 00000194 <__bad_interrupt>:
- 194: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
-
- 00000198 <Print::write(unsigned char const*, unsigned int)>:
-
- // Public Methods //////////////////////////////////////////////////////////////
-
- /* default implementation: may be overridden */
- size_t Print::write(const uint8_t *buffer, size_t size)
- {
- 198: cf 92 push r12
- 19a: df 92 push r13
- 19c: ef 92 push r14
- 19e: ff 92 push r15
- 1a0: 0f 93 push r16
- 1a2: 1f 93 push r17
- 1a4: cf 93 push r28
- 1a6: df 93 push r29
- 1a8: 6c 01 movw r12, r24
- 1aa: 7a 01 movw r14, r20
- 1ac: 8b 01 movw r16, r22
- size_t n = 0;
- 1ae: c0 e0 ldi r28, 0x00 ; 0
- 1b0: d0 e0 ldi r29, 0x00 ; 0
- while (size--) {
- 1b2: ce 15 cp r28, r14
- 1b4: df 05 cpc r29, r15
- 1b6: 89 f0 breq .+34 ; 0x1da <Print::write(unsigned char const*, unsigned int)+0x42>
- if (write(*buffer++)) n++;
- 1b8: d8 01 movw r26, r16
- 1ba: 6d 91 ld r22, X+
- 1bc: 8d 01 movw r16, r26
- 1be: d6 01 movw r26, r12
- 1c0: ed 91 ld r30, X+
- 1c2: fc 91 ld r31, X
- 1c4: 01 90 ld r0, Z+
- 1c6: f0 81 ld r31, Z
- 1c8: e0 2d mov r30, r0
- 1ca: c6 01 movw r24, r12
- 1cc: 09 95 icall
- 1ce: 89 2b or r24, r25
- 1d0: 11 f4 brne .+4 ; 0x1d6 <Print::write(unsigned char const*, unsigned int)+0x3e>
- 1d2: 7e 01 movw r14, r28
- 1d4: 02 c0 rjmp .+4 ; 0x1da <Print::write(unsigned char const*, unsigned int)+0x42>
- 1d6: 21 96 adiw r28, 0x01 ; 1
- 1d8: ec cf rjmp .-40 ; 0x1b2 <Print::write(unsigned char const*, unsigned int)+0x1a>
- else break;
- }
- return n;
- }
- 1da: c7 01 movw r24, r14
- 1dc: df 91 pop r29
- 1de: cf 91 pop r28
- 1e0: 1f 91 pop r17
- 1e2: 0f 91 pop r16
- 1e4: ff 90 pop r15
- 1e6: ef 90 pop r14
- 1e8: df 90 pop r13
- 1ea: cf 90 pop r12
- 1ec: 08 95 ret
-
- 000001ee <Print::flush()>:
- 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 */ }
- 1ee: 08 95 ret
-
- 000001f0 <Print::availableForWrite()>:
- 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; }
- 1f0: 80 e0 ldi r24, 0x00 ; 0
- 1f2: 90 e0 ldi r25, 0x00 ; 0
- 1f4: 08 95 ret
-
- 000001f6 <HardwareSerial::availableForWrite()>:
- {
- #if (SERIAL_TX_BUFFER_SIZE>256)
- uint8_t oldSREG = SREG;
- cli();
- #endif
- tx_buffer_index_t head = _tx_buffer_head;
- 1f6: fc 01 movw r30, r24
- 1f8: 53 8d ldd r21, Z+27 ; 0x1b
- tx_buffer_index_t tail = _tx_buffer_tail;
- 1fa: 44 8d ldd r20, Z+28 ; 0x1c
- 1fc: 25 2f mov r18, r21
- 1fe: 30 e0 ldi r19, 0x00 ; 0
- 200: 84 2f mov r24, r20
- 202: 90 e0 ldi r25, 0x00 ; 0
- #if (SERIAL_TX_BUFFER_SIZE>256)
- SREG = oldSREG;
- #endif
- if (head >= tail) return SERIAL_TX_BUFFER_SIZE - 1 - head + tail;
- 204: 82 1b sub r24, r18
- 206: 93 0b sbc r25, r19
- 208: 54 17 cp r21, r20
- 20a: 10 f0 brcs .+4 ; 0x210 <HardwareSerial::availableForWrite()+0x1a>
- 20c: cf 96 adiw r24, 0x3f ; 63
- 20e: 08 95 ret
- return tail - head - 1;
- 210: 01 97 sbiw r24, 0x01 ; 1
- }
- 212: 08 95 ret
-
- 00000214 <HardwareSerial::read()>:
- return _rx_buffer[_rx_buffer_tail];
- }
- }
-
- int HardwareSerial::read(void)
- {
- 214: 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) {
- 216: 91 8d ldd r25, Z+25 ; 0x19
- 218: 82 8d ldd r24, Z+26 ; 0x1a
- 21a: 98 17 cp r25, r24
- 21c: 61 f0 breq .+24 ; 0x236 <HardwareSerial::read()+0x22>
- return -1;
- } else {
- unsigned char c = _rx_buffer[_rx_buffer_tail];
- 21e: 82 8d ldd r24, Z+26 ; 0x1a
- 220: df 01 movw r26, r30
- 222: a8 0f add r26, r24
- 224: b1 1d adc r27, r1
- 226: 5d 96 adiw r26, 0x1d ; 29
- 228: 8c 91 ld r24, X
- _rx_buffer_tail = (rx_buffer_index_t)(_rx_buffer_tail + 1) % SERIAL_RX_BUFFER_SIZE;
- 22a: 92 8d ldd r25, Z+26 ; 0x1a
- 22c: 9f 5f subi r25, 0xFF ; 255
- 22e: 9f 73 andi r25, 0x3F ; 63
- 230: 92 8f std Z+26, r25 ; 0x1a
- return c;
- 232: 90 e0 ldi r25, 0x00 ; 0
- 234: 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;
- 236: 8f ef ldi r24, 0xFF ; 255
- 238: 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;
- }
- }
- 23a: 08 95 ret
-
- 0000023c <HardwareSerial::peek()>:
- {
- return ((unsigned int)(SERIAL_RX_BUFFER_SIZE + _rx_buffer_head - _rx_buffer_tail)) % SERIAL_RX_BUFFER_SIZE;
- }
-
- int HardwareSerial::peek(void)
- {
- 23c: fc 01 movw r30, r24
- if (_rx_buffer_head == _rx_buffer_tail) {
- 23e: 91 8d ldd r25, Z+25 ; 0x19
- 240: 82 8d ldd r24, Z+26 ; 0x1a
- 242: 98 17 cp r25, r24
- 244: 31 f0 breq .+12 ; 0x252 <HardwareSerial::peek()+0x16>
- return -1;
- } else {
- return _rx_buffer[_rx_buffer_tail];
- 246: 82 8d ldd r24, Z+26 ; 0x1a
- 248: e8 0f add r30, r24
- 24a: f1 1d adc r31, r1
- 24c: 85 8d ldd r24, Z+29 ; 0x1d
- 24e: 90 e0 ldi r25, 0x00 ; 0
- 250: 08 95 ret
- }
-
- int HardwareSerial::peek(void)
- {
- if (_rx_buffer_head == _rx_buffer_tail) {
- return -1;
- 252: 8f ef ldi r24, 0xFF ; 255
- 254: 9f ef ldi r25, 0xFF ; 255
- } else {
- return _rx_buffer[_rx_buffer_tail];
- }
- }
- 256: 08 95 ret
-
- 00000258 <HardwareSerial::available()>:
- // clear any received data
- _rx_buffer_head = _rx_buffer_tail;
- }
-
- int HardwareSerial::available(void)
- {
- 258: fc 01 movw r30, r24
- return ((unsigned int)(SERIAL_RX_BUFFER_SIZE + _rx_buffer_head - _rx_buffer_tail)) % SERIAL_RX_BUFFER_SIZE;
- 25a: 91 8d ldd r25, Z+25 ; 0x19
- 25c: 22 8d ldd r18, Z+26 ; 0x1a
- 25e: 89 2f mov r24, r25
- 260: 90 e0 ldi r25, 0x00 ; 0
- 262: 80 5c subi r24, 0xC0 ; 192
- 264: 9f 4f sbci r25, 0xFF ; 255
- 266: 82 1b sub r24, r18
- 268: 91 09 sbc r25, r1
- }
- 26a: 8f 73 andi r24, 0x3F ; 63
- 26c: 99 27 eor r25, r25
- 26e: 08 95 ret
-
- 00000270 <Serial0_available()>:
- #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();
- 270: 87 e4 ldi r24, 0x47 ; 71
- 272: 91 e0 ldi r25, 0x01 ; 1
- 274: 0e 94 2c 01 call 0x258 ; 0x258 <HardwareSerial::available()>
- 278: 21 e0 ldi r18, 0x01 ; 1
- 27a: 89 2b or r24, r25
- 27c: 09 f4 brne .+2 ; 0x280 <Serial0_available()+0x10>
- 27e: 20 e0 ldi r18, 0x00 ; 0
- }
- 280: 82 2f mov r24, r18
- 282: 08 95 ret
-
- 00000284 <HardwareSerial::_tx_udr_empty_irq()>:
- }
-
- // Actual interrupt handlers //////////////////////////////////////////////////////////////
-
- void HardwareSerial::_tx_udr_empty_irq(void)
- {
- 284: 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];
- 286: 84 8d ldd r24, Z+28 ; 0x1c
- 288: df 01 movw r26, r30
- 28a: a8 0f add r26, r24
- 28c: b1 1d adc r27, r1
- 28e: a3 5a subi r26, 0xA3 ; 163
- 290: bf 4f sbci r27, 0xFF ; 255
- 292: 2c 91 ld r18, X
- _tx_buffer_tail = (_tx_buffer_tail + 1) % SERIAL_TX_BUFFER_SIZE;
- 294: 84 8d ldd r24, Z+28 ; 0x1c
- 296: 90 e0 ldi r25, 0x00 ; 0
- 298: 01 96 adiw r24, 0x01 ; 1
- 29a: 8f 73 andi r24, 0x3F ; 63
- 29c: 99 27 eor r25, r25
- 29e: 84 8f std Z+28, r24 ; 0x1c
-
- *_udr = c;
- 2a0: a6 89 ldd r26, Z+22 ; 0x16
- 2a2: b7 89 ldd r27, Z+23 ; 0x17
- 2a4: 2c 93 st X, r18
-
- // clear the TXC bit -- "can be cleared by writing a one to its bit
- // location". This makes sure flush() won't return until the bytes
- // actually got written
- sbi(*_ucsra, TXC0);
- 2a6: a0 89 ldd r26, Z+16 ; 0x10
- 2a8: b1 89 ldd r27, Z+17 ; 0x11
- 2aa: 8c 91 ld r24, X
- 2ac: 80 64 ori r24, 0x40 ; 64
- 2ae: 8c 93 st X, r24
-
- if (_tx_buffer_head == _tx_buffer_tail) {
- 2b0: 93 8d ldd r25, Z+27 ; 0x1b
- 2b2: 84 8d ldd r24, Z+28 ; 0x1c
- 2b4: 98 13 cpse r25, r24
- 2b6: 06 c0 rjmp .+12 ; 0x2c4 <HardwareSerial::_tx_udr_empty_irq()+0x40>
- // Buffer empty, so disable interrupts
- cbi(*_ucsrb, UDRIE0);
- 2b8: 02 88 ldd r0, Z+18 ; 0x12
- 2ba: f3 89 ldd r31, Z+19 ; 0x13
- 2bc: e0 2d mov r30, r0
- 2be: 80 81 ld r24, Z
- 2c0: 8f 7d andi r24, 0xDF ; 223
- 2c2: 80 83 st Z, r24
- 2c4: 08 95 ret
-
- 000002c6 <HardwareSerial::write(unsigned char)>:
- // 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)
- {
- 2c6: ef 92 push r14
- 2c8: ff 92 push r15
- 2ca: 0f 93 push r16
- 2cc: 1f 93 push r17
- 2ce: cf 93 push r28
- 2d0: df 93 push r29
- 2d2: ec 01 movw r28, r24
- _written = true;
- 2d4: 81 e0 ldi r24, 0x01 ; 1
- 2d6: 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)) {
- 2d8: 9b 8d ldd r25, Y+27 ; 0x1b
- 2da: 8c 8d ldd r24, Y+28 ; 0x1c
- 2dc: 98 13 cpse r25, r24
- 2de: 05 c0 rjmp .+10 ; 0x2ea <HardwareSerial::write(unsigned char)+0x24>
- 2e0: e8 89 ldd r30, Y+16 ; 0x10
- 2e2: f9 89 ldd r31, Y+17 ; 0x11
- 2e4: 80 81 ld r24, Z
- 2e6: 85 fd sbrc r24, 5
- 2e8: 24 c0 rjmp .+72 ; 0x332 <HardwareSerial::write(unsigned char)+0x6c>
- 2ea: f6 2e mov r15, r22
- *_udr = c;
- sbi(*_ucsra, TXC0);
- return 1;
- }
- tx_buffer_index_t i = (_tx_buffer_head + 1) % SERIAL_TX_BUFFER_SIZE;
- 2ec: 0b 8d ldd r16, Y+27 ; 0x1b
- 2ee: 10 e0 ldi r17, 0x00 ; 0
- 2f0: 0f 5f subi r16, 0xFF ; 255
- 2f2: 1f 4f sbci r17, 0xFF ; 255
- 2f4: 0f 73 andi r16, 0x3F ; 63
- 2f6: 11 27 eor r17, r17
- 2f8: 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) {
- 2fa: 8c 8d ldd r24, Y+28 ; 0x1c
- 2fc: e8 12 cpse r14, r24
- 2fe: 0c c0 rjmp .+24 ; 0x318 <HardwareSerial::write(unsigned char)+0x52>
- if (bit_is_clear(SREG, SREG_I)) {
- 300: 0f b6 in r0, 0x3f ; 63
- 302: 07 fc sbrc r0, 7
- 304: fa cf rjmp .-12 ; 0x2fa <HardwareSerial::write(unsigned char)+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))
- 306: e8 89 ldd r30, Y+16 ; 0x10
- 308: f9 89 ldd r31, Y+17 ; 0x11
- 30a: 80 81 ld r24, Z
- 30c: 85 ff sbrs r24, 5
- 30e: f5 cf rjmp .-22 ; 0x2fa <HardwareSerial::write(unsigned char)+0x34>
- _tx_udr_empty_irq();
- 310: ce 01 movw r24, r28
- 312: 0e 94 42 01 call 0x284 ; 0x284 <HardwareSerial::_tx_udr_empty_irq()>
- 316: f1 cf rjmp .-30 ; 0x2fa <HardwareSerial::write(unsigned char)+0x34>
- } else {
- // nop, the interrupt handler will free up space for us
- }
- }
-
- _tx_buffer[_tx_buffer_head] = c;
- 318: 8b 8d ldd r24, Y+27 ; 0x1b
- 31a: fe 01 movw r30, r28
- 31c: e8 0f add r30, r24
- 31e: f1 1d adc r31, r1
- 320: e3 5a subi r30, 0xA3 ; 163
- 322: ff 4f sbci r31, 0xFF ; 255
- 324: f0 82 st Z, r15
- _tx_buffer_head = i;
- 326: 0b 8f std Y+27, r16 ; 0x1b
-
- sbi(*_ucsrb, UDRIE0);
- 328: ea 89 ldd r30, Y+18 ; 0x12
- 32a: fb 89 ldd r31, Y+19 ; 0x13
- 32c: 80 81 ld r24, Z
- 32e: 80 62 ori r24, 0x20 ; 32
- 330: 07 c0 rjmp .+14 ; 0x340 <HardwareSerial::write(unsigned char)+0x7a>
- // 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)) {
- *_udr = c;
- 332: ee 89 ldd r30, Y+22 ; 0x16
- 334: ff 89 ldd r31, Y+23 ; 0x17
- 336: 60 83 st Z, r22
- sbi(*_ucsra, TXC0);
- 338: e8 89 ldd r30, Y+16 ; 0x10
- 33a: f9 89 ldd r31, Y+17 ; 0x11
- 33c: 80 81 ld r24, Z
- 33e: 80 64 ori r24, 0x40 ; 64
- 340: 80 83 st Z, r24
- _tx_buffer_head = i;
-
- sbi(*_ucsrb, UDRIE0);
-
- return 1;
- }
- 342: 81 e0 ldi r24, 0x01 ; 1
- 344: 90 e0 ldi r25, 0x00 ; 0
- 346: df 91 pop r29
- 348: cf 91 pop r28
- 34a: 1f 91 pop r17
- 34c: 0f 91 pop r16
- 34e: ff 90 pop r15
- 350: ef 90 pop r14
- 352: 08 95 ret
-
- 00000354 <HardwareSerial::flush()>:
- if (head >= tail) return SERIAL_TX_BUFFER_SIZE - 1 - head + tail;
- return tail - head - 1;
- }
-
- void HardwareSerial::flush()
- {
- 354: cf 93 push r28
- 356: df 93 push r29
- 358: 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)
- 35a: 88 8d ldd r24, Y+24 ; 0x18
- 35c: 88 23 and r24, r24
- 35e: c9 f0 breq .+50 ; 0x392 <HardwareSerial::flush()+0x3e>
- return;
-
- while (bit_is_set(*_ucsrb, UDRIE0) || bit_is_clear(*_ucsra, TXC0)) {
- 360: ea 89 ldd r30, Y+18 ; 0x12
- 362: fb 89 ldd r31, Y+19 ; 0x13
- 364: 80 81 ld r24, Z
- 366: 85 fd sbrc r24, 5
- 368: 05 c0 rjmp .+10 ; 0x374 <HardwareSerial::flush()+0x20>
- 36a: a8 89 ldd r26, Y+16 ; 0x10
- 36c: b9 89 ldd r27, Y+17 ; 0x11
- 36e: 8c 91 ld r24, X
- 370: 86 fd sbrc r24, 6
- 372: 0f c0 rjmp .+30 ; 0x392 <HardwareSerial::flush()+0x3e>
- if (bit_is_clear(SREG, SREG_I) && bit_is_set(*_ucsrb, UDRIE0))
- 374: 0f b6 in r0, 0x3f ; 63
- 376: 07 fc sbrc r0, 7
- 378: f5 cf rjmp .-22 ; 0x364 <HardwareSerial::flush()+0x10>
- 37a: 80 81 ld r24, Z
- 37c: 85 ff sbrs r24, 5
- 37e: f2 cf rjmp .-28 ; 0x364 <HardwareSerial::flush()+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))
- 380: a8 89 ldd r26, Y+16 ; 0x10
- 382: b9 89 ldd r27, Y+17 ; 0x11
- 384: 8c 91 ld r24, X
- 386: 85 ff sbrs r24, 5
- 388: ed cf rjmp .-38 ; 0x364 <HardwareSerial::flush()+0x10>
- _tx_udr_empty_irq();
- 38a: ce 01 movw r24, r28
- 38c: 0e 94 42 01 call 0x284 ; 0x284 <HardwareSerial::_tx_udr_empty_irq()>
- 390: e7 cf rjmp .-50 ; 0x360 <HardwareSerial::flush()+0xc>
- }
- // If we get here, nothing is queued anymore (DRIE is disabled) and
- // the hardware finished tranmission (TXC is set).
- }
- 392: df 91 pop r29
- 394: cf 91 pop r28
- 396: 08 95 ret
-
- 00000398 <serialEventRun()>:
- #endif
-
- void serialEventRun(void)
- {
- #if defined(HAVE_HWSERIAL0)
- if (Serial0_available && serialEvent && Serial0_available()) serialEvent();
- 398: 80 e0 ldi r24, 0x00 ; 0
- 39a: 90 e0 ldi r25, 0x00 ; 0
- 39c: 89 2b or r24, r25
- 39e: 29 f0 breq .+10 ; 0x3aa <serialEventRun()+0x12>
- 3a0: 0e 94 38 01 call 0x270 ; 0x270 <Serial0_available()>
- 3a4: 81 11 cpse r24, r1
- 3a6: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
- 3aa: 08 95 ret
-
- 000003ac <turnOffPWM>:
- //
- //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)
- 3ac: 83 30 cpi r24, 0x03 ; 3
- 3ae: 81 f0 breq .+32 ; 0x3d0 <turnOffPWM+0x24>
- 3b0: 28 f4 brcc .+10 ; 0x3bc <turnOffPWM+0x10>
- 3b2: 81 30 cpi r24, 0x01 ; 1
- 3b4: 99 f0 breq .+38 ; 0x3dc <turnOffPWM+0x30>
- 3b6: 82 30 cpi r24, 0x02 ; 2
- 3b8: a1 f0 breq .+40 ; 0x3e2 <turnOffPWM+0x36>
- 3ba: 08 95 ret
- 3bc: 87 30 cpi r24, 0x07 ; 7
- 3be: a9 f0 breq .+42 ; 0x3ea <turnOffPWM+0x3e>
- 3c0: 88 30 cpi r24, 0x08 ; 8
- 3c2: b9 f0 breq .+46 ; 0x3f2 <turnOffPWM+0x46>
- 3c4: 84 30 cpi r24, 0x04 ; 4
- 3c6: d1 f4 brne .+52 ; 0x3fc <turnOffPWM+0x50>
- {
- #if defined(TCCR1A) && defined(COM1A1)
- case TIMER1A: cbi(TCCR1A, COM1A1); break;
- #endif
- #if defined(TCCR1A) && defined(COM1B1)
- case TIMER1B: cbi(TCCR1A, COM1B1); break;
- 3c8: 80 91 80 00 lds r24, 0x0080 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
- 3cc: 8f 7d andi r24, 0xDF ; 223
- 3ce: 03 c0 rjmp .+6 ; 0x3d6 <turnOffPWM+0x2a>
- static void turnOffPWM(uint8_t timer)
- {
- switch (timer)
- {
- #if defined(TCCR1A) && defined(COM1A1)
- case TIMER1A: cbi(TCCR1A, COM1A1); break;
- 3d0: 80 91 80 00 lds r24, 0x0080 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
- 3d4: 8f 77 andi r24, 0x7F ; 127
- #endif
- #if defined(TCCR1A) && defined(COM1B1)
- case TIMER1B: cbi(TCCR1A, COM1B1); break;
- 3d6: 80 93 80 00 sts 0x0080, r24 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
- 3da: 08 95 ret
- #if defined(TCCR2) && defined(COM21)
- case TIMER2: cbi(TCCR2, COM21); break;
- #endif
-
- #if defined(TCCR0A) && defined(COM0A1)
- case TIMER0A: cbi(TCCR0A, COM0A1); break;
- 3dc: 84 b5 in r24, 0x24 ; 36
- 3de: 8f 77 andi r24, 0x7F ; 127
- 3e0: 02 c0 rjmp .+4 ; 0x3e6 <turnOffPWM+0x3a>
- #endif
-
- #if defined(TCCR0A) && defined(COM0B1)
- case TIMER0B: cbi(TCCR0A, COM0B1); break;
- 3e2: 84 b5 in r24, 0x24 ; 36
- 3e4: 8f 7d andi r24, 0xDF ; 223
- 3e6: 84 bd out 0x24, r24 ; 36
- 3e8: 08 95 ret
- #endif
- #if defined(TCCR2A) && defined(COM2A1)
- case TIMER2A: cbi(TCCR2A, COM2A1); break;
- 3ea: 80 91 b0 00 lds r24, 0x00B0 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- 3ee: 8f 77 andi r24, 0x7F ; 127
- 3f0: 03 c0 rjmp .+6 ; 0x3f8 <turnOffPWM+0x4c>
- #endif
- #if defined(TCCR2A) && defined(COM2B1)
- case TIMER2B: cbi(TCCR2A, COM2B1); break;
- 3f2: 80 91 b0 00 lds r24, 0x00B0 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- 3f6: 8f 7d andi r24, 0xDF ; 223
- 3f8: 80 93 b0 00 sts 0x00B0, r24 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- 3fc: 08 95 ret
-
- 000003fe <digitalRead>:
-
- SREG = oldSREG;
- }
-
- int digitalRead(uint8_t pin)
- {
- 3fe: cf 93 push r28
- 400: df 93 push r29
- uint8_t timer = digitalPinToTimer(pin);
- 402: 28 2f mov r18, r24
- 404: 30 e0 ldi r19, 0x00 ; 0
- 406: f9 01 movw r30, r18
- 408: e2 55 subi r30, 0x52 ; 82
- 40a: ff 4f sbci r31, 0xFF ; 255
- 40c: 84 91 lpm r24, Z
- uint8_t bit = digitalPinToBitMask(pin);
- 40e: f9 01 movw r30, r18
- 410: e6 56 subi r30, 0x66 ; 102
- 412: ff 4f sbci r31, 0xFF ; 255
- 414: d4 91 lpm r29, Z
- uint8_t port = digitalPinToPort(pin);
- 416: f9 01 movw r30, r18
- 418: ea 57 subi r30, 0x7A ; 122
- 41a: ff 4f sbci r31, 0xFF ; 255
- 41c: c4 91 lpm r28, Z
-
- if (port == NOT_A_PIN) return LOW;
- 41e: cc 23 and r28, r28
- 420: 91 f0 breq .+36 ; 0x446 <__LOCK_REGION_LENGTH__+0x46>
-
- // If the pin that support PWM output, we need to turn it off
- // before getting a digital reading.
- if (timer != NOT_ON_TIMER) turnOffPWM(timer);
- 422: 81 11 cpse r24, r1
- 424: 0e 94 d6 01 call 0x3ac ; 0x3ac <turnOffPWM>
-
- if (*portInputRegister(port) & bit) return HIGH;
- 428: ec 2f mov r30, r28
- 42a: f0 e0 ldi r31, 0x00 ; 0
- 42c: ee 0f add r30, r30
- 42e: ff 1f adc r31, r31
- 430: e4 58 subi r30, 0x84 ; 132
- 432: ff 4f sbci r31, 0xFF ; 255
- 434: a5 91 lpm r26, Z+
- 436: b4 91 lpm r27, Z
- 438: ec 91 ld r30, X
- 43a: ed 23 and r30, r29
- 43c: 81 e0 ldi r24, 0x01 ; 1
- 43e: 90 e0 ldi r25, 0x00 ; 0
- 440: 21 f4 brne .+8 ; 0x44a <__LOCK_REGION_LENGTH__+0x4a>
- 442: 80 e0 ldi r24, 0x00 ; 0
- 444: 02 c0 rjmp .+4 ; 0x44a <__LOCK_REGION_LENGTH__+0x4a>
- {
- uint8_t timer = digitalPinToTimer(pin);
- uint8_t bit = digitalPinToBitMask(pin);
- uint8_t port = digitalPinToPort(pin);
-
- if (port == NOT_A_PIN) return LOW;
- 446: 80 e0 ldi r24, 0x00 ; 0
- 448: 90 e0 ldi r25, 0x00 ; 0
- // before getting a digital reading.
- if (timer != NOT_ON_TIMER) turnOffPWM(timer);
-
- if (*portInputRegister(port) & bit) return HIGH;
- return LOW;
- }
- 44a: df 91 pop r29
- 44c: cf 91 pop r28
- 44e: 08 95 ret
-
- 00000450 <digitalWrite>:
- #endif
- }
- }
-
- void digitalWrite(uint8_t pin, uint8_t val)
- {
- 450: 1f 93 push r17
- 452: cf 93 push r28
- 454: df 93 push r29
- uint8_t timer = digitalPinToTimer(pin);
- 456: 28 2f mov r18, r24
- 458: 30 e0 ldi r19, 0x00 ; 0
- 45a: f9 01 movw r30, r18
- 45c: e2 55 subi r30, 0x52 ; 82
- 45e: ff 4f sbci r31, 0xFF ; 255
- 460: 84 91 lpm r24, Z
- uint8_t bit = digitalPinToBitMask(pin);
- 462: f9 01 movw r30, r18
- 464: e6 56 subi r30, 0x66 ; 102
- 466: ff 4f sbci r31, 0xFF ; 255
- 468: d4 91 lpm r29, Z
- uint8_t port = digitalPinToPort(pin);
- 46a: f9 01 movw r30, r18
- 46c: ea 57 subi r30, 0x7A ; 122
- 46e: ff 4f sbci r31, 0xFF ; 255
- 470: c4 91 lpm r28, Z
- volatile uint8_t *out;
-
- if (port == NOT_A_PIN) return;
- 472: cc 23 and r28, r28
- 474: c9 f0 breq .+50 ; 0x4a8 <digitalWrite+0x58>
- 476: 16 2f mov r17, r22
-
- // 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);
- 478: 81 11 cpse r24, r1
- 47a: 0e 94 d6 01 call 0x3ac ; 0x3ac <turnOffPWM>
-
- out = portOutputRegister(port);
- 47e: ec 2f mov r30, r28
- 480: f0 e0 ldi r31, 0x00 ; 0
- 482: ee 0f add r30, r30
- 484: ff 1f adc r31, r31
- 486: ee 58 subi r30, 0x8E ; 142
- 488: ff 4f sbci r31, 0xFF ; 255
- 48a: a5 91 lpm r26, Z+
- 48c: b4 91 lpm r27, Z
-
- uint8_t oldSREG = SREG;
- 48e: 8f b7 in r24, 0x3f ; 63
- cli();
- 490: f8 94 cli
-
- if (val == LOW) {
- 492: 11 11 cpse r17, r1
- 494: 05 c0 rjmp .+10 ; 0x4a0 <digitalWrite+0x50>
- *out &= ~bit;
- 496: 9c 91 ld r25, X
- 498: ed 2f mov r30, r29
- 49a: e0 95 com r30
- 49c: e9 23 and r30, r25
- 49e: 02 c0 rjmp .+4 ; 0x4a4 <digitalWrite+0x54>
- } else {
- *out |= bit;
- 4a0: ec 91 ld r30, X
- 4a2: ed 2b or r30, r29
- 4a4: ec 93 st X, r30
- }
-
- SREG = oldSREG;
- 4a6: 8f bf out 0x3f, r24 ; 63
- }
- 4a8: df 91 pop r29
- 4aa: cf 91 pop r28
- 4ac: 1f 91 pop r17
- 4ae: 08 95 ret
-
- 000004b0 <pinMode>:
- #define ARDUINO_MAIN
- #include "wiring_private.h"
- #include "pins_arduino.h"
-
- void pinMode(uint8_t pin, uint8_t mode)
- {
- 4b0: cf 93 push r28
- 4b2: df 93 push r29
- uint8_t bit = digitalPinToBitMask(pin);
- 4b4: 90 e0 ldi r25, 0x00 ; 0
- 4b6: fc 01 movw r30, r24
- 4b8: e6 56 subi r30, 0x66 ; 102
- 4ba: ff 4f sbci r31, 0xFF ; 255
- 4bc: 24 91 lpm r18, Z
- uint8_t port = digitalPinToPort(pin);
- 4be: fc 01 movw r30, r24
- 4c0: ea 57 subi r30, 0x7A ; 122
- 4c2: ff 4f sbci r31, 0xFF ; 255
- 4c4: 84 91 lpm r24, Z
- volatile uint8_t *reg, *out;
-
- if (port == NOT_A_PIN) return;
- 4c6: 88 23 and r24, r24
- 4c8: 61 f1 breq .+88 ; 0x522 <pinMode+0x72>
-
- // JWS: can I let the optimizer do this?
- reg = portModeRegister(port);
- 4ca: 90 e0 ldi r25, 0x00 ; 0
- 4cc: 88 0f add r24, r24
- 4ce: 99 1f adc r25, r25
- 4d0: fc 01 movw r30, r24
- 4d2: e8 59 subi r30, 0x98 ; 152
- 4d4: ff 4f sbci r31, 0xFF ; 255
- 4d6: c5 91 lpm r28, Z+
- 4d8: d4 91 lpm r29, Z
- out = portOutputRegister(port);
- 4da: fc 01 movw r30, r24
- 4dc: ee 58 subi r30, 0x8E ; 142
- 4de: ff 4f sbci r31, 0xFF ; 255
- 4e0: a5 91 lpm r26, Z+
- 4e2: b4 91 lpm r27, Z
-
- if (mode == INPUT) {
- 4e4: 61 11 cpse r22, r1
- 4e6: 09 c0 rjmp .+18 ; 0x4fa <pinMode+0x4a>
- uint8_t oldSREG = SREG;
- 4e8: 9f b7 in r25, 0x3f ; 63
- cli();
- 4ea: f8 94 cli
- *reg &= ~bit;
- 4ec: 88 81 ld r24, Y
- 4ee: 20 95 com r18
- 4f0: 82 23 and r24, r18
- 4f2: 88 83 st Y, r24
- *out &= ~bit;
- 4f4: ec 91 ld r30, X
- 4f6: 2e 23 and r18, r30
- 4f8: 0b c0 rjmp .+22 ; 0x510 <pinMode+0x60>
- SREG = oldSREG;
- } else if (mode == INPUT_PULLUP) {
- 4fa: 62 30 cpi r22, 0x02 ; 2
- 4fc: 61 f4 brne .+24 ; 0x516 <pinMode+0x66>
- uint8_t oldSREG = SREG;
- 4fe: 9f b7 in r25, 0x3f ; 63
- cli();
- 500: f8 94 cli
- *reg &= ~bit;
- 502: 38 81 ld r19, Y
- 504: 82 2f mov r24, r18
- 506: 80 95 com r24
- 508: 83 23 and r24, r19
- 50a: 88 83 st Y, r24
- *out |= bit;
- 50c: ec 91 ld r30, X
- 50e: 2e 2b or r18, r30
- 510: 2c 93 st X, r18
- SREG = oldSREG;
- 512: 9f bf out 0x3f, r25 ; 63
- 514: 06 c0 rjmp .+12 ; 0x522 <pinMode+0x72>
- } else {
- uint8_t oldSREG = SREG;
- 516: 8f b7 in r24, 0x3f ; 63
- cli();
- 518: f8 94 cli
- *reg |= bit;
- 51a: e8 81 ld r30, Y
- 51c: 2e 2b or r18, r30
- 51e: 28 83 st Y, r18
- SREG = oldSREG;
- 520: 8f bf out 0x3f, r24 ; 63
- }
- }
- 522: df 91 pop r29
- 524: cf 91 pop r28
- 526: 08 95 ret
-
- 00000528 <micros>:
- return m;
- }
-
- unsigned long micros() {
- unsigned long m;
- uint8_t oldSREG = SREG, t;
- 528: 3f b7 in r19, 0x3f ; 63
-
- cli();
- 52a: f8 94 cli
- m = timer0_overflow_count;
- 52c: 80 91 1d 01 lds r24, 0x011D ; 0x80011d <timer0_overflow_count>
- 530: 90 91 1e 01 lds r25, 0x011E ; 0x80011e <timer0_overflow_count+0x1>
- 534: a0 91 1f 01 lds r26, 0x011F ; 0x80011f <timer0_overflow_count+0x2>
- 538: b0 91 20 01 lds r27, 0x0120 ; 0x800120 <timer0_overflow_count+0x3>
- #if defined(TCNT0)
- t = TCNT0;
- 53c: 26 b5 in r18, 0x26 ; 38
- #else
- #error TIMER 0 not defined
- #endif
-
- #ifdef TIFR0
- if ((TIFR0 & _BV(TOV0)) && (t < 255))
- 53e: a8 9b sbis 0x15, 0 ; 21
- 540: 05 c0 rjmp .+10 ; 0x54c <micros+0x24>
- 542: 2f 3f cpi r18, 0xFF ; 255
- 544: 19 f0 breq .+6 ; 0x54c <micros+0x24>
- m++;
- 546: 01 96 adiw r24, 0x01 ; 1
- 548: a1 1d adc r26, r1
- 54a: b1 1d adc r27, r1
- #else
- if ((TIFR & _BV(TOV0)) && (t < 255))
- m++;
- #endif
-
- SREG = oldSREG;
- 54c: 3f bf out 0x3f, r19 ; 63
-
- return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
- 54e: ba 2f mov r27, r26
- 550: a9 2f mov r26, r25
- 552: 98 2f mov r25, r24
- 554: 88 27 eor r24, r24
- 556: 82 0f add r24, r18
- 558: 91 1d adc r25, r1
- 55a: a1 1d adc r26, r1
- 55c: b1 1d adc r27, r1
- 55e: bc 01 movw r22, r24
- 560: cd 01 movw r24, r26
- 562: 42 e0 ldi r20, 0x02 ; 2
- 564: 66 0f add r22, r22
- 566: 77 1f adc r23, r23
- 568: 88 1f adc r24, r24
- 56a: 99 1f adc r25, r25
- 56c: 4a 95 dec r20
- 56e: d1 f7 brne .-12 ; 0x564 <micros+0x3c>
- }
- 570: 08 95 ret
-
- 00000572 <checkCLKandBIN()>:
-
-
-
- //sample on falling edge (middle of bit)
- }
- void checkCLKandBIN(void){
- 572: 0f 93 push r16
- 574: 1f 93 push r17
- 576: cf 93 push r28
- 578: df 93 push r29
-
-
- #endif
-
- // busy wait
- __asm__ __volatile__ (
- 57a: 03 e2 ldi r16, 0x23 ; 35
- 57c: 10 e0 ldi r17, 0x00 ; 0
- * clk++
- * sample hzbinary
- * while clk low do nothing
- */
- //milliscompare = millis();
- while((hzclkval = digitalRead(hzclk)) == HIGH){
- 57e: 87 e0 ldi r24, 0x07 ; 7
- 580: 0e 94 ff 01 call 0x3fe ; 0x3fe <digitalRead>
- 584: d8 2f mov r29, r24
- 586: 80 93 16 01 sts 0x0116, r24 ; 0x800116 <__data_end>
- 58a: 81 30 cpi r24, 0x01 ; 1
- 58c: b9 f4 brne .+46 ; 0x5bc <checkCLKandBIN()+0x4a>
- if(readyet == 0){
- 58e: 80 91 17 01 lds r24, 0x0117 ; 0x800117 <readyet>
- 592: 81 11 cpse r24, r1
- 594: 0f c0 rjmp .+30 ; 0x5b4 <checkCLKandBIN()+0x42>
- hzbinval[clkval] = digitalRead(hzbinary);
- 596: c0 91 46 01 lds r28, 0x0146 ; 0x800146 <clkval>
- 59a: 86 e0 ldi r24, 0x06 ; 6
- 59c: 0e 94 ff 01 call 0x3fe ; 0x3fe <digitalRead>
- 5a0: ec 2f mov r30, r28
- 5a2: f0 e0 ldi r31, 0x00 ; 0
- 5a4: ed 5d subi r30, 0xDD ; 221
- 5a6: fe 4f sbci r31, 0xFE ; 254
- 5a8: 80 83 st Z, r24
- clkval++;
- 5aa: cf 5f subi r28, 0xFF ; 255
- 5ac: c0 93 46 01 sts 0x0146, r28 ; 0x800146 <clkval>
- readyet = 1;
- 5b0: d0 93 17 01 sts 0x0117, r29 ; 0x800117 <readyet>
- 5b4: c8 01 movw r24, r16
- 5b6: 01 97 sbiw r24, 0x01 ; 1
- 5b8: f1 f7 brne .-4 ; 0x5b6 <checkCLKandBIN()+0x44>
- 5ba: e1 cf rjmp .-62 ; 0x57e <checkCLKandBIN()+0xc>
- }
- delayMicroseconds(10);
- }
- while((hzclkval = digitalRead(hzclk)) == LOW){
- 5bc: 87 e0 ldi r24, 0x07 ; 7
- 5be: 0e 94 ff 01 call 0x3fe ; 0x3fe <digitalRead>
- 5c2: 80 93 16 01 sts 0x0116, r24 ; 0x800116 <__data_end>
- 5c6: 81 11 cpse r24, r1
- 5c8: 03 c0 rjmp .+6 ; 0x5d0 <checkCLKandBIN()+0x5e>
- delayMicroseconds(1);
- readyet = 0;
- 5ca: 10 92 17 01 sts 0x0117, r1 ; 0x800117 <readyet>
- 5ce: f6 cf rjmp .-20 ; 0x5bc <checkCLKandBIN()+0x4a>
-
- //would be nice to add a picture to this source code (waveform)
- //or oscope picture
- //why isn't this possible?
-
- }
- 5d0: df 91 pop r29
- 5d2: cf 91 pop r28
- 5d4: 1f 91 pop r17
- 5d6: 0f 91 pop r16
- 5d8: 08 95 ret
-
- 000005da <LedControl::spiTransfer(int, unsigned char, unsigned char)>:
- v|=B10000000;
- status[offset+digit]=v;
- spiTransfer(addr, digit+1,v);
- }
-
- void LedControl::spiTransfer(int addr, volatile byte opcode, volatile byte data) {
- 5da: 2f 92 push r2
- 5dc: 3f 92 push r3
- 5de: 4f 92 push r4
- 5e0: 5f 92 push r5
- 5e2: 6f 92 push r6
- 5e4: 7f 92 push r7
- 5e6: 8f 92 push r8
- 5e8: 9f 92 push r9
- 5ea: af 92 push r10
- 5ec: bf 92 push r11
- 5ee: cf 92 push r12
- 5f0: df 92 push r13
- 5f2: ef 92 push r14
- 5f4: ff 92 push r15
- 5f6: 0f 93 push r16
- 5f8: 1f 93 push r17
- 5fa: cf 93 push r28
- 5fc: df 93 push r29
- 5fe: 00 d0 rcall .+0 ; 0x600 <LedControl::spiTransfer(int, unsigned char, unsigned char)+0x26>
- 600: cd b7 in r28, 0x3d ; 61
- 602: de b7 in r29, 0x3e ; 62
- 604: 8c 01 movw r16, r24
- 606: 49 83 std Y+1, r20 ; 0x01
- 608: 2a 83 std Y+2, r18 ; 0x02
- //Create an array with the data to shift out
- int offset=addr*2;
- 60a: 66 0f add r22, r22
- 60c: 77 1f adc r23, r23
- int maxbytes=maxDevices*2;
- 60e: f8 01 movw r30, r16
- 610: ea 5a subi r30, 0xAA ; 170
- 612: ff 4f sbci r31, 0xFF ; 255
- 614: e0 80 ld r14, Z
- 616: f1 80 ldd r15, Z+1 ; 0x01
- 618: ee 0c add r14, r14
- 61a: ff 1c adc r15, r15
- 61c: f8 01 movw r30, r16
- 61e: cf 01 movw r24, r30
- 620: 80 1b sub r24, r16
- 622: 91 0b sbc r25, r17
-
- for(int i=0;i<maxbytes;i++)
- 624: 8e 15 cp r24, r14
- 626: 9f 05 cpc r25, r15
- 628: 14 f4 brge .+4 ; 0x62e <LedControl::spiTransfer(int, unsigned char, unsigned char)+0x54>
- spidata[i]=(byte)0;
- 62a: 11 92 st Z+, r1
- 62c: f8 cf rjmp .-16 ; 0x61e <LedControl::spiTransfer(int, unsigned char, unsigned char)+0x44>
- //put our device data into the array
- spidata[offset+1]=opcode;
- 62e: 89 81 ldd r24, Y+1 ; 0x01
- 630: f8 01 movw r30, r16
- 632: e6 0f add r30, r22
- 634: f7 1f adc r31, r23
- 636: 81 83 std Z+1, r24 ; 0x01
- spidata[offset]=data;
- 638: 8a 81 ldd r24, Y+2 ; 0x02
- 63a: 80 83 st Z, r24
- //enable the line
- digitalWrite(SPI_CS,LOW);
- 63c: 58 01 movw r10, r16
- 63e: 84 e5 ldi r24, 0x54 ; 84
- 640: a8 0e add r10, r24
- 642: b1 1c adc r11, r1
- 644: 60 e0 ldi r22, 0x00 ; 0
- 646: f5 01 movw r30, r10
- 648: 80 81 ld r24, Z
- 64a: 0e 94 28 02 call 0x450 ; 0x450 <digitalWrite>
- 64e: e0 0e add r14, r16
- 650: f1 1e adc r15, r17
- //Now shift out the data
- for(int i=maxbytes;i>0;i--)
- shiftOut(SPI_MOSI,SPI_CLK,MSBFIRST,spidata[i-1]);
- 652: 48 01 movw r8, r16
- 654: f2 e5 ldi r31, 0x52 ; 82
- 656: 8f 0e add r8, r31
- 658: 91 1c adc r9, r1
- 65a: 38 01 movw r6, r16
- 65c: 80 e5 ldi r24, 0x50 ; 80
- 65e: 68 0e add r6, r24
- 660: 71 1c adc r7, r1
- 662: c7 01 movw r24, r14
- 664: 80 1b sub r24, r16
- 666: 91 0b sbc r25, r17
- spidata[offset+1]=opcode;
- spidata[offset]=data;
- //enable the line
- digitalWrite(SPI_CS,LOW);
- //Now shift out the data
- for(int i=maxbytes;i>0;i--)
- 668: 18 16 cp r1, r24
- 66a: 19 06 cpc r1, r25
- 66c: 24 f5 brge .+72 ; 0x6b6 <LedControl::spiTransfer(int, unsigned char, unsigned char)+0xdc>
- shiftOut(SPI_MOSI,SPI_CLK,MSBFIRST,spidata[i-1]);
- 66e: f7 01 movw r30, r14
- 670: c2 90 ld r12, -Z
- 672: 7f 01 movw r14, r30
- 674: f4 01 movw r30, r8
- 676: 30 80 ld r3, Z
- 678: f3 01 movw r30, r6
- 67a: 20 80 ld r2, Z
- 67c: 87 e0 ldi r24, 0x07 ; 7
- 67e: 48 2e mov r4, r24
- 680: 51 2c mov r5, r1
-
- for (i = 0; i < 8; i++) {
- if (bitOrder == LSBFIRST)
- digitalWrite(dataPin, !!(val & (1 << i)));
- else
- digitalWrite(dataPin, !!(val & (1 << (7 - i))));
- 682: d1 2c mov r13, r1
- 684: b6 01 movw r22, r12
- 686: 04 2c mov r0, r4
- 688: 02 c0 rjmp .+4 ; 0x68e <LedControl::spiTransfer(int, unsigned char, unsigned char)+0xb4>
- 68a: 75 95 asr r23
- 68c: 67 95 ror r22
- 68e: 0a 94 dec r0
- 690: e2 f7 brpl .-8 ; 0x68a <LedControl::spiTransfer(int, unsigned char, unsigned char)+0xb0>
- 692: 61 70 andi r22, 0x01 ; 1
- 694: 77 27 eor r23, r23
- 696: 82 2d mov r24, r2
- 698: 0e 94 28 02 call 0x450 ; 0x450 <digitalWrite>
-
- digitalWrite(clockPin, HIGH);
- 69c: 61 e0 ldi r22, 0x01 ; 1
- 69e: 83 2d mov r24, r3
- 6a0: 0e 94 28 02 call 0x450 ; 0x450 <digitalWrite>
- digitalWrite(clockPin, LOW);
- 6a4: 60 e0 ldi r22, 0x00 ; 0
- 6a6: 83 2d mov r24, r3
- 6a8: 0e 94 28 02 call 0x450 ; 0x450 <digitalWrite>
- 6ac: f1 e0 ldi r31, 0x01 ; 1
- 6ae: 4f 1a sub r4, r31
- 6b0: 51 08 sbc r5, r1
- 6b2: 40 f7 brcc .-48 ; 0x684 <LedControl::spiTransfer(int, unsigned char, unsigned char)+0xaa>
- 6b4: d6 cf rjmp .-84 ; 0x662 <LedControl::spiTransfer(int, unsigned char, unsigned char)+0x88>
- //latch the data onto the display
- digitalWrite(SPI_CS,HIGH);
- 6b6: 61 e0 ldi r22, 0x01 ; 1
- 6b8: f5 01 movw r30, r10
- 6ba: 80 81 ld r24, Z
- }
- 6bc: 0f 90 pop r0
- 6be: 0f 90 pop r0
- 6c0: df 91 pop r29
- 6c2: cf 91 pop r28
- 6c4: 1f 91 pop r17
- 6c6: 0f 91 pop r16
- 6c8: ff 90 pop r15
- 6ca: ef 90 pop r14
- 6cc: df 90 pop r13
- 6ce: cf 90 pop r12
- 6d0: bf 90 pop r11
- 6d2: af 90 pop r10
- 6d4: 9f 90 pop r9
- 6d6: 8f 90 pop r8
- 6d8: 7f 90 pop r7
- 6da: 6f 90 pop r6
- 6dc: 5f 90 pop r5
- 6de: 4f 90 pop r4
- 6e0: 3f 90 pop r3
- 6e2: 2f 90 pop r2
- digitalWrite(SPI_CS,LOW);
- //Now shift out the data
- for(int i=maxbytes;i>0;i--)
- shiftOut(SPI_MOSI,SPI_CLK,MSBFIRST,spidata[i-1]);
- //latch the data onto the display
- digitalWrite(SPI_CS,HIGH);
- 6e4: 0c 94 28 02 jmp 0x450 ; 0x450 <digitalWrite>
-
- 000006e8 <LedControl::setDigit(int, int, unsigned char, bool) [clone .constprop.15]>:
-
- void LedControl::setDigit(int addr, int digit, byte value, boolean dp) {
- int offset;
- byte v;
-
- if(addr<0 || addr>=maxDevices)
- 6e8: 20 91 3a 02 lds r18, 0x023A ; 0x80023a <lc+0x56>
- 6ec: 30 91 3b 02 lds r19, 0x023B ; 0x80023b <lc+0x57>
- 6f0: 12 16 cp r1, r18
- 6f2: 13 06 cpc r1, r19
- 6f4: b4 f4 brge .+44 ; 0x722 <LedControl::setDigit(int, int, unsigned char, bool) [clone .constprop.15]+0x3a>
- return;
- if(digit<0 || digit>7 || value>15)
- 6f6: 88 30 cpi r24, 0x08 ; 8
- 6f8: 91 05 cpc r25, r1
- 6fa: 98 f4 brcc .+38 ; 0x722 <LedControl::setDigit(int, int, unsigned char, bool) [clone .constprop.15]+0x3a>
- 6fc: 60 31 cpi r22, 0x10 ; 16
- 6fe: 88 f4 brcc .+34 ; 0x722 <LedControl::setDigit(int, int, unsigned char, bool) [clone .constprop.15]+0x3a>
- return;
- offset=addr*8;
- v=pgm_read_byte_near(charTable + value);
- 700: e6 2f mov r30, r22
- 702: f0 e0 ldi r31, 0x00 ; 0
- 704: ee 53 subi r30, 0x3E ; 62
- 706: ff 4f sbci r31, 0xFF ; 255
- 708: 24 91 lpm r18, Z
- if(dp)
- v|=B10000000;
- status[offset+digit]=v;
- 70a: fc 01 movw r30, r24
- 70c: ec 51 subi r30, 0x1C ; 28
- 70e: fe 4f sbci r31, 0xFE ; 254
- 710: 20 8b std Z+16, r18 ; 0x10
- spiTransfer(addr, digit+1,v);
- 712: 41 e0 ldi r20, 0x01 ; 1
- 714: 48 0f add r20, r24
- 716: 60 e0 ldi r22, 0x00 ; 0
- 718: 70 e0 ldi r23, 0x00 ; 0
- 71a: 84 ee ldi r24, 0xE4 ; 228
- 71c: 91 e0 ldi r25, 0x01 ; 1
- 71e: 0c 94 ed 02 jmp 0x5da ; 0x5da <LedControl::spiTransfer(int, unsigned char, unsigned char)>
- 722: 08 95 ret
-
- 00000724 <LedControl::clearDisplay(int)>:
- return;
- if(intensity>=0 && intensity<16)
- spiTransfer(addr, OP_INTENSITY,intensity);
- }
-
- void LedControl::clearDisplay(int addr) {
- 724: cf 92 push r12
- 726: df 92 push r13
- 728: ef 92 push r14
- 72a: ff 92 push r15
- 72c: 0f 93 push r16
- 72e: 1f 93 push r17
- 730: cf 93 push r28
- 732: df 93 push r29
- int offset;
-
- if(addr<0 || addr>=maxDevices)
- 734: 77 fd sbrc r23, 7
- 736: 23 c0 rjmp .+70 ; 0x77e <LedControl::clearDisplay(int)+0x5a>
- 738: fc 01 movw r30, r24
- 73a: ea 5a subi r30, 0xAA ; 170
- 73c: ff 4f sbci r31, 0xFF ; 255
- 73e: 20 81 ld r18, Z
- 740: 31 81 ldd r19, Z+1 ; 0x01
- 742: 62 17 cp r22, r18
- 744: 73 07 cpc r23, r19
- 746: dc f4 brge .+54 ; 0x77e <LedControl::clearDisplay(int)+0x5a>
- 748: eb 01 movw r28, r22
- 74a: 7c 01 movw r14, r24
- return;
- offset=addr*8;
- 74c: 6b 01 movw r12, r22
- 74e: 83 e0 ldi r24, 0x03 ; 3
- 750: cc 0c add r12, r12
- 752: dd 1c adc r13, r13
- 754: 8a 95 dec r24
- 756: e1 f7 brne .-8 ; 0x750 <LedControl::clearDisplay(int)+0x2c>
- 758: 01 e0 ldi r16, 0x01 ; 1
- 75a: 10 e0 ldi r17, 0x00 ; 0
- 75c: f8 01 movw r30, r16
- 75e: ec 0d add r30, r12
- 760: fd 1d adc r31, r13
- 762: ee 0d add r30, r14
- 764: ff 1d adc r31, r15
- for(int i=0;i<8;i++) {
- status[offset+i]=0;
- 766: 17 86 std Z+15, r1 ; 0x0f
- spiTransfer(addr, i+1,status[offset+i]);
- 768: 20 e0 ldi r18, 0x00 ; 0
- 76a: 40 2f mov r20, r16
- 76c: be 01 movw r22, r28
- 76e: c7 01 movw r24, r14
- 770: 0e 94 ed 02 call 0x5da ; 0x5da <LedControl::spiTransfer(int, unsigned char, unsigned char)>
- 774: 0f 5f subi r16, 0xFF ; 255
- 776: 1f 4f sbci r17, 0xFF ; 255
- int offset;
-
- if(addr<0 || addr>=maxDevices)
- return;
- offset=addr*8;
- for(int i=0;i<8;i++) {
- 778: 09 30 cpi r16, 0x09 ; 9
- 77a: 11 05 cpc r17, r1
- 77c: 79 f7 brne .-34 ; 0x75c <LedControl::clearDisplay(int)+0x38>
- status[offset+i]=0;
- spiTransfer(addr, i+1,status[offset+i]);
- }
- }
- 77e: df 91 pop r29
- 780: cf 91 pop r28
- 782: 1f 91 pop r17
- 784: 0f 91 pop r16
- 786: ff 90 pop r15
- 788: ef 90 pop r14
- 78a: df 90 pop r13
- 78c: cf 90 pop r12
- 78e: 08 95 ret
-
- 00000790 <Print::write(char const*) [clone .constprop.10]>:
- 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;
- 790: 00 97 sbiw r24, 0x00 ; 0
- 792: 69 f0 breq .+26 ; 0x7ae <Print::write(char const*) [clone .constprop.10]+0x1e>
- return write((const uint8_t *)str, strlen(str));
- 794: fc 01 movw r30, r24
- 796: 01 90 ld r0, Z+
- 798: 00 20 and r0, r0
- 79a: e9 f7 brne .-6 ; 0x796 <Print::write(char const*) [clone .constprop.10]+0x6>
- 79c: 31 97 sbiw r30, 0x01 ; 1
- 79e: af 01 movw r20, r30
- 7a0: 48 1b sub r20, r24
- 7a2: 59 0b sbc r21, r25
- 7a4: bc 01 movw r22, r24
- 7a6: 87 e4 ldi r24, 0x47 ; 71
- 7a8: 91 e0 ldi r25, 0x01 ; 1
- 7aa: 0c 94 cc 00 jmp 0x198 ; 0x198 <Print::write(unsigned char const*, unsigned int)>
- }
- 7ae: 80 e0 ldi r24, 0x00 ; 0
- 7b0: 90 e0 ldi r25, 0x00 ; 0
- 7b2: 08 95 ret
-
- 000007b4 <Print::printNumber(unsigned long, unsigned char) [clone .constprop.7]>:
- return n;
- }
-
- // Private Methods /////////////////////////////////////////////////////////////
-
- size_t Print::printNumber(unsigned long n, uint8_t base)
- 7b4: 8f 92 push r8
- 7b6: 9f 92 push r9
- 7b8: af 92 push r10
- 7ba: bf 92 push r11
- 7bc: 0f 93 push r16
- 7be: 1f 93 push r17
- 7c0: cf 93 push r28
- 7c2: df 93 push r29
- 7c4: cd b7 in r28, 0x3d ; 61
- 7c6: de b7 in r29, 0x3e ; 62
- 7c8: a1 97 sbiw r28, 0x21 ; 33
- 7ca: 0f b6 in r0, 0x3f ; 63
- 7cc: f8 94 cli
- 7ce: de bf out 0x3e, r29 ; 62
- 7d0: 0f be out 0x3f, r0 ; 63
- 7d2: cd bf out 0x3d, r28 ; 61
- {
- char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
- char *str = &buf[sizeof(buf) - 1];
-
- *str = '\0';
- 7d4: 19 a2 std Y+33, r1 ; 0x21
-
- // prevent crash if called with base == 1
- if (base < 2) base = 10;
- 7d6: 42 30 cpi r20, 0x02 ; 2
- 7d8: 08 f4 brcc .+2 ; 0x7dc <Print::printNumber(unsigned long, unsigned char) [clone .constprop.7]+0x28>
- 7da: 4a e0 ldi r20, 0x0A ; 10
- 7dc: 8e 01 movw r16, r28
- 7de: 0f 5d subi r16, 0xDF ; 223
- 7e0: 1f 4f sbci r17, 0xFF ; 255
-
- do {
- char c = n % base;
- 7e2: 84 2e mov r8, r20
- 7e4: 91 2c mov r9, r1
- 7e6: a1 2c mov r10, r1
- 7e8: b1 2c mov r11, r1
- 7ea: a5 01 movw r20, r10
- 7ec: 94 01 movw r18, r8
- 7ee: 0e 94 67 07 call 0xece ; 0xece <__udivmodsi4>
- 7f2: e6 2f mov r30, r22
- n /= base;
- 7f4: b9 01 movw r22, r18
- 7f6: ca 01 movw r24, r20
-
- *--str = c < 10 ? c + '0' : c + 'A' - 10;
- 7f8: 01 50 subi r16, 0x01 ; 1
- 7fa: 11 09 sbc r17, r1
- 7fc: ea 30 cpi r30, 0x0A ; 10
- 7fe: 14 f4 brge .+4 ; 0x804 <Print::printNumber(unsigned long, unsigned char) [clone .constprop.7]+0x50>
- 800: e0 5d subi r30, 0xD0 ; 208
- 802: 01 c0 rjmp .+2 ; 0x806 <Print::printNumber(unsigned long, unsigned char) [clone .constprop.7]+0x52>
- 804: e9 5c subi r30, 0xC9 ; 201
- 806: d8 01 movw r26, r16
- 808: ec 93 st X, r30
- *str = '\0';
-
- // prevent crash if called with base == 1
- if (base < 2) base = 10;
-
- do {
- 80a: 23 2b or r18, r19
- 80c: 24 2b or r18, r20
- 80e: 25 2b or r18, r21
- 810: 61 f7 brne .-40 ; 0x7ea <Print::printNumber(unsigned long, unsigned char) [clone .constprop.7]+0x36>
- n /= base;
-
- *--str = c < 10 ? c + '0' : c + 'A' - 10;
- } while(n);
-
- return write(str);
- 812: c8 01 movw r24, r16
- 814: 0e 94 c8 03 call 0x790 ; 0x790 <Print::write(char const*) [clone .constprop.10]>
- }
- 818: a1 96 adiw r28, 0x21 ; 33
- 81a: 0f b6 in r0, 0x3f ; 63
- 81c: f8 94 cli
- 81e: de bf out 0x3e, r29 ; 62
- 820: 0f be out 0x3f, r0 ; 63
- 822: cd bf out 0x3d, r28 ; 61
- 824: df 91 pop r29
- 826: cf 91 pop r28
- 828: 1f 91 pop r17
- 82a: 0f 91 pop r16
- 82c: bf 90 pop r11
- 82e: af 90 pop r10
- 830: 9f 90 pop r9
- 832: 8f 90 pop r8
- 834: 08 95 ret
-
- 00000836 <__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();
- 836: 0e 94 a3 07 call 0xf46 ; 0xf46 <abort>
-
- 0000083a <__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
- {
- 83a: 1f 92 push r1
- 83c: 0f 92 push r0
- 83e: 0f b6 in r0, 0x3f ; 63
- 840: 0f 92 push r0
- 842: 11 24 eor r1, r1
- 844: 2f 93 push r18
- 846: 3f 93 push r19
- 848: 4f 93 push r20
- 84a: 5f 93 push r21
- 84c: 6f 93 push r22
- 84e: 7f 93 push r23
- 850: 8f 93 push r24
- 852: 9f 93 push r25
- 854: af 93 push r26
- 856: bf 93 push r27
- 858: ef 93 push r30
- 85a: ff 93 push r31
- Serial._tx_udr_empty_irq();
- 85c: 87 e4 ldi r24, 0x47 ; 71
- 85e: 91 e0 ldi r25, 0x01 ; 1
- 860: 0e 94 42 01 call 0x284 ; 0x284 <HardwareSerial::_tx_udr_empty_irq()>
- }
- 864: ff 91 pop r31
- 866: ef 91 pop r30
- 868: bf 91 pop r27
- 86a: af 91 pop r26
- 86c: 9f 91 pop r25
- 86e: 8f 91 pop r24
- 870: 7f 91 pop r23
- 872: 6f 91 pop r22
- 874: 5f 91 pop r21
- 876: 4f 91 pop r20
- 878: 3f 91 pop r19
- 87a: 2f 91 pop r18
- 87c: 0f 90 pop r0
- 87e: 0f be out 0x3f, r0 ; 63
- 880: 0f 90 pop r0
- 882: 1f 90 pop r1
- 884: 18 95 reti
-
- 00000886 <__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
- {
- 886: 1f 92 push r1
- 888: 0f 92 push r0
- 88a: 0f b6 in r0, 0x3f ; 63
- 88c: 0f 92 push r0
- 88e: 11 24 eor r1, r1
- 890: 2f 93 push r18
- 892: 8f 93 push r24
- 894: 9f 93 push r25
- 896: ef 93 push r30
- 898: ff 93 push r31
-
- // Actual interrupt handlers //////////////////////////////////////////////////////////////
-
- void HardwareSerial::_rx_complete_irq(void)
- {
- if (bit_is_clear(*_ucsra, UPE0)) {
- 89a: e0 91 57 01 lds r30, 0x0157 ; 0x800157 <Serial+0x10>
- 89e: f0 91 58 01 lds r31, 0x0158 ; 0x800158 <Serial+0x11>
- 8a2: 80 81 ld r24, Z
- 8a4: e0 91 5d 01 lds r30, 0x015D ; 0x80015d <Serial+0x16>
- 8a8: f0 91 5e 01 lds r31, 0x015E ; 0x80015e <Serial+0x17>
- 8ac: 82 fd sbrc r24, 2
- 8ae: 12 c0 rjmp .+36 ; 0x8d4 <__vector_18+0x4e>
- // No Parity error, read byte and store it in the buffer if there is
- // room
- unsigned char c = *_udr;
- 8b0: 90 81 ld r25, Z
- rx_buffer_index_t i = (unsigned int)(_rx_buffer_head + 1) % SERIAL_RX_BUFFER_SIZE;
- 8b2: 80 91 60 01 lds r24, 0x0160 ; 0x800160 <Serial+0x19>
- 8b6: 8f 5f subi r24, 0xFF ; 255
- 8b8: 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) {
- 8ba: 20 91 61 01 lds r18, 0x0161 ; 0x800161 <Serial+0x1a>
- 8be: 82 17 cp r24, r18
- 8c0: 51 f0 breq .+20 ; 0x8d6 <__vector_18+0x50>
- _rx_buffer[_rx_buffer_head] = c;
- 8c2: e0 91 60 01 lds r30, 0x0160 ; 0x800160 <Serial+0x19>
- 8c6: f0 e0 ldi r31, 0x00 ; 0
- 8c8: e9 5b subi r30, 0xB9 ; 185
- 8ca: fe 4f sbci r31, 0xFE ; 254
- 8cc: 95 8f std Z+29, r25 ; 0x1d
- _rx_buffer_head = i;
- 8ce: 80 93 60 01 sts 0x0160, r24 ; 0x800160 <Serial+0x19>
- 8d2: 01 c0 rjmp .+2 ; 0x8d6 <__vector_18+0x50>
- }
- } else {
- // Parity error, read byte but discard it
- *_udr;
- 8d4: 80 81 ld r24, Z
- Serial._rx_complete_irq();
- }
- 8d6: ff 91 pop r31
- 8d8: ef 91 pop r30
- 8da: 9f 91 pop r25
- 8dc: 8f 91 pop r24
- 8de: 2f 91 pop r18
- 8e0: 0f 90 pop r0
- 8e2: 0f be out 0x3f, r0 ; 63
- 8e4: 0f 90 pop r0
- 8e6: 1f 90 pop r1
- 8e8: 18 95 reti
-
- 000008ea <__vector_16>:
- #if defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
- ISR(TIM0_OVF_vect)
- #else
- ISR(TIMER0_OVF_vect)
- #endif
- {
- 8ea: 1f 92 push r1
- 8ec: 0f 92 push r0
- 8ee: 0f b6 in r0, 0x3f ; 63
- 8f0: 0f 92 push r0
- 8f2: 11 24 eor r1, r1
- 8f4: 2f 93 push r18
- 8f6: 3f 93 push r19
- 8f8: 8f 93 push r24
- 8fa: 9f 93 push r25
- 8fc: af 93 push r26
- 8fe: 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;
- 900: 80 91 19 01 lds r24, 0x0119 ; 0x800119 <timer0_millis>
- 904: 90 91 1a 01 lds r25, 0x011A ; 0x80011a <timer0_millis+0x1>
- 908: a0 91 1b 01 lds r26, 0x011B ; 0x80011b <timer0_millis+0x2>
- 90c: b0 91 1c 01 lds r27, 0x011C ; 0x80011c <timer0_millis+0x3>
- unsigned char f = timer0_fract;
- 910: 30 91 18 01 lds r19, 0x0118 ; 0x800118 <timer0_fract>
-
- m += MILLIS_INC;
- f += FRACT_INC;
- 914: 23 e0 ldi r18, 0x03 ; 3
- 916: 23 0f add r18, r19
- if (f >= FRACT_MAX) {
- 918: 2d 37 cpi r18, 0x7D ; 125
- 91a: 20 f4 brcc .+8 ; 0x924 <__stack+0x25>
- // 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;
- 91c: 01 96 adiw r24, 0x01 ; 1
- 91e: a1 1d adc r26, r1
- 920: b1 1d adc r27, r1
- 922: 05 c0 rjmp .+10 ; 0x92e <__stack+0x2f>
- f += FRACT_INC;
- if (f >= FRACT_MAX) {
- f -= FRACT_MAX;
- 924: 26 e8 ldi r18, 0x86 ; 134
- 926: 23 0f add r18, r19
- m += 1;
- 928: 02 96 adiw r24, 0x02 ; 2
- 92a: a1 1d adc r26, r1
- 92c: b1 1d adc r27, r1
- }
-
- timer0_fract = f;
- 92e: 20 93 18 01 sts 0x0118, r18 ; 0x800118 <timer0_fract>
- timer0_millis = m;
- 932: 80 93 19 01 sts 0x0119, r24 ; 0x800119 <timer0_millis>
- 936: 90 93 1a 01 sts 0x011A, r25 ; 0x80011a <timer0_millis+0x1>
- 93a: a0 93 1b 01 sts 0x011B, r26 ; 0x80011b <timer0_millis+0x2>
- 93e: b0 93 1c 01 sts 0x011C, r27 ; 0x80011c <timer0_millis+0x3>
- timer0_overflow_count++;
- 942: 80 91 1d 01 lds r24, 0x011D ; 0x80011d <timer0_overflow_count>
- 946: 90 91 1e 01 lds r25, 0x011E ; 0x80011e <timer0_overflow_count+0x1>
- 94a: a0 91 1f 01 lds r26, 0x011F ; 0x80011f <timer0_overflow_count+0x2>
- 94e: b0 91 20 01 lds r27, 0x0120 ; 0x800120 <timer0_overflow_count+0x3>
- 952: 01 96 adiw r24, 0x01 ; 1
- 954: a1 1d adc r26, r1
- 956: b1 1d adc r27, r1
- 958: 80 93 1d 01 sts 0x011D, r24 ; 0x80011d <timer0_overflow_count>
- 95c: 90 93 1e 01 sts 0x011E, r25 ; 0x80011e <timer0_overflow_count+0x1>
- 960: a0 93 1f 01 sts 0x011F, r26 ; 0x80011f <timer0_overflow_count+0x2>
- 964: b0 93 20 01 sts 0x0120, r27 ; 0x800120 <timer0_overflow_count+0x3>
- }
- 968: bf 91 pop r27
- 96a: af 91 pop r26
- 96c: 9f 91 pop r25
- 96e: 8f 91 pop r24
- 970: 3f 91 pop r19
- 972: 2f 91 pop r18
- 974: 0f 90 pop r0
- 976: 0f be out 0x3f, r0 ; 63
- 978: 0f 90 pop r0
- 97a: 1f 90 pop r1
- 97c: 18 95 reti
-
- 0000097e <global constructors keyed to 65535_0_shiftin_try6_wLED.ino.cpp.o.1832>:
- 97e: cf 93 push r28
- 980: df 93 push r29
- 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) {}
- 982: 10 92 4a 01 sts 0x014A, r1 ; 0x80014a <Serial+0x3>
- 986: 10 92 49 01 sts 0x0149, r1 ; 0x800149 <Serial+0x2>
- public:
- virtual int available() = 0;
- virtual int read() = 0;
- virtual int peek() = 0;
-
- Stream() {_timeout=1000;}
- 98a: 88 ee ldi r24, 0xE8 ; 232
- 98c: 93 e0 ldi r25, 0x03 ; 3
- 98e: a0 e0 ldi r26, 0x00 ; 0
- 990: b0 e0 ldi r27, 0x00 ; 0
- 992: 80 93 4b 01 sts 0x014B, r24 ; 0x80014b <Serial+0x4>
- 996: 90 93 4c 01 sts 0x014C, r25 ; 0x80014c <Serial+0x5>
- 99a: a0 93 4d 01 sts 0x014D, r26 ; 0x80014d <Serial+0x6>
- 99e: b0 93 4e 01 sts 0x014E, r27 ; 0x80014e <Serial+0x7>
- 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)
- 9a2: 84 e0 ldi r24, 0x04 ; 4
- 9a4: 91 e0 ldi r25, 0x01 ; 1
- 9a6: 90 93 48 01 sts 0x0148, r25 ; 0x800148 <Serial+0x1>
- 9aa: 80 93 47 01 sts 0x0147, r24 ; 0x800147 <Serial>
- 9ae: 85 ec ldi r24, 0xC5 ; 197
- 9b0: 90 e0 ldi r25, 0x00 ; 0
- 9b2: 90 93 54 01 sts 0x0154, r25 ; 0x800154 <Serial+0xd>
- 9b6: 80 93 53 01 sts 0x0153, r24 ; 0x800153 <Serial+0xc>
- 9ba: 84 ec ldi r24, 0xC4 ; 196
- 9bc: 90 e0 ldi r25, 0x00 ; 0
- 9be: 90 93 56 01 sts 0x0156, r25 ; 0x800156 <Serial+0xf>
- 9c2: 80 93 55 01 sts 0x0155, r24 ; 0x800155 <Serial+0xe>
- 9c6: 80 ec ldi r24, 0xC0 ; 192
- 9c8: 90 e0 ldi r25, 0x00 ; 0
- 9ca: 90 93 58 01 sts 0x0158, r25 ; 0x800158 <Serial+0x11>
- 9ce: 80 93 57 01 sts 0x0157, r24 ; 0x800157 <Serial+0x10>
- 9d2: 81 ec ldi r24, 0xC1 ; 193
- 9d4: 90 e0 ldi r25, 0x00 ; 0
- 9d6: 90 93 5a 01 sts 0x015A, r25 ; 0x80015a <Serial+0x13>
- 9da: 80 93 59 01 sts 0x0159, r24 ; 0x800159 <Serial+0x12>
- 9de: 82 ec ldi r24, 0xC2 ; 194
- 9e0: 90 e0 ldi r25, 0x00 ; 0
- 9e2: 90 93 5c 01 sts 0x015C, r25 ; 0x80015c <Serial+0x15>
- 9e6: 80 93 5b 01 sts 0x015B, r24 ; 0x80015b <Serial+0x14>
- 9ea: 86 ec ldi r24, 0xC6 ; 198
- 9ec: 90 e0 ldi r25, 0x00 ; 0
- 9ee: 90 93 5e 01 sts 0x015E, r25 ; 0x80015e <Serial+0x17>
- 9f2: 80 93 5d 01 sts 0x015D, r24 ; 0x80015d <Serial+0x16>
- 9f6: 10 92 60 01 sts 0x0160, r1 ; 0x800160 <Serial+0x19>
- 9fa: 10 92 61 01 sts 0x0161, r1 ; 0x800161 <Serial+0x1a>
- 9fe: 10 92 62 01 sts 0x0162, r1 ; 0x800162 <Serial+0x1b>
- a02: 10 92 63 01 sts 0x0163, r1 ; 0x800163 <Serial+0x1c>
- #define OP_SCANLIMIT 11
- #define OP_SHUTDOWN 12
- #define OP_DISPLAYTEST 15
-
- LedControl::LedControl(int dataPin, int clkPin, int csPin, int numDevices) {
- SPI_MOSI=dataPin;
- a06: cc e0 ldi r28, 0x0C ; 12
- a08: d0 e0 ldi r29, 0x00 ; 0
- a0a: d0 93 35 02 sts 0x0235, r29 ; 0x800235 <lc+0x51>
- a0e: c0 93 34 02 sts 0x0234, r28 ; 0x800234 <lc+0x50>
- SPI_CLK=clkPin;
- a12: 8b e0 ldi r24, 0x0B ; 11
- a14: 90 e0 ldi r25, 0x00 ; 0
- a16: 90 93 37 02 sts 0x0237, r25 ; 0x800237 <lc+0x53>
- a1a: 80 93 36 02 sts 0x0236, r24 ; 0x800236 <lc+0x52>
- SPI_CS=csPin;
- a1e: 8a e0 ldi r24, 0x0A ; 10
- a20: 90 e0 ldi r25, 0x00 ; 0
- a22: 90 93 39 02 sts 0x0239, r25 ; 0x800239 <lc+0x55>
- a26: 80 93 38 02 sts 0x0238, r24 ; 0x800238 <lc+0x54>
- if(numDevices<=0 || numDevices>8 )
- numDevices=8;
- maxDevices=numDevices;
- a2a: 81 e0 ldi r24, 0x01 ; 1
- a2c: 90 e0 ldi r25, 0x00 ; 0
- a2e: 90 93 3b 02 sts 0x023B, r25 ; 0x80023b <lc+0x57>
- a32: 80 93 3a 02 sts 0x023A, r24 ; 0x80023a <lc+0x56>
- pinMode(SPI_MOSI,OUTPUT);
- a36: 61 e0 ldi r22, 0x01 ; 1
- a38: 8c e0 ldi r24, 0x0C ; 12
- a3a: 0e 94 58 02 call 0x4b0 ; 0x4b0 <pinMode>
- pinMode(SPI_CLK,OUTPUT);
- a3e: 61 e0 ldi r22, 0x01 ; 1
- a40: 80 91 36 02 lds r24, 0x0236 ; 0x800236 <lc+0x52>
- a44: 0e 94 58 02 call 0x4b0 ; 0x4b0 <pinMode>
- pinMode(SPI_CS,OUTPUT);
- a48: 61 e0 ldi r22, 0x01 ; 1
- a4a: 80 91 38 02 lds r24, 0x0238 ; 0x800238 <lc+0x54>
- a4e: 0e 94 58 02 call 0x4b0 ; 0x4b0 <pinMode>
- digitalWrite(SPI_CS,HIGH);
- a52: 61 e0 ldi r22, 0x01 ; 1
- a54: 80 91 38 02 lds r24, 0x0238 ; 0x800238 <lc+0x54>
- a58: 0e 94 28 02 call 0x450 ; 0x450 <digitalWrite>
- SPI_MOSI=dataPin;
- a5c: d0 93 35 02 sts 0x0235, r29 ; 0x800235 <lc+0x51>
- a60: c0 93 34 02 sts 0x0234, r28 ; 0x800234 <lc+0x50>
- a64: e4 ef ldi r30, 0xF4 ; 244
- a66: f1 e0 ldi r31, 0x01 ; 1
- for(int i=0;i<64;i++)
- status[i]=0x00;
- a68: 11 92 st Z+, r1
- pinMode(SPI_MOSI,OUTPUT);
- pinMode(SPI_CLK,OUTPUT);
- pinMode(SPI_CS,OUTPUT);
- digitalWrite(SPI_CS,HIGH);
- SPI_MOSI=dataPin;
- for(int i=0;i<64;i++)
- a6a: 82 e0 ldi r24, 0x02 ; 2
- a6c: e4 33 cpi r30, 0x34 ; 52
- a6e: f8 07 cpc r31, r24
- a70: d9 f7 brne .-10 ; 0xa68 <global constructors keyed to 65535_0_shiftin_try6_wLED.ino.cpp.o.1832+0xea>
- a72: c0 e0 ldi r28, 0x00 ; 0
- a74: d0 e0 ldi r29, 0x00 ; 0
- status[i]=0x00;
- for(int i=0;i<maxDevices;i++) {
- a76: 80 91 3a 02 lds r24, 0x023A ; 0x80023a <lc+0x56>
- a7a: 90 91 3b 02 lds r25, 0x023B ; 0x80023b <lc+0x57>
- a7e: c8 17 cp r28, r24
- a80: d9 07 cpc r29, r25
- a82: ac f5 brge .+106 ; 0xaee <global constructors keyed to 65535_0_shiftin_try6_wLED.ino.cpp.o.1832+0x170>
- spiTransfer(i,OP_DISPLAYTEST,0);
- a84: 20 e0 ldi r18, 0x00 ; 0
- a86: 4f e0 ldi r20, 0x0F ; 15
- a88: be 01 movw r22, r28
- a8a: 84 ee ldi r24, 0xE4 ; 228
- a8c: 91 e0 ldi r25, 0x01 ; 1
- a8e: 0e 94 ed 02 call 0x5da ; 0x5da <LedControl::spiTransfer(int, unsigned char, unsigned char)>
- else
- spiTransfer(addr, OP_SHUTDOWN,1);
- }
-
- void LedControl::setScanLimit(int addr, int limit) {
- if(addr<0 || addr>=maxDevices)
- a92: d7 fd sbrc r29, 7
- a94: 0e c0 rjmp .+28 ; 0xab2 <global constructors keyed to 65535_0_shiftin_try6_wLED.ino.cpp.o.1832+0x134>
- a96: 80 91 3a 02 lds r24, 0x023A ; 0x80023a <lc+0x56>
- a9a: 90 91 3b 02 lds r25, 0x023B ; 0x80023b <lc+0x57>
- a9e: c8 17 cp r28, r24
- aa0: d9 07 cpc r29, r25
- aa2: 3c f4 brge .+14 ; 0xab2 <global constructors keyed to 65535_0_shiftin_try6_wLED.ino.cpp.o.1832+0x134>
- return;
- if(limit>=0 && limit<8)
- spiTransfer(addr, OP_SCANLIMIT,limit);
- aa4: 27 e0 ldi r18, 0x07 ; 7
- aa6: 4b e0 ldi r20, 0x0B ; 11
- aa8: be 01 movw r22, r28
- aaa: 84 ee ldi r24, 0xE4 ; 228
- aac: 91 e0 ldi r25, 0x01 ; 1
- aae: 0e 94 ed 02 call 0x5da ; 0x5da <LedControl::spiTransfer(int, unsigned char, unsigned char)>
- for(int i=0;i<maxDevices;i++) {
- spiTransfer(i,OP_DISPLAYTEST,0);
- //scanlimit is set to max on startup
- setScanLimit(i,7);
- //decode is done in source
- spiTransfer(i,OP_DECODEMODE,0);
- ab2: 20 e0 ldi r18, 0x00 ; 0
- ab4: 49 e0 ldi r20, 0x09 ; 9
- ab6: be 01 movw r22, r28
- ab8: 84 ee ldi r24, 0xE4 ; 228
- aba: 91 e0 ldi r25, 0x01 ; 1
- abc: 0e 94 ed 02 call 0x5da ; 0x5da <LedControl::spiTransfer(int, unsigned char, unsigned char)>
- clearDisplay(i);
- ac0: be 01 movw r22, r28
- ac2: 84 ee ldi r24, 0xE4 ; 228
- ac4: 91 e0 ldi r25, 0x01 ; 1
- ac6: 0e 94 92 03 call 0x724 ; 0x724 <LedControl::clearDisplay(int)>
- int LedControl::getDeviceCount() {
- return maxDevices;
- }
-
- void LedControl::shutdown(int addr, bool b) {
- if(addr<0 || addr>=maxDevices)
- aca: d7 fd sbrc r29, 7
- acc: 0e c0 rjmp .+28 ; 0xaea <global constructors keyed to 65535_0_shiftin_try6_wLED.ino.cpp.o.1832+0x16c>
- ace: 80 91 3a 02 lds r24, 0x023A ; 0x80023a <lc+0x56>
- ad2: 90 91 3b 02 lds r25, 0x023B ; 0x80023b <lc+0x57>
- ad6: c8 17 cp r28, r24
- ad8: d9 07 cpc r29, r25
- ada: 3c f4 brge .+14 ; 0xaea <global constructors keyed to 65535_0_shiftin_try6_wLED.ino.cpp.o.1832+0x16c>
- return;
- if(b)
- spiTransfer(addr, OP_SHUTDOWN,0);
- adc: 20 e0 ldi r18, 0x00 ; 0
- ade: 4c e0 ldi r20, 0x0C ; 12
- ae0: be 01 movw r22, r28
- ae2: 84 ee ldi r24, 0xE4 ; 228
- ae4: 91 e0 ldi r25, 0x01 ; 1
- ae6: 0e 94 ed 02 call 0x5da ; 0x5da <LedControl::spiTransfer(int, unsigned char, unsigned char)>
- pinMode(SPI_CS,OUTPUT);
- digitalWrite(SPI_CS,HIGH);
- SPI_MOSI=dataPin;
- for(int i=0;i<64;i++)
- status[i]=0x00;
- for(int i=0;i<maxDevices;i++) {
- aea: 21 96 adiw r28, 0x01 ; 1
- aec: c4 cf rjmp .-120 ; 0xa76 <global constructors keyed to 65535_0_shiftin_try6_wLED.ino.cpp.o.1832+0xf8>
- aee: df 91 pop r29
- af0: cf 91 pop r28
- af2: 08 95 ret
-
- 00000af4 <main>:
-
- void init()
- {
- // this needs to be called before setup() or some functions won't
- // work there
- sei();
- af4: 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);
- af6: 84 b5 in r24, 0x24 ; 36
- af8: 82 60 ori r24, 0x02 ; 2
- afa: 84 bd out 0x24, r24 ; 36
- sbi(TCCR0A, WGM00);
- afc: 84 b5 in r24, 0x24 ; 36
- afe: 81 60 ori r24, 0x01 ; 1
- b00: 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);
- b02: 85 b5 in r24, 0x25 ; 37
- b04: 82 60 ori r24, 0x02 ; 2
- b06: 85 bd out 0x25, r24 ; 37
- sbi(TCCR0B, CS00);
- b08: 85 b5 in r24, 0x25 ; 37
- b0a: 81 60 ori r24, 0x01 ; 1
- b0c: 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);
- b0e: 80 91 6e 00 lds r24, 0x006E ; 0x80006e <__TEXT_REGION_LENGTH__+0x7e006e>
- b12: 81 60 ori r24, 0x01 ; 1
- b14: 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;
- b18: 10 92 81 00 sts 0x0081, r1 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
-
- // set timer 1 prescale factor to 64
- sbi(TCCR1B, CS11);
- b1c: 80 91 81 00 lds r24, 0x0081 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- b20: 82 60 ori r24, 0x02 ; 2
- b22: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- #if F_CPU >= 8000000L
- sbi(TCCR1B, CS10);
- b26: 80 91 81 00 lds r24, 0x0081 ; 0x800081 <__TEXT_REGION_LENGTH__+0x7e0081>
- b2a: 81 60 ori r24, 0x01 ; 1
- b2c: 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);
- b30: 80 91 80 00 lds r24, 0x0080 ; 0x800080 <__TEXT_REGION_LENGTH__+0x7e0080>
- b34: 81 60 ori r24, 0x01 ; 1
- b36: 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);
- b3a: 80 91 b1 00 lds r24, 0x00B1 ; 0x8000b1 <__TEXT_REGION_LENGTH__+0x7e00b1>
- b3e: 84 60 ori r24, 0x04 ; 4
- b40: 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);
- b44: 80 91 b0 00 lds r24, 0x00B0 ; 0x8000b0 <__TEXT_REGION_LENGTH__+0x7e00b0>
- b48: 81 60 ori r24, 0x01 ; 1
- b4a: 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);
- b4e: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- b52: 84 60 ori r24, 0x04 ; 4
- b54: 80 93 7a 00 sts 0x007A, r24 ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- sbi(ADCSRA, ADPS1);
- b58: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- b5c: 82 60 ori r24, 0x02 ; 2
- b5e: 80 93 7a 00 sts 0x007A, r24 ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- sbi(ADCSRA, ADPS0);
- b62: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- b66: 81 60 ori r24, 0x01 ; 1
- b68: 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);
- b6c: 80 91 7a 00 lds r24, 0x007A ; 0x80007a <__TEXT_REGION_LENGTH__+0x7e007a>
- b70: 80 68 ori r24, 0x80 ; 128
- b72: 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;
- b76: 10 92 c1 00 sts 0x00C1, r1 ; 0x8000c1 <__TEXT_REGION_LENGTH__+0x7e00c1>
-
- void setup() {
- // put your setup code here, to run once:
-
-
- pinMode(hzclk, INPUT);
- b7a: 60 e0 ldi r22, 0x00 ; 0
- b7c: 87 e0 ldi r24, 0x07 ; 7
- b7e: 0e 94 58 02 call 0x4b0 ; 0x4b0 <pinMode>
- pinMode(hzbinary, INPUT);
- b82: 60 e0 ldi r22, 0x00 ; 0
- b84: 86 e0 ldi r24, 0x06 ; 6
- b86: 0e 94 58 02 call 0x4b0 ; 0x4b0 <pinMode>
- pinMode(sigLED, OUTPUT);
- b8a: 61 e0 ldi r22, 0x01 ; 1
- b8c: 8b e0 ldi r24, 0x0B ; 11
- b8e: 0e 94 58 02 call 0x4b0 ; 0x4b0 <pinMode>
-
- 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;
- b92: e0 91 57 01 lds r30, 0x0157 ; 0x800157 <Serial+0x10>
- b96: f0 91 58 01 lds r31, 0x0158 ; 0x800158 <Serial+0x11>
- b9a: 82 e0 ldi r24, 0x02 ; 2
- b9c: 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;
- b9e: e0 91 53 01 lds r30, 0x0153 ; 0x800153 <Serial+0xc>
- ba2: f0 91 54 01 lds r31, 0x0154 ; 0x800154 <Serial+0xd>
- ba6: 10 82 st Z, r1
- *_ubrrl = baud_setting;
- ba8: e0 91 55 01 lds r30, 0x0155 ; 0x800155 <Serial+0xe>
- bac: f0 91 56 01 lds r31, 0x0156 ; 0x800156 <Serial+0xf>
- bb0: 80 e1 ldi r24, 0x10 ; 16
- bb2: 80 83 st Z, r24
-
- _written = false;
- bb4: 10 92 5f 01 sts 0x015F, r1 ; 0x80015f <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;
- bb8: e0 91 5b 01 lds r30, 0x015B ; 0x80015b <Serial+0x14>
- bbc: f0 91 5c 01 lds r31, 0x015C ; 0x80015c <Serial+0x15>
- bc0: 86 e0 ldi r24, 0x06 ; 6
- bc2: 80 83 st Z, r24
-
- sbi(*_ucsrb, RXEN0);
- bc4: e0 91 59 01 lds r30, 0x0159 ; 0x800159 <Serial+0x12>
- bc8: f0 91 5a 01 lds r31, 0x015A ; 0x80015a <Serial+0x13>
- bcc: 80 81 ld r24, Z
- bce: 80 61 ori r24, 0x10 ; 16
- bd0: 80 83 st Z, r24
- sbi(*_ucsrb, TXEN0);
- bd2: e0 91 59 01 lds r30, 0x0159 ; 0x800159 <Serial+0x12>
- bd6: f0 91 5a 01 lds r31, 0x015A ; 0x80015a <Serial+0x13>
- bda: 80 81 ld r24, Z
- bdc: 88 60 ori r24, 0x08 ; 8
- bde: 80 83 st Z, r24
- sbi(*_ucsrb, RXCIE0);
- be0: e0 91 59 01 lds r30, 0x0159 ; 0x800159 <Serial+0x12>
- be4: f0 91 5a 01 lds r31, 0x015A ; 0x80015a <Serial+0x13>
- be8: 80 81 ld r24, Z
- bea: 80 68 ori r24, 0x80 ; 128
- bec: 80 83 st Z, r24
- cbi(*_ucsrb, UDRIE0);
- bee: e0 91 59 01 lds r30, 0x0159 ; 0x800159 <Serial+0x12>
- bf2: f0 91 5a 01 lds r31, 0x015A ; 0x80015a <Serial+0x13>
- bf6: 80 81 ld r24, Z
- bf8: 8f 7d andi r24, 0xDF ; 223
- bfa: 80 83 st Z, r24
- int LedControl::getDeviceCount() {
- return maxDevices;
- }
-
- void LedControl::shutdown(int addr, bool b) {
- if(addr<0 || addr>=maxDevices)
- bfc: 80 91 3a 02 lds r24, 0x023A ; 0x80023a <lc+0x56>
- c00: 90 91 3b 02 lds r25, 0x023B ; 0x80023b <lc+0x57>
- c04: 18 16 cp r1, r24
- c06: 19 06 cpc r1, r25
- c08: 44 f4 brge .+16 ; 0xc1a <main+0x126>
- return;
- if(b)
- spiTransfer(addr, OP_SHUTDOWN,0);
- else
- spiTransfer(addr, OP_SHUTDOWN,1);
- c0a: 21 e0 ldi r18, 0x01 ; 1
- c0c: 4c e0 ldi r20, 0x0C ; 12
- c0e: 60 e0 ldi r22, 0x00 ; 0
- c10: 70 e0 ldi r23, 0x00 ; 0
- c12: 84 ee ldi r24, 0xE4 ; 228
- c14: 91 e0 ldi r25, 0x01 ; 1
- c16: 0e 94 ed 02 call 0x5da ; 0x5da <LedControl::spiTransfer(int, unsigned char, unsigned char)>
- if(limit>=0 && limit<8)
- spiTransfer(addr, OP_SCANLIMIT,limit);
- }
-
- void LedControl::setIntensity(int addr, int intensity) {
- if(addr<0 || addr>=maxDevices)
- c1a: 80 91 3a 02 lds r24, 0x023A ; 0x80023a <lc+0x56>
- c1e: 90 91 3b 02 lds r25, 0x023B ; 0x80023b <lc+0x57>
- c22: 18 16 cp r1, r24
- c24: 19 06 cpc r1, r25
- c26: 44 f4 brge .+16 ; 0xc38 <main+0x144>
- return;
- if(intensity>=0 && intensity<16)
- spiTransfer(addr, OP_INTENSITY,intensity);
- c28: 28 e0 ldi r18, 0x08 ; 8
- c2a: 4a e0 ldi r20, 0x0A ; 10
- c2c: 60 e0 ldi r22, 0x00 ; 0
- c2e: 70 e0 ldi r23, 0x00 ; 0
- c30: 84 ee ldi r24, 0xE4 ; 228
- c32: 91 e0 ldi r25, 0x01 ; 1
- c34: 0e 94 ed 02 call 0x5da ; 0x5da <LedControl::spiTransfer(int, unsigned char, unsigned char)>
- */
- lc.shutdown(0,false);
- /* Set the brightness to a medium values */
- lc.setIntensity(0,8);
- /* and clear the display */
- lc.clearDisplay(0);
- c38: 60 e0 ldi r22, 0x00 ; 0
- c3a: 70 e0 ldi r23, 0x00 ; 0
- c3c: 84 ee ldi r24, 0xE4 ; 228
- c3e: 91 e0 ldi r25, 0x01 ; 1
- c40: 0e 94 92 03 call 0x724 ; 0x724 <LedControl::clearDisplay(int)>
- }
-
- void ConvertArraytoBin (void){
- for(x=4;x<21;x++){
- if(hzbinval[x] == 1){
- bitfieldA.mainstwo = bitfieldA.mainstwo | (0b0000000000000000000001 << (x - 3));
- c44: ee 24 eor r14, r14
- c46: e3 94 inc r14
- c48: f1 2c mov r15, r1
- if(v<0) {
- negative=true;
- v=v*-1;
- }
- ones=v%10;
- v=v/10;
- c4a: ca e0 ldi r28, 0x0A ; 10
- c4c: d0 e0 ldi r29, 0x00 ; 0
- //direct port reads
- if(temp == 5047){
- temp = 5998; //something, something, premature optimization...
- }
- if(temp == 5048){
- temp = 6000; //LUTs
- c4e: 30 e7 ldi r19, 0x70 ; 112
- c50: c3 2e mov r12, r19
- c52: 37 e1 ldi r19, 0x17 ; 23
- c54: d3 2e mov r13, r19
- //results in a clock that is right most of the time.
- //but wrong every 20 or so counts
- //todo: fix timing of duino by removing digital read for
- //direct port reads
- if(temp == 5047){
- temp = 5998; //something, something, premature optimization...
- c56: 4e e6 ldi r20, 0x6E ; 110
- c58: 24 2e mov r2, r20
- c5a: 47 e1 ldi r20, 0x17 ; 23
- c5c: 34 2e mov r3, r20
-
-
- #endif
-
- // busy wait
- __asm__ __volatile__ (
- c5e: 0b e8 ldi r16, 0x8B ; 139
- c60: 11 e0 ldi r17, 0x01 ; 1
- }
-
- void loop() {
-
-
- if(digitalRead(hzbinary) == LOW){
- c62: 86 e0 ldi r24, 0x06 ; 6
- c64: 0e 94 ff 01 call 0x3fe ; 0x3fe <digitalRead>
- c68: 89 2b or r24, r25
- c6a: 09 f0 breq .+2 ; 0xc6e <main+0x17a>
- c6c: 16 c1 rjmp .+556 ; 0xe9a <main+0x3a6>
- //this handles one clk cycle each
- //need to read 20 cycles
- clkval = 0;
- c6e: 10 92 46 01 sts 0x0146, r1 ; 0x800146 <clkval>
- checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
- c72: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- c76: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- c7a: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
- c7e: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- c82: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- c86: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
- c8a: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- c8e: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- c92: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
- c96: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- c9a: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- c9e: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();checkCLKandBIN();checkCLKandBIN();
- ca2: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- ca6: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- caa: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();
- cae: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();
- cb2: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();
- cb6: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();
- cba: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();
- cbe: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();
- cc2: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- checkCLKandBIN();
- cc6: 0e 94 b9 02 call 0x572 ; 0x572 <checkCLKandBIN()>
- cca: 80 91 42 01 lds r24, 0x0142 ; 0x800142 <bitfieldA>
- cce: 20 91 43 01 lds r18, 0x0143 ; 0x800143 <bitfieldA+0x1>
- cd2: 92 2f mov r25, r18
- cd4: 9f 73 andi r25, 0x3F ; 63
- cd6: 24 e0 ldi r18, 0x04 ; 4
- lc.setDigit(0,1,(byte)tens,false);
- lc.setDigit(0,0,(byte)ones,false);
- }
-
- void ConvertArraytoBin (void){
- for(x=4;x<21;x++){
- cd8: 25 31 cpi r18, 0x15 ; 21
- cda: a9 f0 breq .+42 ; 0xd06 <main+0x212>
- if(hzbinval[x] == 1){
- cdc: 42 2f mov r20, r18
- cde: 50 e0 ldi r21, 0x00 ; 0
- ce0: fa 01 movw r30, r20
- ce2: ed 5d subi r30, 0xDD ; 221
- ce4: fe 4f sbci r31, 0xFE ; 254
- ce6: 30 81 ld r19, Z
- ce8: 31 30 cpi r19, 0x01 ; 1
- cea: 59 f4 brne .+22 ; 0xd02 <main+0x20e>
- bitfieldA.mainstwo = bitfieldA.mainstwo | (0b0000000000000000000001 << (x - 3));
- cec: 43 50 subi r20, 0x03 ; 3
- cee: 51 09 sbc r21, r1
- cf0: b7 01 movw r22, r14
- cf2: 02 c0 rjmp .+4 ; 0xcf8 <main+0x204>
- cf4: 66 0f add r22, r22
- cf6: 77 1f adc r23, r23
- cf8: 4a 95 dec r20
- cfa: e2 f7 brpl .-8 ; 0xcf4 <main+0x200>
- cfc: 86 2b or r24, r22
- cfe: 97 2b or r25, r23
- d00: 9f 73 andi r25, 0x3F ; 63
- d02: 2f 5f subi r18, 0xFF ; 255
- d04: e9 cf rjmp .-46 ; 0xcd8 <main+0x1e4>
- d06: 80 93 42 01 sts 0x0142, r24 ; 0x800142 <bitfieldA>
- d0a: 39 2f mov r19, r25
- d0c: 3f 73 andi r19, 0x3F ; 63
- d0e: 90 91 43 01 lds r25, 0x0143 ; 0x800143 <bitfieldA+0x1>
- d12: 90 7c andi r25, 0xC0 ; 192
- d14: 93 2b or r25, r19
- d16: 90 93 43 01 sts 0x0143, r25 ; 0x800143 <bitfieldA+0x1>
- d1a: 20 93 41 01 sts 0x0141, r18 ; 0x800141 <x>
- }
- }
- //Serial.println(bitfieldA.mainstwo,BIN);
-
-
- temp = bitfieldA.mainstwo >> 1;
- d1e: 9c 01 movw r18, r24
- d20: 3f 73 andi r19, 0x3F ; 63
- d22: 35 95 asr r19
- d24: 27 95 ror r18
-
- //almost, but no cigar. has timing issues.
- //ugly hack time
- temp = temp & 0b1011111111111;
- d26: 37 71 andi r19, 0x17 ; 23
- //results in a clock that is right most of the time.
- //but wrong every 20 or so counts
- //todo: fix timing of duino by removing digital read for
- //direct port reads
- if(temp == 5047){
- d28: 27 3b cpi r18, 0xB7 ; 183
- d2a: 73 e1 ldi r23, 0x13 ; 19
- d2c: 37 07 cpc r19, r23
- d2e: 29 f0 breq .+10 ; 0xd3a <main+0x246>
-
- temp = bitfieldA.mainstwo >> 1;
-
- //almost, but no cigar. has timing issues.
- //ugly hack time
- temp = temp & 0b1011111111111;
- d30: 30 93 22 01 sts 0x0122, r19 ; 0x800122 <temp+0x1>
- d34: 20 93 21 01 sts 0x0121, r18 ; 0x800121 <temp>
- d38: 04 c0 rjmp .+8 ; 0xd42 <main+0x24e>
- //results in a clock that is right most of the time.
- //but wrong every 20 or so counts
- //todo: fix timing of duino by removing digital read for
- //direct port reads
- if(temp == 5047){
- temp = 5998; //something, something, premature optimization...
- d3a: 30 92 22 01 sts 0x0122, r3 ; 0x800122 <temp+0x1>
- d3e: 20 92 21 01 sts 0x0121, r2 ; 0x800121 <temp>
- }
- if(temp == 5048){
- d42: 80 91 21 01 lds r24, 0x0121 ; 0x800121 <temp>
- d46: 90 91 22 01 lds r25, 0x0122 ; 0x800122 <temp+0x1>
- d4a: 88 3b cpi r24, 0xB8 ; 184
- d4c: 93 41 sbci r25, 0x13 ; 19
- d4e: 21 f4 brne .+8 ; 0xd58 <main+0x264>
- temp = 6000; //LUTs
- d50: d0 92 22 01 sts 0x0122, r13 ; 0x800122 <temp+0x1>
- d54: c0 92 21 01 sts 0x0121, r12 ; 0x800121 <temp>
- n = -n;
- return printNumber(n, 10) + t;
- }
- return printNumber(n, 10);
- } else {
- return printNumber(n, base);
- d58: 60 91 21 01 lds r22, 0x0121 ; 0x800121 <temp>
- d5c: 70 91 22 01 lds r23, 0x0122 ; 0x800122 <temp+0x1>
- d60: 07 2e mov r0, r23
- d62: 00 0c add r0, r0
- d64: 88 0b sbc r24, r24
- d66: 99 0b sbc r25, r25
- d68: 42 e0 ldi r20, 0x02 ; 2
- d6a: 0e 94 da 03 call 0x7b4 ; 0x7b4 <Print::printNumber(unsigned long, unsigned char) [clone .constprop.7]>
- return x.printTo(*this);
- }
-
- size_t Print::println(void)
- {
- return write("\r\n");
- d6e: 82 e1 ldi r24, 0x12 ; 18
- d70: 91 e0 ldi r25, 0x01 ; 1
- d72: 0e 94 c8 03 call 0x790 ; 0x790 <Print::write(char const*) [clone .constprop.10]>
- }
-
- Serial.println(temp,BIN);
- Serial.println(temp,DEC);
- d76: 40 90 21 01 lds r4, 0x0121 ; 0x800121 <temp>
- d7a: 50 90 22 01 lds r5, 0x0122 ; 0x800122 <temp+0x1>
- return print((unsigned long) b, base);
- }
-
- size_t Print::print(int n, int base)
- {
- return print((long) n, base);
- d7e: 05 2c mov r0, r5
- d80: 00 0c add r0, r0
- d82: 66 08 sbc r6, r6
- d84: 77 08 sbc r7, r7
- size_t Print::print(long n, int base)
- {
- if (base == 0) {
- return write(n);
- } else if (base == 10) {
- if (n < 0) {
- d86: 77 fe sbrs r7, 7
- d88: 14 c0 rjmp .+40 ; 0xdb2 <main+0x2be>
- return write(str);
- }
-
- size_t Print::print(char c)
- {
- return write(c);
- d8a: e0 91 47 01 lds r30, 0x0147 ; 0x800147 <Serial>
- d8e: f0 91 48 01 lds r31, 0x0148 ; 0x800148 <Serial+0x1>
- d92: 01 90 ld r0, Z+
- d94: f0 81 ld r31, Z
- d96: e0 2d mov r30, r0
- d98: 6d e2 ldi r22, 0x2D ; 45
- d9a: 87 e4 ldi r24, 0x47 ; 71
- d9c: 91 e0 ldi r25, 0x01 ; 1
- d9e: 09 95 icall
- if (base == 0) {
- return write(n);
- } else if (base == 10) {
- if (n < 0) {
- int t = print('-');
- n = -n;
- da0: 66 27 eor r22, r22
- da2: 77 27 eor r23, r23
- da4: cb 01 movw r24, r22
- da6: 64 19 sub r22, r4
- da8: 75 09 sbc r23, r5
- daa: 86 09 sbc r24, r6
- dac: 97 09 sbc r25, r7
- return printNumber(n, 10) + t;
- dae: 4a e0 ldi r20, 0x0A ; 10
- db0: 03 c0 rjmp .+6 ; 0xdb8 <main+0x2c4>
- }
- return printNumber(n, 10);
- db2: 4a e0 ldi r20, 0x0A ; 10
- db4: c3 01 movw r24, r6
- db6: b2 01 movw r22, r4
- db8: 0e 94 da 03 call 0x7b4 ; 0x7b4 <Print::printNumber(unsigned long, unsigned char) [clone .constprop.7]>
- return x.printTo(*this);
- }
-
- size_t Print::println(void)
- {
- return write("\r\n");
- dbc: 82 e1 ldi r24, 0x12 ; 18
- dbe: 91 e0 ldi r25, 0x01 ; 1
- dc0: 0e 94 c8 03 call 0x790 ; 0x790 <Print::write(char const*) [clone .constprop.10]>
- return write(s.c_str(), s.length());
- }
-
- size_t Print::print(const char str[])
- {
- return write(str);
- dc4: 83 e1 ldi r24, 0x13 ; 19
- dc6: 91 e0 ldi r25, 0x01 ; 1
- dc8: 0e 94 c8 03 call 0x790 ; 0x790 <Print::write(char const*) [clone .constprop.10]>
- Serial.print("\n");
-
- lc.clearDisplay(0);
- dcc: 60 e0 ldi r22, 0x00 ; 0
- dce: 70 e0 ldi r23, 0x00 ; 0
- dd0: 84 ee ldi r24, 0xE4 ; 228
- dd2: 91 e0 ldi r25, 0x01 ; 1
- dd4: 0e 94 92 03 call 0x724 ; 0x724 <LedControl::clearDisplay(int)>
- printNumber(temp);
- dd8: 80 91 21 01 lds r24, 0x0121 ; 0x800121 <temp>
- ddc: 90 91 22 01 lds r25, 0x0122 ; 0x800122 <temp+0x1>
- int tens;
- int hundreds;
- int thousands;
- boolean negative;
-
- if(v < -9999 || v > 9999)
- de0: 9c 01 movw r18, r24
- de2: 21 5f subi r18, 0xF1 ; 241
- de4: 38 4d sbci r19, 0xD8 ; 216
- de6: 2f 31 cpi r18, 0x1F ; 31
- de8: 3e 44 sbci r19, 0x4E ; 78
- dea: 30 f5 brcc .+76 ; 0xe38 <main+0x344>
- dec: 97 ff sbrs r25, 7
- dee: 03 c0 rjmp .+6 ; 0xdf6 <main+0x302>
- df0: 91 95 neg r25
- df2: 81 95 neg r24
- df4: 91 09 sbc r25, r1
- if(v<0) {
- negative=true;
- v=v*-1;
- }
- ones=v%10;
- v=v/10;
- df6: be 01 movw r22, r28
- df8: 0e 94 53 07 call 0xea6 ; 0xea6 <__divmodhi4>
- dfc: 78 2e mov r7, r24
- tens=v%10;
- v=v/10;
- dfe: cb 01 movw r24, r22
- e00: be 01 movw r22, r28
- e02: 0e 94 53 07 call 0xea6 ; 0xea6 <__divmodhi4>
- e06: 68 2e mov r6, r24
- hundreds=v%10;
- v=v/10;
- e08: cb 01 movw r24, r22
- e0a: be 01 movw r22, r28
- e0c: 0e 94 53 07 call 0xea6 ; 0xea6 <__divmodhi4>
- e10: 58 2e mov r5, r24
- else {
- //print a blank in the sign column
- lc.setChar(0,4,' ',false);
- }*/
- //Now print the number digit by digit
- lc.setDigit(0,3,(byte)thousands,false);
- e12: 83 e0 ldi r24, 0x03 ; 3
- e14: 90 e0 ldi r25, 0x00 ; 0
- e16: 0e 94 74 03 call 0x6e8 ; 0x6e8 <LedControl::setDigit(int, int, unsigned char, bool) [clone .constprop.15]>
- lc.setDigit(0,2,(byte)hundreds,false);
- e1a: 65 2d mov r22, r5
- e1c: 82 e0 ldi r24, 0x02 ; 2
- e1e: 90 e0 ldi r25, 0x00 ; 0
- e20: 0e 94 74 03 call 0x6e8 ; 0x6e8 <LedControl::setDigit(int, int, unsigned char, bool) [clone .constprop.15]>
- lc.setDigit(0,1,(byte)tens,false);
- e24: 66 2d mov r22, r6
- e26: 81 e0 ldi r24, 0x01 ; 1
- e28: 90 e0 ldi r25, 0x00 ; 0
- e2a: 0e 94 74 03 call 0x6e8 ; 0x6e8 <LedControl::setDigit(int, int, unsigned char, bool) [clone .constprop.15]>
- lc.setDigit(0,0,(byte)ones,false);
- e2e: 67 2d mov r22, r7
- e30: 80 e0 ldi r24, 0x00 ; 0
- e32: 90 e0 ldi r25, 0x00 ; 0
- e34: 0e 94 74 03 call 0x6e8 ; 0x6e8 <LedControl::setDigit(int, int, unsigned char, bool) [clone .constprop.15]>
- return ((m << 8) + t) * (64 / clockCyclesPerMicrosecond());
- }
-
- void delay(unsigned long ms)
- {
- uint32_t start = micros();
- e38: 0e 94 94 02 call 0x528 ; 0x528 <micros>
- e3c: 4b 01 movw r8, r22
- e3e: 5c 01 movw r10, r24
- e40: 8a ef ldi r24, 0xFA ; 250
- e42: 48 2e mov r4, r24
- e44: 51 2c mov r5, r1
- e46: 61 2c mov r6, r1
- e48: 71 2c mov r7, r1
-
- while (ms > 0) {
- yield();
- while ( ms > 0 && (micros() - start) >= 1000) {
- e4a: 0e 94 94 02 call 0x528 ; 0x528 <micros>
- e4e: dc 01 movw r26, r24
- e50: cb 01 movw r24, r22
- e52: 88 19 sub r24, r8
- e54: 99 09 sbc r25, r9
- e56: aa 09 sbc r26, r10
- e58: bb 09 sbc r27, r11
- e5a: 88 3e cpi r24, 0xE8 ; 232
- e5c: 93 40 sbci r25, 0x03 ; 3
- e5e: a1 05 cpc r26, r1
- e60: b1 05 cpc r27, r1
- e62: 58 f0 brcs .+22 ; 0xe7a <main+0x386>
- ms--;
- e64: 61 e0 ldi r22, 0x01 ; 1
- e66: 46 1a sub r4, r22
- e68: 51 08 sbc r5, r1
- e6a: 61 08 sbc r6, r1
- e6c: 71 08 sbc r7, r1
- start += 1000;
- e6e: 78 ee ldi r23, 0xE8 ; 232
- e70: 87 0e add r8, r23
- e72: 73 e0 ldi r23, 0x03 ; 3
- e74: 97 1e adc r9, r23
- e76: a1 1c adc r10, r1
- e78: b1 1c adc r11, r1
- {
- uint32_t start = micros();
-
- while (ms > 0) {
- yield();
- while ( ms > 0 && (micros() - start) >= 1000) {
- e7a: 41 14 cp r4, r1
- e7c: 51 04 cpc r5, r1
- e7e: 61 04 cpc r6, r1
- e80: 71 04 cpc r7, r1
- e82: 19 f7 brne .-58 ; 0xe4a <main+0x356>
- checkCLKandBIN();
- checkCLKandBIN();
- checkCLKandBIN();
- //Serial.println(clkval); //outputs 19 or 20
- ConvertArraytoBin();
- mainsfreq = 0;
- e84: 10 92 45 01 sts 0x0145, r1 ; 0x800145 <mainsfreq+0x1>
- e88: 10 92 44 01 sts 0x0144, r1 ; 0x800144 <mainsfreq>
- bitfieldA.mainstwo = 0;
- e8c: 10 92 42 01 sts 0x0142, r1 ; 0x800142 <bitfieldA>
- e90: 80 91 43 01 lds r24, 0x0143 ; 0x800143 <bitfieldA+0x1>
- e94: 80 7c andi r24, 0xC0 ; 192
- e96: 80 93 43 01 sts 0x0143, r24 ; 0x800143 <bitfieldA+0x1>
-
-
- #endif
-
- // busy wait
- __asm__ __volatile__ (
- e9a: c8 01 movw r24, r16
- e9c: 01 97 sbiw r24, 0x01 ; 1
- e9e: f1 f7 brne .-4 ; 0xe9c <main+0x3a8>
-
- setup();
-
- for (;;) {
- loop();
- if (serialEventRun) serialEventRun();
- ea0: 0e 94 cc 01 call 0x398 ; 0x398 <serialEventRun()>
- ea4: de ce rjmp .-580 ; 0xc62 <main+0x16e>
-
- 00000ea6 <__divmodhi4>:
- ea6: 97 fb bst r25, 7
- ea8: 07 2e mov r0, r23
- eaa: 16 f4 brtc .+4 ; 0xeb0 <__divmodhi4+0xa>
- eac: 00 94 com r0
- eae: 07 d0 rcall .+14 ; 0xebe <__divmodhi4_neg1>
- eb0: 77 fd sbrc r23, 7
- eb2: 09 d0 rcall .+18 ; 0xec6 <__divmodhi4_neg2>
- eb4: 0e 94 89 07 call 0xf12 ; 0xf12 <__udivmodhi4>
- eb8: 07 fc sbrc r0, 7
- eba: 05 d0 rcall .+10 ; 0xec6 <__divmodhi4_neg2>
- ebc: 3e f4 brtc .+14 ; 0xecc <__divmodhi4_exit>
-
- 00000ebe <__divmodhi4_neg1>:
- ebe: 90 95 com r25
- ec0: 81 95 neg r24
- ec2: 9f 4f sbci r25, 0xFF ; 255
- ec4: 08 95 ret
-
- 00000ec6 <__divmodhi4_neg2>:
- ec6: 70 95 com r23
- ec8: 61 95 neg r22
- eca: 7f 4f sbci r23, 0xFF ; 255
-
- 00000ecc <__divmodhi4_exit>:
- ecc: 08 95 ret
-
- 00000ece <__udivmodsi4>:
- ece: a1 e2 ldi r26, 0x21 ; 33
- ed0: 1a 2e mov r1, r26
- ed2: aa 1b sub r26, r26
- ed4: bb 1b sub r27, r27
- ed6: fd 01 movw r30, r26
- ed8: 0d c0 rjmp .+26 ; 0xef4 <__udivmodsi4_ep>
-
- 00000eda <__udivmodsi4_loop>:
- eda: aa 1f adc r26, r26
- edc: bb 1f adc r27, r27
- ede: ee 1f adc r30, r30
- ee0: ff 1f adc r31, r31
- ee2: a2 17 cp r26, r18
- ee4: b3 07 cpc r27, r19
- ee6: e4 07 cpc r30, r20
- ee8: f5 07 cpc r31, r21
- eea: 20 f0 brcs .+8 ; 0xef4 <__udivmodsi4_ep>
- eec: a2 1b sub r26, r18
- eee: b3 0b sbc r27, r19
- ef0: e4 0b sbc r30, r20
- ef2: f5 0b sbc r31, r21
-
- 00000ef4 <__udivmodsi4_ep>:
- ef4: 66 1f adc r22, r22
- ef6: 77 1f adc r23, r23
- ef8: 88 1f adc r24, r24
- efa: 99 1f adc r25, r25
- efc: 1a 94 dec r1
- efe: 69 f7 brne .-38 ; 0xeda <__udivmodsi4_loop>
- f00: 60 95 com r22
- f02: 70 95 com r23
- f04: 80 95 com r24
- f06: 90 95 com r25
- f08: 9b 01 movw r18, r22
- f0a: ac 01 movw r20, r24
- f0c: bd 01 movw r22, r26
- f0e: cf 01 movw r24, r30
- f10: 08 95 ret
-
- 00000f12 <__udivmodhi4>:
- f12: aa 1b sub r26, r26
- f14: bb 1b sub r27, r27
- f16: 51 e1 ldi r21, 0x11 ; 17
- f18: 07 c0 rjmp .+14 ; 0xf28 <__udivmodhi4_ep>
-
- 00000f1a <__udivmodhi4_loop>:
- f1a: aa 1f adc r26, r26
- f1c: bb 1f adc r27, r27
- f1e: a6 17 cp r26, r22
- f20: b7 07 cpc r27, r23
- f22: 10 f0 brcs .+4 ; 0xf28 <__udivmodhi4_ep>
- f24: a6 1b sub r26, r22
- f26: b7 0b sbc r27, r23
-
- 00000f28 <__udivmodhi4_ep>:
- f28: 88 1f adc r24, r24
- f2a: 99 1f adc r25, r25
- f2c: 5a 95 dec r21
- f2e: a9 f7 brne .-22 ; 0xf1a <__udivmodhi4_loop>
- f30: 80 95 com r24
- f32: 90 95 com r25
- f34: bc 01 movw r22, r24
- f36: cd 01 movw r24, r26
- f38: 08 95 ret
-
- 00000f3a <__tablejump2__>:
- f3a: ee 0f add r30, r30
- f3c: ff 1f adc r31, r31
- f3e: 05 90 lpm r0, Z+
- f40: f4 91 lpm r31, Z
- f42: e0 2d mov r30, r0
- f44: 09 94 ijmp
-
- 00000f46 <abort>:
- f46: 81 e0 ldi r24, 0x01 ; 1
- f48: 90 e0 ldi r25, 0x00 ; 0
- f4a: f8 94 cli
- f4c: 0c 94 a8 07 jmp 0xf50 ; 0xf50 <_exit>
-
- 00000f50 <_exit>:
- f50: f8 94 cli
-
- 00000f52 <__stop_program>:
- f52: ff cf rjmp .-2 ; 0xf52 <__stop_program>
|