Blame | Last modification | View Log | SVN | RSS feed
main.elf: file format elf32-avrSections:Idx Name Size VMA LMA File off Algn0 .data 00000009 0080011b 00000d82 00000e16 2**0CONTENTS, ALLOC, LOAD, DATA1 .text 00000d82 00000000 00000000 00000094 2**0CONTENTS, ALLOC, LOAD, READONLY, CODE2 .bss 000000b1 00800124 00800124 00000e1f 2**0ALLOC3 .noinit 00000000 008001d5 008001d5 00000e1f 2**0CONTENTS4 .eeprom 00000000 00810000 00810000 00000e1f 2**0CONTENTS5 .stab 00002b20 00000000 00000000 00000e20 2**2CONTENTS, READONLY, DEBUGGING6 .stabstr 00001f11 00000000 00000000 00003940 2**0CONTENTS, READONLY, DEBUGGINGDisassembly of section .text:00000000 <__vectors>:0: 0c 94 34 00 jmp 0x68 <__ctors_end>4: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>8: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>c: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>10: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>14: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>18: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>1c: 0c 94 7e 00 jmp 0xfc <__vector_7>20: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>24: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>28: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>2c: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>30: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>34: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>38: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>3c: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>40: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>44: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>48: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>4c: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>50: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>54: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>58: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>5c: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>60: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>64: 0c 94 4f 00 jmp 0x9e <__bad_interrupt>00000068 <__ctors_end>:68: 11 24 eor r1, r16a: 1f be out 0x3f, r1 ; 636c: cf ef ldi r28, 0xFF ; 2556e: d4 e0 ldi r29, 0x04 ; 470: de bf out 0x3e, r29 ; 6272: cd bf out 0x3d, r28 ; 6100000074 <__do_copy_data>:74: 11 e0 ldi r17, 0x01 ; 176: ab e1 ldi r26, 0x1B ; 2778: b1 e0 ldi r27, 0x01 ; 17a: e2 e8 ldi r30, 0x82 ; 1307c: fd e0 ldi r31, 0x0D ; 137e: 02 c0 rjmp .+4 ; 0x84 <.do_copy_data_start>00000080 <.do_copy_data_loop>:80: 05 90 lpm r0, Z+82: 0d 92 st X+, r000000084 <.do_copy_data_start>:84: a4 32 cpi r26, 0x24 ; 3686: b1 07 cpc r27, r1788: d9 f7 brne .-10 ; 0x80 <.do_copy_data_loop>0000008a <__do_clear_bss>:8a: 11 e0 ldi r17, 0x01 ; 18c: a4 e2 ldi r26, 0x24 ; 368e: b1 e0 ldi r27, 0x01 ; 190: 01 c0 rjmp .+2 ; 0x94 <.do_clear_bss_start>00000092 <.do_clear_bss_loop>:92: 1d 92 st X+, r100000094 <.do_clear_bss_start>:94: a5 3d cpi r26, 0xD5 ; 21396: b1 07 cpc r27, r1798: e1 f7 brne .-8 ; 0x92 <.do_clear_bss_loop>9a: 0c 94 51 00 jmp 0xa2 <main>0000009e <__bad_interrupt>:9e: 0c 94 00 00 jmp 0x0 <__heap_end>000000a2 <main>:#include "../modules/sns_ds18x20/sns_ds18x20.h"int main(void){a2: c2 ef ldi r28, 0xF2 ; 242a4: d4 e0 ldi r29, 0x04 ; 4a6: de bf out 0x3e, r29 ; 62a8: cd bf out 0x3d, r28 ; 61StdCan_Msg_t rxMsg; // Message storage// Enable interrupts as early as possiblesei();aa: 78 94 seiTimer_Init();ac: 0e 94 da 00 call 0x1b4 <Timer_Init>StdCan_Init();b0: 0e 94 5b 05 call 0xab6 <StdCan_Init>Timer_SetTimeout(APP_HEARTBEAT_TIMER, STDCAN_HEARTBEAT_PERIOD, TimerTypeFreeRunning, StdCan_SendHeartbeat);b4: 2f ed ldi r18, 0xDF ; 223b6: 34 e0 ldi r19, 0x04 ; 4b8: 41 e0 ldi r20, 0x01 ; 1ba: 60 e1 ldi r22, 0x10 ; 16bc: 77 e2 ldi r23, 0x27 ; 39be: 80 e0 ldi r24, 0x00 ; 0c0: 0e 94 f6 00 call 0x1ec <Timer_SetTimeout>sns_ds18x20_Init();c4: 0e 94 c8 05 call 0xb90 <sns_ds18x20_Init>while (1) {sns_ds18x20_Process();c8: 0e 94 58 06 call 0xcb0 <sns_ds18x20_Process>if (StdCan_Get(&rxMsg) == StdCan_Ret_OK) {cc: 8e 01 movw r16, r28ce: 0f 5f subi r16, 0xFF ; 255d0: 1f 4f sbci r17, 0xFF ; 255d2: c8 01 movw r24, r16d4: 0e 94 83 04 call 0x906 <StdCan_Get>d8: 88 23 and r24, r24da: b1 f7 brne .-20 ; 0xc8 <main+0x26>if ((uint8_t)StdCan_Ret_class(rxMsg) == CAN_MODULE_NMT) {dc: 8c 81 ldd r24, Y+4 ; 0x04de: 86 95 lsr r24e0: 8f 70 andi r24, 0x0F ; 15e2: 8b 30 cpi r24, 0x0B ; 11e4: 39 f4 brne .+14 ; 0xf4 <main+0x52>if (rxMsg.Header.ModuleType == CAN_MODULE_NMT_LIST) {e6: 8b 81 ldd r24, Y+3 ; 0x03e8: 8d 32 cpi r24, 0x2D ; 45ea: 71 f7 brne .-36 ; 0xc8 <main+0x26>sns_ds18x20_List(1);ec: 81 e0 ldi r24, 0x01 ; 1ee: 0e 94 9e 05 call 0xb3c <sns_ds18x20_List>f2: ea cf rjmp .-44 ; 0xc8 <main+0x26>}}else {sns_ds18x20_HandleMessage(&rxMsg);f4: c8 01 movw r24, r16f6: 0e 94 9d 05 call 0xb3a <sns_ds18x20_HandleMessage>fa: e6 cf rjmp .-52 ; 0xc8 <main+0x26>000000fc <__vector_7>:/*-----------------------------------------------------------------------------* Interrupt Service Routines*---------------------------------------------------------------------------*/ISR(TIMER_VECTOR){fc: 1f 92 push r1fe: 0f 92 push r0100: 0f b6 in r0, 0x3f ; 63102: 0f 92 push r0104: 11 24 eor r1, r1106: 0f 93 push r16108: 1f 93 push r1710a: 2f 93 push r1810c: 3f 93 push r1910e: 4f 93 push r20110: 5f 93 push r21112: 6f 93 push r22114: 7f 93 push r23116: 8f 93 push r24118: 9f 93 push r2511a: af 93 push r2611c: bf 93 push r2711e: cf 93 push r28120: df 93 push r29122: ef 93 push r30124: ff 93 push r31uint8_t t;#if defined(TIMER_RELOAD)/* The hw timer does not support auto-reload so set the count manually. */TIMER_RELOAD(TIMER_COUNTS_PER_TICK);#endif/* Increase the global tick count. */ticks++;126: 80 91 62 01 lds r24, 0x016212a: 90 91 63 01 lds r25, 0x016312e: a0 91 64 01 lds r26, 0x0164132: b0 91 65 01 lds r27, 0x0165136: 01 96 adiw r24, 0x01 ; 1138: a1 1d adc r26, r113a: b1 1d adc r27, r113c: 80 93 62 01 sts 0x0162, r24140: 90 93 63 01 sts 0x0163, r25144: a0 93 64 01 sts 0x0164, r26148: b0 93 65 01 sts 0x0165, r2714c: 00 e0 ldi r16, 0x00 ; 014e: 10 e0 ldi r17, 0x00 ; 0150: cd e4 ldi r28, 0x4D ; 77152: d1 e0 ldi r29, 0x01 ; 1/* Decrease the timeout of all active timers and check if any have* expired. */for (t = 0; t < TIMER_NUM_TIMERS; t++){if ((timers[t].timeout > 0) && (--timers[t].timeout == 0))154: 88 81 ld r24, Y156: 99 81 ldd r25, Y+1 ; 0x01158: 00 97 sbiw r24, 0x00 ; 015a: 89 f0 breq .+34 ; 0x17e <__vector_7+0x82>15c: 01 97 sbiw r24, 0x01 ; 115e: 99 83 std Y+1, r25 ; 0x01160: 88 83 st Y, r24162: 89 2b or r24, r25164: 61 f4 brne .+24 ; 0x17e <__vector_7+0x82>{timers[t].expired = 1;166: 81 e0 ldi r24, 0x01 ; 1168: 8c 83 std Y+4, r24 ; 0x04timers[t].timeout = timers[t].reload;16a: 8a 81 ldd r24, Y+2 ; 0x0216c: 9b 81 ldd r25, Y+3 ; 0x0316e: 99 83 std Y+1, r25 ; 0x01170: 88 83 st Y, r24/* Call the callback, if any. */if (timers[t].callback) timers[t].callback(t);172: ed 81 ldd r30, Y+5 ; 0x05174: fe 81 ldd r31, Y+6 ; 0x06176: 30 97 sbiw r30, 0x00 ; 0178: 11 f0 breq .+4 ; 0x17e <__vector_7+0x82>17a: 80 2f mov r24, r1617c: 09 95 icall17e: 0f 5f subi r16, 0xFF ; 255180: 1f 4f sbci r17, 0xFF ; 255182: 27 96 adiw r28, 0x07 ; 7184: 03 30 cpi r16, 0x03 ; 3186: 11 05 cpc r17, r1188: 29 f7 brne .-54 ; 0x154 <__vector_7+0x58>18a: ff 91 pop r3118c: ef 91 pop r3018e: df 91 pop r29190: cf 91 pop r28192: bf 91 pop r27194: af 91 pop r26196: 9f 91 pop r25198: 8f 91 pop r2419a: 7f 91 pop r2319c: 6f 91 pop r2219e: 5f 91 pop r211a0: 4f 91 pop r201a2: 3f 91 pop r191a4: 2f 91 pop r181a6: 1f 91 pop r171a8: 0f 91 pop r161aa: 0f 90 pop r01ac: 0f be out 0x3f, r0 ; 631ae: 0f 90 pop r01b0: 1f 90 pop r11b2: 18 95 reti000001b4 <Timer_Init>:}}}/*-----------------------------------------------------------------------------* Public Functions*---------------------------------------------------------------------------*/void Timer_Init(){/* Do basic setup of the timer hw, including interrupts. */TIMER_INIT();1b4: 82 e0 ldi r24, 0x02 ; 21b6: 80 93 b0 00 sts 0x00B0, r241ba: 87 bb out 0x17, r24 ; 231bc: e0 e7 ldi r30, 0x70 ; 1121be: f0 e0 ldi r31, 0x00 ; 01c0: 80 81 ld r24, Z1c2: 82 60 ori r24, 0x02 ; 21c4: 80 83 st Z, r24#if defined(TIMER_RELOAD)/* The hw timer does not support auto-reload so set the count manually. */TIMER_RELOAD(TIMER_COUNTS_PER_TICK);#endif#if defined(TIMER_COMPARE_REG)/* The hw timer has a compare match module so use it for auto-reload. */TIMER_COMPARE_REG = TIMER_COUNTS_PER_TICK;1c6: 8c e7 ldi r24, 0x7C ; 1241c8: 80 93 b3 00 sts 0x00B3, r24#endif/* Finalize hw setup and start the timer by setting its prescaler. */TIMER_SET_PRESCALER();1cc: 84 e0 ldi r24, 0x04 ; 41ce: 80 93 b1 00 sts 0x00B1, r241d2: 08 95 ret000001d4 <Timer_GetTicks>:}/*---------------------------------------------------------------------------*/uint32_t Timer_GetTicks(){uint32_t res;uint8_t sreg = SREG;1d4: 2f b7 in r18, 0x3f ; 63cli();1d6: f8 94 clires = ticks;1d8: 60 91 62 01 lds r22, 0x01621dc: 70 91 63 01 lds r23, 0x01631e0: 80 91 64 01 lds r24, 0x01641e4: 90 91 65 01 lds r25, 0x0165SREG = sreg;1e8: 2f bf out 0x3f, r18 ; 631ea: 08 95 ret000001ec <Timer_SetTimeout>:return res;}/*---------------------------------------------------------------------------*/void Timer_SetTimeout(uint8_t timer, uint16_t timeout, uint8_t type, timerCallback_t callback){if (timer<TIMER_NUM_TIMERS)1ec: 83 30 cpi r24, 0x03 ; 31ee: 20 f5 brcc .+72 ; 0x238 <Timer_SetTimeout+0x4c>{uint8_t sreg = SREG;1f0: 5f b7 in r21, 0x3f ; 63cli();1f2: f8 94 clitimers[timer].expired = 0;1f4: 99 27 eor r25, r251f6: fc 01 movw r30, r241f8: a3 e0 ldi r26, 0x03 ; 31fa: ee 0f add r30, r301fc: ff 1f adc r31, r311fe: aa 95 dec r26200: e1 f7 brne .-8 ; 0x1fa <Timer_SetTimeout+0xe>202: e8 1b sub r30, r24204: f9 0b sbc r31, r25206: e3 5b subi r30, 0xB3 ; 179208: fe 4f sbci r31, 0xFE ; 25420a: 14 82 std Z+4, r1 ; 0x04timers[timer].timeout = timeout;20c: 71 83 std Z+1, r23 ; 0x0120e: 60 83 st Z, r22if (type == TimerTypeFreeRunning)210: 41 30 cpi r20, 0x01 ; 1212: 19 f4 brne .+6 ; 0x21a <Timer_SetTimeout+0x2e>timers[timer].reload = timeout;214: 73 83 std Z+3, r23 ; 0x03216: 62 83 std Z+2, r22 ; 0x02218: 02 c0 rjmp .+4 ; 0x21e <Timer_SetTimeout+0x32>elsetimers[timer].reload = 0;21a: 13 82 std Z+3, r1 ; 0x0321c: 12 82 std Z+2, r1 ; 0x02timers[timer].callback = callback;21e: fc 01 movw r30, r24220: 43 e0 ldi r20, 0x03 ; 3222: ee 0f add r30, r30224: ff 1f adc r31, r31226: 4a 95 dec r20228: e1 f7 brne .-8 ; 0x222 <Timer_SetTimeout+0x36>22a: e8 1b sub r30, r2422c: f9 0b sbc r31, r2522e: e3 5b subi r30, 0xB3 ; 179230: fe 4f sbci r31, 0xFE ; 254232: 36 83 std Z+6, r19 ; 0x06234: 25 83 std Z+5, r18 ; 0x05SREG = sreg;236: 5f bf out 0x3f, r21 ; 63238: 08 95 ret0000023a <Timer_Expired>:}}/*---------------------------------------------------------------------------*/uint8_t Timer_Expired(uint8_t timer){if ((timer<TIMER_NUM_TIMERS) && (timers[timer].expired))23a: 83 30 cpi r24, 0x03 ; 323c: 90 f4 brcc .+36 ; 0x262 <Timer_Expired+0x28>23e: 99 27 eor r25, r25240: fc 01 movw r30, r24242: b3 e0 ldi r27, 0x03 ; 3244: ee 0f add r30, r30246: ff 1f adc r31, r31248: ba 95 dec r2724a: e1 f7 brne .-8 ; 0x244 <Timer_Expired+0xa>24c: e8 1b sub r30, r2424e: f9 0b sbc r31, r25250: e3 5b subi r30, 0xB3 ; 179252: fe 4f sbci r31, 0xFE ; 254254: 84 81 ldd r24, Z+4 ; 0x04256: 88 23 and r24, r24258: 21 f0 breq .+8 ; 0x262 <Timer_Expired+0x28>{timers[timer].expired = 0;25a: 14 82 std Z+4, r1 ; 0x0425c: 81 e0 ldi r24, 0x01 ; 125e: 90 e0 ldi r25, 0x00 ; 0260: 08 95 retreturn 1;262: 80 e0 ldi r24, 0x00 ; 0264: 90 e0 ldi r25, 0x00 ; 0}return 0;}266: 08 95 ret00000268 <Mcu_Init>:#if defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)// set the clock speed to 8MHz// set the clock prescaler. First write CLKPCE to enable setting of clock the// next four instructions.CLKPR=(1<<CLKPCE);268: e1 e6 ldi r30, 0x61 ; 9726a: f0 e0 ldi r31, 0x00 ; 026c: 80 e8 ldi r24, 0x80 ; 12826e: 80 83 st Z, r24#ifndef AVR_CLOCK_PRESCCLKPR=0; // 8 MHZ270: 10 82 st Z, r1272: 08 95 ret00000274 <Mcu_EnableIRQ>:#endif#if AVR_CLOCK_PRESC == 1CLKPR=0; // 8 MHZ#elif AVR_CLOCK_PRESC == 2CLKPR=1; // 4 MHZ#elif AVR_CLOCK_PRESC == 4CLKPR=2; // 2 MHZ#elif AVR_CLOCK_PRESC == 8CLKPR=3; // 1 MHZ#elif AVR_CLOCK_PRESC == 16CLKPR=4; // 500 kHZ#elif AVR_CLOCK_PRESC == 32CLKPR=5; // 250 kHZ#elif AVR_CLOCK_PRESC == 64CLKPR=6; // 125 kHZ#elif AVR_CLOCK_PRESC == 128CLKPR=7; // 62.5 kHZ#elif AVR_CLOCK_PRESC == 256CLKPR=8; // 31.25 kHZ#endif#endif}/*** Enable interrupts.*/void Mcu_EnableIRQ() {#if MCU == atmega8sei();274: 78 94 sei276: 08 95 ret00000278 <Mcu_DisableIRQ>:#endif}/*** Disable interrupts.*/void Mcu_DisableIRQ() {#if MCU == atmega8cli();278: f8 94 cli27a: 08 95 ret0000027c <DS18X20_meas_to_cel>:TODO invalid-values detection (but should be covered by CRC)*/uint8_t DS18X20_meas_to_cel( uint8_t fc, uint8_t *sp,uint8_t* subzero, uint8_t* cel, uint8_t* cel_frac_bits){27c: ff 92 push r1527e: 0f 93 push r16280: 1f 93 push r17282: cf 93 push r28284: df 93 push r29286: f8 2e mov r15, r24288: fb 01 movw r30, r2228a: da 01 movw r26, r2028c: e9 01 movw r28, r1828e: a8 01 movw r20, r16uint16_t meas;uint8_t i;meas = sp[0]; // LSB290: 80 81 ld r24, Z292: 28 2f mov r18, r24294: 33 27 eor r19, r19meas |= ((uint16_t)sp[1])<<8; // MSB296: 81 81 ldd r24, Z+1 ; 0x01298: 99 27 eor r25, r2529a: 98 2f mov r25, r2429c: 88 27 eor r24, r2429e: 28 2b or r18, r242a0: 39 2b or r19, r25//meas = 0xff5e; meas = 0xfe6f;// only work on 12bit-baseif( fc == DS18S20_ID ) { // 9 -> 12 bit if 18S202a2: 80 e1 ldi r24, 0x10 ; 162a4: f8 16 cp r15, r242a6: 59 f4 brne .+22 ; 0x2be <DS18X20_meas_to_cel+0x42>/* Extended measurements for DS18S20 contributed by Carsten Foss */meas &= (uint16_t) 0xfffe; // Discard LSB , needed for later extended precicion calc2a8: 2e 7f andi r18, 0xFE ; 254meas <<= 3; // Convert to 12-bit , now degrees are in 1/16 degrees unitsmeas += (16 - sp[6]) - 4; // Add the compensation , and remember to subtract 0.25 degree (4/16)2aa: 63 e0 ldi r22, 0x03 ; 32ac: 22 0f add r18, r182ae: 33 1f adc r19, r192b0: 6a 95 dec r222b2: e1 f7 brne .-8 ; 0x2ac <DS18X20_meas_to_cel+0x30>2b4: 86 81 ldd r24, Z+6 ; 0x062b6: 28 1b sub r18, r242b8: 31 09 sbc r19, r12ba: 24 5f subi r18, 0xF4 ; 2442bc: 3f 4f sbci r19, 0xFF ; 255}// check for negativeif ( meas & 0x8000 ) {2be: 37 ff sbrs r19, 72c0: 06 c0 rjmp .+12 ; 0x2ce <DS18X20_meas_to_cel+0x52>*subzero=1; // mark negative2c2: 81 e0 ldi r24, 0x01 ; 12c4: 8c 93 st X, r24meas ^= 0xffff; // convert to positive => (twos complement)++meas++;2c6: 30 95 com r192c8: 21 95 neg r182ca: 3f 4f sbci r19, 0xFF ; 2552cc: 01 c0 rjmp .+2 ; 0x2d0 <DS18X20_meas_to_cel+0x54>}else *subzero=0;2ce: 1c 92 st X, r1// clear undefined bits for B != 12bitif ( fc == DS18B20_ID ) { // check resolution 18B202d0: 88 e2 ldi r24, 0x28 ; 402d2: f8 16 cp r15, r242d4: 91 f4 brne .+36 ; 0x2fa <DS18X20_meas_to_cel+0x7e>i = sp[DS18B20_CONF_REG];if ( (i & DS18B20_12_BIT) == DS18B20_12_BIT ) ;2d6: 84 81 ldd r24, Z+4 ; 0x042d8: 68 2f mov r22, r242da: 77 27 eor r23, r232dc: cb 01 movw r24, r222de: 80 76 andi r24, 0x60 ; 962e0: 90 70 andi r25, 0x00 ; 02e2: 80 36 cpi r24, 0x60 ; 962e4: 91 05 cpc r25, r12e6: 49 f0 breq .+18 ; 0x2fa <DS18X20_meas_to_cel+0x7e>else if ( (i & DS18B20_11_BIT) == DS18B20_11_BIT )2e8: 66 ff sbrs r22, 62ea: 02 c0 rjmp .+4 ; 0x2f0 <DS18X20_meas_to_cel+0x74>meas &= ~(DS18B20_11_BIT_UNDF);2ec: 2e 7f andi r18, 0xFE ; 2542ee: 05 c0 rjmp .+10 ; 0x2fa <DS18X20_meas_to_cel+0x7e>else if ( (i & DS18B20_10_BIT) == DS18B20_10_BIT )2f0: 65 ff sbrs r22, 52f2: 02 c0 rjmp .+4 ; 0x2f8 <DS18X20_meas_to_cel+0x7c>meas &= ~(DS18B20_10_BIT_UNDF);2f4: 2c 7f andi r18, 0xFC ; 2522f6: 01 c0 rjmp .+2 ; 0x2fa <DS18X20_meas_to_cel+0x7e>else { // if ( (i & DS18B20_9_BIT) == DS18B20_9_BIT ) {meas &= ~(DS18B20_9_BIT_UNDF);2f8: 28 7f andi r18, 0xF8 ; 248}}*cel = (uint8_t)(meas >> 4);2fa: c9 01 movw r24, r182fc: 34 e0 ldi r19, 0x04 ; 42fe: 96 95 lsr r25300: 87 95 ror r24302: 3a 95 dec r19304: e1 f7 brne .-8 ; 0x2fe <DS18X20_meas_to_cel+0x82>306: 88 83 st Y, r24*cel_frac_bits = (uint8_t)(meas & 0x000F);308: 82 2f mov r24, r1830a: 8f 70 andi r24, 0x0F ; 1530c: fa 01 movw r30, r2030e: 80 83 st Z, r24return DS18X20_OK;}310: 80 e0 ldi r24, 0x00 ; 0312: 90 e0 ldi r25, 0x00 ; 0314: df 91 pop r29316: cf 91 pop r28318: 1f 91 pop r1731a: 0f 91 pop r1631c: ff 90 pop r1531e: 08 95 ret00000320 <DS18X20_temp_to_decicel>:/* converts to decicelsiusinput is ouput from meas_to_celreturns absolute value of temperatur in decicelsiusi.e.: sz=0, c=28, frac=15 returns 289 (=28.9�C)0 0 01 625 625 12 1250 2503 1875 875 34 2500 500 45 3125 1256 3750 750 67 4375 3758 5000 09 5625 625 910 6250 25011 6875 875 1112 7500 500 1213 8125 12514 8750 750 1415 9375 375 */uint16_t DS18X20_temp_to_decicel(uint8_t subzero, uint8_t cel,uint8_t cel_frac_bits){320: 0f 93 push r16322: 1f 93 push r17324: cf 93 push r28326: df 93 push r29328: cd b7 in r28, 0x3d ; 6132a: de b7 in r29, 0x3e ; 6232c: 28 97 sbiw r28, 0x08 ; 832e: 0f b6 in r0, 0x3f ; 63330: f8 94 cli332: de bf out 0x3e, r29 ; 62334: 0f be out 0x3f, r0 ; 63336: cd bf out 0x3d, r28 ; 61338: 08 2f mov r16, r2433a: 16 2f mov r17, r22uint16_t h;uint8_t i;uint8_t need_rounding[] = { 1, 3, 4, 6, 9, 11, 12, 14 };33c: de 01 movw r26, r2833e: 11 96 adiw r26, 0x01 ; 1340: eb e1 ldi r30, 0x1B ; 27342: f1 e0 ldi r31, 0x01 ; 1344: 88 e0 ldi r24, 0x08 ; 8346: 01 90 ld r0, Z+348: 0d 92 st X+, r034a: 81 50 subi r24, 0x01 ; 134c: e1 f7 brne .-8 ; 0x346 <DS18X20_temp_to_decicel+0x26>h = cel_frac_bits*DS18X20_FRACCONV/1000;34e: 24 2f mov r18, r20350: 33 27 eor r19, r19352: 81 e7 ldi r24, 0x71 ; 113354: 92 e0 ldi r25, 0x02 ; 2356: bc 01 movw r22, r24358: 26 9f mul r18, r2235a: c0 01 movw r24, r035c: 27 9f mul r18, r2335e: 90 0d add r25, r0360: 36 9f mul r19, r22362: 90 0d add r25, r0364: 11 24 eor r1, r1366: 68 ee ldi r22, 0xE8 ; 232368: 73 e0 ldi r23, 0x03 ; 336a: 0e 94 9a 06 call 0xd34 <__divmodhi4>h += cel*10;36e: 8a e0 ldi r24, 0x0A ; 10370: 18 9f mul r17, r24372: c0 01 movw r24, r0374: 11 24 eor r1, r1376: 68 0f add r22, r24378: 79 1f adc r23, r25if (!subzero) {37a: 00 23 and r16, r1637c: 79 f4 brne .+30 ; 0x39c <DS18X20_temp_to_decicel+0x7c>37e: fe 01 movw r30, r28380: 31 96 adiw r30, 0x01 ; 1382: 9e 01 movw r18, r28384: 27 5f subi r18, 0xF7 ; 247386: 3f 4f sbci r19, 0xFF ; 255for (i=0; i<sizeof(need_rounding); i++) {if ( cel_frac_bits == need_rounding[i] ) {388: 80 81 ld r24, Z38a: 48 17 cp r20, r2438c: 19 f4 brne .+6 ; 0x394 <DS18X20_temp_to_decicel+0x74>h++;38e: 6f 5f subi r22, 0xFF ; 255390: 7f 4f sbci r23, 0xFF ; 255392: 04 c0 rjmp .+8 ; 0x39c <DS18X20_temp_to_decicel+0x7c>break;394: 31 96 adiw r30, 0x01 ; 1396: e2 17 cp r30, r18398: f3 07 cpc r31, r1939a: b1 f7 brne .-20 ; 0x388 <DS18X20_temp_to_decicel+0x68>}}}return h;}39c: cb 01 movw r24, r2239e: 28 96 adiw r28, 0x08 ; 83a0: 0f b6 in r0, 0x3f ; 633a2: f8 94 cli3a4: de bf out 0x3e, r29 ; 623a6: 0f be out 0x3f, r0 ; 633a8: cd bf out 0x3d, r28 ; 613aa: df 91 pop r293ac: cf 91 pop r283ae: 1f 91 pop r173b0: 0f 91 pop r163b2: 08 95 ret000003b4 <DS18X20_temp_cmp>:/* compare temperature values (full celsius only)returns -1 if param-pair1 < param-pair20 if ==1 if > */int8_t DS18X20_temp_cmp(uint8_t subzero1, uint16_t cel1,uint8_t subzero2, uint16_t cel2){int16_t t1 = (subzero1) ? (cel1*(-1)) : (cel1);3b4: 88 23 and r24, r243b6: 19 f0 breq .+6 ; 0x3be <DS18X20_temp_cmp+0xa>3b8: 70 95 com r233ba: 61 95 neg r223bc: 7f 4f sbci r23, 0xFF ; 255int16_t t2 = (subzero2) ? (cel2*(-1)) : (cel2);3be: 44 23 and r20, r203c0: 19 f0 breq .+6 ; 0x3c8 <DS18X20_temp_cmp+0x14>3c2: 30 95 com r193c4: 21 95 neg r183c6: 3f 4f sbci r19, 0xFF ; 255if (t1<t2) return -1;3c8: 62 17 cp r22, r183ca: 73 07 cpc r23, r193cc: 1c f4 brge .+6 ; 0x3d4 <DS18X20_temp_cmp+0x20>3ce: 8f ef ldi r24, 0xFF ; 2553d0: 9f ef ldi r25, 0xFF ; 2553d2: 08 95 ret3d4: 80 e0 ldi r24, 0x00 ; 03d6: 90 e0 ldi r25, 0x00 ; 03d8: 26 17 cp r18, r223da: 37 07 cpc r19, r233dc: 14 f4 brge .+4 ; 0x3e2 <DS18X20_temp_cmp+0x2e>3de: 81 e0 ldi r24, 0x01 ; 13e0: 90 e0 ldi r25, 0x00 ; 0if (t1>t2) return 1;return 0;}3e2: 08 95 ret000003e4 <DS18X20_read_meas_single>:/* find DS18X20 Sensors on 1-Wire-Businput/ouput: diff is the result of the last rom-searchoutput: id is the rom-code of the sensor found */void DS18X20_find_sensor(uint8_t *diff, uint8_t id[]){for (;;) {*diff = ow_rom_search( *diff, &id[0] );if ( *diff==OW_PRESENCE_ERR || *diff==OW_DATA_ERR ||*diff == OW_LAST_DEVICE ) return;if ( id[0] == DS18B20_ID || id[0] == DS18S20_ID ) return;}}/* get power status of DS18x20input : id = rom_codereturns: DS18X20_POWER_EXTERN or DS18X20_POWER_PARASITE */uint8_t DS18X20_get_power_status(uint8_t id[]){uint8_t pstat;ow_reset();ow_command(DS18X20_READ_POWER_SUPPLY, id);pstat=ow_bit_io(1); // pstat 0=is parasite/ !=0 ext. poweredow_reset();return (pstat) ? DS18X20_POWER_EXTERN:DS18X20_POWER_PARASITE;}/* start measurement (CONVERT_T) for all sensors if input id==NULLor for single sensor. then id is the rom-code */uint8_t DS18X20_start_meas( uint8_t with_power_extern, uint8_t id[]){ow_reset(); //**if( ow_input_pin_state() ) { // only send if bus is "idle" = highow_command( DS18X20_CONVERT_T, id );if (with_power_extern != DS18X20_POWER_EXTERN)ow_parasite_enable();return DS18X20_OK;}else {#ifdef DS18X20_VERBOSEuart_puts_P( "DS18X20_start_meas: Short Circuit !\r" );#endifreturn DS18X20_START_FAIL;}}/* reads temperature (scratchpad) of sensor with rom-code idoutput: subzero==1 if temp.<0, cel: full celsius, mcel: fracin millicelsius*0.1i.e.: subzero=1, cel=18, millicel=5000 = -18,5000�C */uint8_t DS18X20_read_meas(uint8_t id[], uint8_t *subzero,uint8_t *cel, uint8_t *cel_frac_bits){uint8_t i;uint8_t sp[DS18X20_SP_SIZE];ow_reset(); //**ow_command(DS18X20_READ, id);for ( i=0 ; i< DS18X20_SP_SIZE; i++ ) sp[i]=ow_byte_rd();if ( crc8( &sp[0], DS18X20_SP_SIZE ) )return DS18X20_ERROR_CRC;DS18X20_meas_to_cel(id[0], sp, subzero, cel, cel_frac_bits);return DS18X20_OK;}/* reads temperature (scratchpad) of a single sensor (uses skip-rom)output: subzero==1 if temp.<0, cel: full celsius, mcel: fracin millicelsius*0.1i.e.: subzero=1, cel=18, millicel=5000 = -18,5000�C */uint8_t DS18X20_read_meas_single(uint8_t familycode, uint8_t *subzero,uint8_t *cel, uint8_t *cel_frac_bits){3e4: 7f 92 push r73e6: 8f 92 push r83e8: 9f 92 push r93ea: af 92 push r103ec: bf 92 push r113ee: cf 92 push r123f0: df 92 push r133f2: ef 92 push r143f4: ff 92 push r153f6: 0f 93 push r163f8: 1f 93 push r173fa: cf 93 push r283fc: df 93 push r293fe: cd b7 in r28, 0x3d ; 61400: de b7 in r29, 0x3e ; 62402: 29 97 sbiw r28, 0x09 ; 9404: 0f b6 in r0, 0x3f ; 63406: f8 94 cli408: de bf out 0x3e, r29 ; 6240a: 0f be out 0x3f, r0 ; 6340c: cd bf out 0x3d, r28 ; 6140e: 78 2e mov r7, r24410: 4b 01 movw r8, r22412: 5a 01 movw r10, r20414: 69 01 movw r12, r18uint8_t i;uint8_t sp[DS18X20_SP_SIZE];ow_command(DS18X20_READ, NULL);416: 60 e0 ldi r22, 0x00 ; 0418: 70 e0 ldi r23, 0x00 ; 041a: 8e eb ldi r24, 0xBE ; 19041c: 0e 94 a9 03 call 0x752 <ow_command>420: 8e 01 movw r16, r28422: 0f 5f subi r16, 0xFF ; 255424: 1f 4f sbci r17, 0xFF ; 255for ( i=0 ; i< DS18X20_SP_SIZE; i++ ) sp[i]=ow_byte_rd();426: 0e 94 80 03 call 0x700 <ow_byte_rd>42a: f8 01 movw r30, r1642c: 81 93 st Z+, r2442e: 8f 01 movw r16, r30430: ce 01 movw r24, r28432: 0a 96 adiw r24, 0x0a ; 10434: e8 17 cp r30, r24436: f9 07 cpc r31, r25438: b1 f7 brne .-20 ; 0x426 <DS18X20_read_meas_single+0x42>if ( crc8( &sp[0], DS18X20_SP_SIZE ) )43a: 69 e0 ldi r22, 0x09 ; 943c: 70 e0 ldi r23, 0x00 ; 043e: 7e 01 movw r14, r28440: 08 94 sec442: e1 1c adc r14, r1444: f1 1c adc r15, r1446: c7 01 movw r24, r14448: 0e 94 24 04 call 0x848 <crc8>44c: 88 23 and r24, r2444e: 19 f0 breq .+6 ; 0x456 <DS18X20_read_meas_single+0x72>450: 83 e0 ldi r24, 0x03 ; 3452: 90 e0 ldi r25, 0x00 ; 0454: 09 c0 rjmp .+18 ; 0x468 <DS18X20_read_meas_single+0x84>return DS18X20_ERROR_CRC;DS18X20_meas_to_cel(familycode, sp, subzero, cel, cel_frac_bits);456: 86 01 movw r16, r12458: 95 01 movw r18, r1045a: a4 01 movw r20, r845c: b7 01 movw r22, r1445e: 87 2d mov r24, r7460: 0e 94 3e 01 call 0x27c <DS18X20_meas_to_cel>464: 80 e0 ldi r24, 0x00 ; 0466: 90 e0 ldi r25, 0x00 ; 0468: 29 96 adiw r28, 0x09 ; 946a: 0f b6 in r0, 0x3f ; 6346c: f8 94 cli46e: de bf out 0x3e, r29 ; 62470: 0f be out 0x3f, r0 ; 63472: cd bf out 0x3d, r28 ; 61474: df 91 pop r29476: cf 91 pop r28478: 1f 91 pop r1747a: 0f 91 pop r1647c: ff 90 pop r1547e: ef 90 pop r14480: df 90 pop r13482: cf 90 pop r12484: bf 90 pop r11486: af 90 pop r10488: 9f 90 pop r948a: 8f 90 pop r848c: 7f 90 pop r748e: 08 95 ret00000490 <DS18X20_read_meas>:490: 6f 92 push r6492: 7f 92 push r7494: 8f 92 push r8496: 9f 92 push r9498: af 92 push r1049a: bf 92 push r1149c: cf 92 push r1249e: df 92 push r134a0: ef 92 push r144a2: ff 92 push r154a4: 0f 93 push r164a6: 1f 93 push r174a8: cf 93 push r284aa: df 93 push r294ac: cd b7 in r28, 0x3d ; 614ae: de b7 in r29, 0x3e ; 624b0: 29 97 sbiw r28, 0x09 ; 94b2: 0f b6 in r0, 0x3f ; 634b4: f8 94 cli4b6: de bf out 0x3e, r29 ; 624b8: 0f be out 0x3f, r0 ; 634ba: cd bf out 0x3d, r28 ; 614bc: 6c 01 movw r12, r244be: 3b 01 movw r6, r224c0: 4a 01 movw r8, r204c2: 59 01 movw r10, r184c4: 0e 94 85 03 call 0x70a <ow_reset>4c8: b6 01 movw r22, r124ca: 8e eb ldi r24, 0xBE ; 1904cc: 0e 94 a9 03 call 0x752 <ow_command>4d0: 8e 01 movw r16, r284d2: 0f 5f subi r16, 0xFF ; 2554d4: 1f 4f sbci r17, 0xFF ; 2554d6: 0e 94 80 03 call 0x700 <ow_byte_rd>4da: f8 01 movw r30, r164dc: 81 93 st Z+, r244de: 8f 01 movw r16, r304e0: ce 01 movw r24, r284e2: 0a 96 adiw r24, 0x0a ; 104e4: e8 17 cp r30, r244e6: f9 07 cpc r31, r254e8: b1 f7 brne .-20 ; 0x4d6 <DS18X20_read_meas+0x46>4ea: 69 e0 ldi r22, 0x09 ; 94ec: 70 e0 ldi r23, 0x00 ; 04ee: 7e 01 movw r14, r284f0: 08 94 sec4f2: e1 1c adc r14, r14f4: f1 1c adc r15, r14f6: c7 01 movw r24, r144f8: 0e 94 24 04 call 0x848 <crc8>4fc: 88 23 and r24, r244fe: 19 f0 breq .+6 ; 0x506 <__stack+0x7>500: 83 e0 ldi r24, 0x03 ; 3502: 90 e0 ldi r25, 0x00 ; 0504: 0a c0 rjmp .+20 ; 0x51a <__stack+0x1b>506: 85 01 movw r16, r10508: 94 01 movw r18, r850a: a3 01 movw r20, r650c: b7 01 movw r22, r1450e: f6 01 movw r30, r12510: 80 81 ld r24, Z512: 0e 94 3e 01 call 0x27c <DS18X20_meas_to_cel>516: 80 e0 ldi r24, 0x00 ; 0518: 90 e0 ldi r25, 0x00 ; 051a: 29 96 adiw r28, 0x09 ; 951c: 0f b6 in r0, 0x3f ; 6351e: f8 94 cli520: de bf out 0x3e, r29 ; 62522: 0f be out 0x3f, r0 ; 63524: cd bf out 0x3d, r28 ; 61526: df 91 pop r29528: cf 91 pop r2852a: 1f 91 pop r1752c: 0f 91 pop r1652e: ff 90 pop r15530: ef 90 pop r14532: df 90 pop r13534: cf 90 pop r12536: bf 90 pop r11538: af 90 pop r1053a: 9f 90 pop r953c: 8f 90 pop r853e: 7f 90 pop r7540: 6f 90 pop r6542: 08 95 ret00000544 <DS18X20_start_meas>:544: 1f 93 push r17546: cf 93 push r28548: df 93 push r2954a: 18 2f mov r17, r2454c: eb 01 movw r28, r2254e: 0e 94 85 03 call 0x70a <ow_reset>552: 0e 94 41 03 call 0x682 <ow_input_pin_state>556: 88 23 and r24, r24558: 19 f4 brne .+6 ; 0x560 <DS18X20_start_meas+0x1c>55a: 82 e0 ldi r24, 0x02 ; 255c: 90 e0 ldi r25, 0x00 ; 055e: 0a c0 rjmp .+20 ; 0x574 <DS18X20_start_meas+0x30>560: be 01 movw r22, r28562: 84 e4 ldi r24, 0x44 ; 68564: 0e 94 a9 03 call 0x752 <ow_command>568: 11 30 cpi r17, 0x01 ; 156a: 11 f0 breq .+4 ; 0x570 <DS18X20_start_meas+0x2c>56c: 0e 94 46 03 call 0x68c <ow_parasite_enable>570: 80 e0 ldi r24, 0x00 ; 0572: 90 e0 ldi r25, 0x00 ; 0574: df 91 pop r29576: cf 91 pop r28578: 1f 91 pop r1757a: 08 95 ret0000057c <DS18X20_get_power_status>:57c: 0f 93 push r1657e: 1f 93 push r17580: 8c 01 movw r16, r24582: 0e 94 85 03 call 0x70a <ow_reset>586: b8 01 movw r22, r16588: 84 eb ldi r24, 0xB4 ; 18058a: 0e 94 a9 03 call 0x752 <ow_command>58e: 81 e0 ldi r24, 0x01 ; 1590: 0e 94 4c 03 call 0x698 <ow_bit_io>594: 18 2f mov r17, r24596: 0e 94 85 03 call 0x70a <ow_reset>59a: 80 e0 ldi r24, 0x00 ; 059c: 90 e0 ldi r25, 0x00 ; 059e: 11 23 and r17, r175a0: 11 f0 breq .+4 ; 0x5a6 <DS18X20_get_power_status+0x2a>5a2: 81 e0 ldi r24, 0x01 ; 15a4: 90 e0 ldi r25, 0x00 ; 05a6: 1f 91 pop r175a8: 0f 91 pop r165aa: 08 95 ret000005ac <DS18X20_find_sensor>:5ac: 0f 93 push r165ae: 1f 93 push r175b0: cf 93 push r285b2: df 93 push r295b4: 8c 01 movw r16, r245b6: eb 01 movw r28, r225b8: be 01 movw r22, r285ba: f8 01 movw r30, r165bc: 80 81 ld r24, Z5be: 0e 94 c8 03 call 0x790 <ow_rom_search>5c2: f8 01 movw r30, r165c4: 80 83 st Z, r245c6: 81 50 subi r24, 0x01 ; 15c8: 8d 3f cpi r24, 0xFD ; 2535ca: 28 f4 brcc .+10 ; 0x5d6 <DS18X20_find_sensor+0x2a>5cc: 88 81 ld r24, Y5ce: 88 32 cpi r24, 0x28 ; 405d0: 11 f0 breq .+4 ; 0x5d6 <DS18X20_find_sensor+0x2a>5d2: 80 31 cpi r24, 0x10 ; 165d4: 89 f7 brne .-30 ; 0x5b8 <DS18X20_find_sensor+0xc>5d6: df 91 pop r295d8: cf 91 pop r285da: 1f 91 pop r175dc: 0f 91 pop r165de: 08 95 ret000005e0 <search_sensors>:5e0: af 92 push r105e2: bf 92 push r115e4: cf 92 push r125e6: df 92 push r135e8: ff 92 push r155ea: 0f 93 push r165ec: 1f 93 push r175ee: cf 93 push r285f0: df 93 push r295f2: cd b7 in r28, 0x3d ; 615f4: de b7 in r29, 0x3e ; 625f6: 29 97 sbiw r28, 0x09 ; 95f8: 0f b6 in r0, 0x3f ; 635fa: f8 94 cli5fc: de bf out 0x3e, r29 ; 625fe: 0f be out 0x3f, r0 ; 63600: cd bf out 0x3d, r28 ; 61602: 8f ef ldi r24, 0xFF ; 255604: 89 83 std Y+1, r24 ; 0x01606: 00 e0 ldi r16, 0x00 ; 0608: 10 e0 ldi r17, 0x00 ; 060a: cc 24 eor r12, r1260c: dd 24 eor r13, r1360e: f0 2e mov r15, r16610: e2 e0 ldi r30, 0x02 ; 2612: ae 2e mov r10, r30614: b1 2c mov r11, r1616: ac 0e add r10, r28618: bd 1e adc r11, r2961a: b5 01 movw r22, r1061c: ce 01 movw r24, r2861e: 01 96 adiw r24, 0x01 ; 1620: 0e 94 d6 02 call 0x5ac <DS18X20_find_sensor>624: 99 81 ldd r25, Y+1 ; 0x01626: 9f 3f cpi r25, 0xFF ; 255628: d1 f0 breq .+52 ; 0x65e <search_sensors+0x7e>62a: 9e 3f cpi r25, 0xFE ; 25462c: c1 f0 breq .+48 ; 0x65e <search_sensors+0x7e>62e: d6 01 movw r26, r12630: a3 5d subi r26, 0xD3 ; 211632: be 4f sbci r27, 0xFE ; 254634: f5 01 movw r30, r10636: 9e 01 movw r18, r28638: 26 5f subi r18, 0xF6 ; 24663a: 3f 4f sbci r19, 0xFF ; 25563c: 81 91 ld r24, Z+63e: 8d 93 st X+, r24640: e2 17 cp r30, r18642: f3 07 cpc r31, r19644: d9 f7 brne .-10 ; 0x63c <search_sensors+0x5c>646: f3 94 inc r15648: 99 23 and r25, r2564a: 49 f0 breq .+18 ; 0x65e <search_sensors+0x7e>64c: 0f 5f subi r16, 0xFF ; 25564e: 1f 4f sbci r17, 0xFF ; 255650: 88 e0 ldi r24, 0x08 ; 8652: 90 e0 ldi r25, 0x00 ; 0654: c8 0e add r12, r24656: d9 1e adc r13, r25658: 04 30 cpi r16, 0x04 ; 465a: 11 05 cpc r17, r165c: c1 f6 brne .-80 ; 0x60e <search_sensors+0x2e>65e: 8f 2d mov r24, r15660: 99 27 eor r25, r25662: 29 96 adiw r28, 0x09 ; 9664: 0f b6 in r0, 0x3f ; 63666: f8 94 cli668: de bf out 0x3e, r29 ; 6266a: 0f be out 0x3f, r0 ; 6366c: cd bf out 0x3d, r28 ; 6166e: df 91 pop r29670: cf 91 pop r28672: 1f 91 pop r17674: 0f 91 pop r16676: ff 90 pop r15678: df 90 pop r1367a: cf 90 pop r1267c: bf 90 pop r1167e: af 90 pop r10680: 08 95 ret00000682 <ow_input_pin_state>:#endifuint8_t ow_input_pin_state(){return OW_GET_IN();682: 89 b1 in r24, 0x09 ; 9684: 99 27 eor r25, r25}686: 80 74 andi r24, 0x40 ; 64688: 90 70 andi r25, 0x00 ; 068a: 08 95 ret0000068c <ow_parasite_enable>:void ow_parasite_enable(void){OW_OUT_HIGH();68c: 5e 9a sbi 0x0b, 6 ; 11OW_DIR_OUT();68e: 56 9a sbi 0x0a, 6 ; 10690: 08 95 ret00000692 <ow_parasite_disable>:}void ow_parasite_disable(void){OW_OUT_LOW();692: 5e 98 cbi 0x0b, 6 ; 11OW_DIR_IN();694: 56 98 cbi 0x0a, 6 ; 10696: 08 95 ret00000698 <ow_bit_io>:}uint8_t ow_reset(void){uint8_t err;uint8_t sreg;OW_OUT_LOW(); // disable internal pull-up (maybe on from parasite)OW_DIR_OUT(); // pull OW-Pin low for 480usdelay_us(480);sreg=SREG;cli();// set Pin as input - wait for clients to pull lowOW_DIR_IN(); // inputdelay_us(66);err = OW_GET_IN(); // no presence detect// nobody pulled to low, still highSREG=sreg; // sei()// after a delay the clients should release the line// and input-pin gets back to high due to pull-up-resistordelay_us(480-66);if( OW_GET_IN() == 0 ) // short circuiterr = 1;return err;}/* Timing issue when using runtime-bus-selection (!OW_ONE_BUS):The master should sample at the end of the 15-slot after initiatingthe read-time-slot. The variable bus-settings need morecycles than the constant ones so the delays had to be shortenedto achive a 15uS overall delaySetting/clearing a bit in I/O Register needs 1 cyle in OW_ONE_BUSbut around 14 cyles in configureable bus (us-Delay is 4 cyles per uS) */uint8_t ow_bit_io( uint8_t b ){698: 28 2f mov r18, r24uint8_t sreg;sreg=SREG;69a: 3f b7 in r19, 0x3f ; 63cli();69c: f8 94 cliOW_DIR_OUT(); // drive bus low69e: 56 9a sbi 0x0a, 6 ; 104 cpu cycles per loop + 1 cycles(?) overheadwhen a constant is passed. */static inline void delayloop16(uint16_t count){asm volatile ( "cp %A0,__zero_reg__ \n\t" \6a0: 81 e0 ldi r24, 0x01 ; 16a2: 90 e0 ldi r25, 0x00 ; 06a4: 81 15 cp r24, r16a6: 91 05 cpc r25, r16a8: 11 f0 breq .+4 ; 0x6ae <L_Exit_39>000006aa <L_LOOP_39>:6aa: 01 97 sbiw r24, 0x01 ; 16ac: f1 f7 brne .-4 ; 0x6aa <L_LOOP_39>000006ae <L_Exit_39>:delay_us(1); // Recovery-Time wuffwuff was 1if ( b ) OW_DIR_IN(); // if bit is 1 set bus high (by ext. pull-up)6ae: 21 11 cpse r18, r16b0: 56 98 cbi 0x0a, 6 ; 104 cpu cycles per loop + 1 cycles(?) overheadwhen a constant is passed. */static inline void delayloop16(uint16_t count){asm volatile ( "cp %A0,__zero_reg__ \n\t" \6b2: 8b e1 ldi r24, 0x1B ; 276b4: 90 e0 ldi r25, 0x00 ; 06b6: 81 15 cp r24, r16b8: 91 05 cpc r25, r16ba: 11 f0 breq .+4 ; 0x6c0 <L_Exit_52>000006bc <L_LOOP_52>:6bc: 01 97 sbiw r24, 0x01 ; 16be: f1 f7 brne .-4 ; 0x6bc <L_LOOP_52>000006c0 <L_Exit_52>:// wuffwuff delay was 15uS-1 see comment abovedelay_us(15-1-OW_CONF_DELAYOFFSET);if( OW_GET_IN() == 0 ) b = 0; // sample at end of read-timeslot6c0: 4e 9b sbis 0x09, 6 ; 96c2: 20 e0 ldi r18, 0x00 ; 04 cpu cycles per loop + 1 cycles(?) overheadwhen a constant is passed. */static inline void delayloop16(uint16_t count){asm volatile ( "cp %A0,__zero_reg__ \n\t" \6c4: 89 e5 ldi r24, 0x59 ; 896c6: 90 e0 ldi r25, 0x00 ; 06c8: 81 15 cp r24, r16ca: 91 05 cpc r25, r16cc: 11 f0 breq .+4 ; 0x6d2 <L_Exit_65>000006ce <L_LOOP_65>:6ce: 01 97 sbiw r24, 0x01 ; 16d0: f1 f7 brne .-4 ; 0x6ce <L_LOOP_65>000006d2 <L_Exit_65>:delay_us(60-15);OW_DIR_IN();6d2: 56 98 cbi 0x0a, 6 ; 10SREG=sreg; // sei();6d4: 3f bf out 0x3f, r19 ; 63return b;}6d6: 82 2f mov r24, r186d8: 99 27 eor r25, r256da: 08 95 ret000006dc <ow_byte_wr>:uint8_t ow_byte_wr( uint8_t b ){6dc: 0f 93 push r166de: 1f 93 push r176e0: 18 2f mov r17, r246e2: 08 e0 ldi r16, 0x08 ; 8uint8_t i = 8, j;do {j = ow_bit_io( b & 1 );6e4: 81 2f mov r24, r176e6: 81 70 andi r24, 0x01 ; 16e8: 0e 94 4c 03 call 0x698 <ow_bit_io>b >>= 1;6ec: 16 95 lsr r17if( j ) b |= 0x80;6ee: 81 11 cpse r24, r16f0: 10 68 ori r17, 0x80 ; 128} while( --i );6f2: 01 50 subi r16, 0x01 ; 16f4: b9 f7 brne .-18 ; 0x6e4 <ow_byte_wr+0x8>return b;}6f6: 81 2f mov r24, r176f8: 99 27 eor r25, r256fa: 1f 91 pop r176fc: 0f 91 pop r166fe: 08 95 ret00000700 <ow_byte_rd>:uint8_t ow_byte_rd( void ){// read by sending 0xff (a dontcare?)return ow_byte_wr( 0xFF );700: 8f ef ldi r24, 0xFF ; 255702: 0e 94 6e 03 call 0x6dc <ow_byte_wr>}706: 99 27 eor r25, r25708: 08 95 ret0000070a <ow_reset>:70a: 5e 98 cbi 0x0b, 6 ; 1170c: 56 9a sbi 0x0a, 6 ; 104 cpu cycles per loop + 1 cycles(?) overheadwhen a constant is passed. */static inline void delayloop16(uint16_t count){asm volatile ( "cp %A0,__zero_reg__ \n\t" \70e: 8f eb ldi r24, 0xBF ; 191710: 93 e0 ldi r25, 0x03 ; 3712: 81 15 cp r24, r1714: 91 05 cpc r25, r1716: 11 f0 breq .+4 ; 0x71c <L_Exit_124>00000718 <L_LOOP_124>:718: 01 97 sbiw r24, 0x01 ; 171a: f1 f7 brne .-4 ; 0x718 <L_LOOP_124>0000071c <L_Exit_124>:71c: 2f b7 in r18, 0x3f ; 6371e: f8 94 cli720: 56 98 cbi 0x0a, 6 ; 104 cpu cycles per loop + 1 cycles(?) overheadwhen a constant is passed. */static inline void delayloop16(uint16_t count){asm volatile ( "cp %A0,__zero_reg__ \n\t" \722: 83 e8 ldi r24, 0x83 ; 131724: 90 e0 ldi r25, 0x00 ; 0726: 81 15 cp r24, r1728: 91 05 cpc r25, r172a: 11 f0 breq .+4 ; 0x730 <L_Exit_137>0000072c <L_LOOP_137>:72c: 01 97 sbiw r24, 0x01 ; 172e: f1 f7 brne .-4 ; 0x72c <L_LOOP_137>00000730 <L_Exit_137>:730: 39 b1 in r19, 0x09 ; 9732: 2f bf out 0x3f, r18 ; 634 cpu cycles per loop + 1 cycles(?) overheadwhen a constant is passed. */static inline void delayloop16(uint16_t count){asm volatile ( "cp %A0,__zero_reg__ \n\t" \734: 8b e3 ldi r24, 0x3B ; 59736: 93 e0 ldi r25, 0x03 ; 3738: 81 15 cp r24, r173a: 91 05 cpc r25, r173c: 11 f0 breq .+4 ; 0x742 <L_Exit_148>0000073e <L_LOOP_148>:73e: 01 97 sbiw r24, 0x01 ; 1740: f1 f7 brne .-4 ; 0x73e <L_LOOP_148>00000742 <L_Exit_148>:742: 4e 99 sbic 0x09, 6 ; 9744: 02 c0 rjmp .+4 ; 0x74a <L_Exit_148+0x8>746: 81 e0 ldi r24, 0x01 ; 1748: 02 c0 rjmp .+4 ; 0x74e <L_Exit_148+0xc>74a: 83 2f mov r24, r1974c: 80 74 andi r24, 0x40 ; 6474e: 99 27 eor r25, r25750: 08 95 ret00000752 <ow_command>:uint8_t ow_rom_search( uint8_t diff, uint8_t *id ){uint8_t i, j, next_diff;uint8_t b;if( ow_reset() ) return OW_PRESENCE_ERR; // error, no device foundow_byte_wr( OW_SEARCH_ROM ); // ROM search commandnext_diff = OW_LAST_DEVICE; // unchanged on last devicei = OW_ROMCODE_SIZE * 8; // 8 bytesdo {j = 8; // 8 bitsdo {b = ow_bit_io( 1 ); // read bitif( ow_bit_io( 1 ) ) { // read complement bitif( b ) // 11return OW_DATA_ERR; // data error}else {if( !b ) { // 00 = 2 devicesif( diff > i || ((*id & 1) && diff != i) ) {b = 1; // now 1next_diff = i; // next pass 0}}}ow_bit_io( b ); // write bit*id >>= 1;if( b ) *id |= 0x80; // store biti--;} while( --j );id++; // next byte} while( i );return next_diff; // to continue search}void ow_command( uint8_t command, uint8_t *id ){752: 0f 93 push r16754: 1f 93 push r17756: cf 93 push r28758: df 93 push r2975a: 08 2f mov r16, r2475c: eb 01 movw r28, r22uint8_t i;ow_reset();75e: 0e 94 85 03 call 0x70a <ow_reset>if( id ) {762: 20 97 sbiw r28, 0x00 ; 0764: 51 f0 breq .+20 ; 0x77a <ow_command+0x28>ow_byte_wr( OW_MATCH_ROM ); // to a single device766: 85 e5 ldi r24, 0x55 ; 85768: 0e 94 6e 03 call 0x6dc <ow_byte_wr>76c: 18 e0 ldi r17, 0x08 ; 8i = OW_ROMCODE_SIZE;do {ow_byte_wr( *id );76e: 89 91 ld r24, Y+770: 0e 94 6e 03 call 0x6dc <ow_byte_wr>id++;} while( --i );774: 11 50 subi r17, 0x01 ; 1776: 21 f0 breq .+8 ; 0x780 <ow_command+0x2e>778: fa cf rjmp .-12 ; 0x76e <ow_command+0x1c>}else {ow_byte_wr( OW_SKIP_ROM ); // to all devices77a: 8c ec ldi r24, 0xCC ; 20477c: 0e 94 6e 03 call 0x6dc <ow_byte_wr>}ow_byte_wr( command );780: 80 2f mov r24, r16782: 0e 94 6e 03 call 0x6dc <ow_byte_wr>786: df 91 pop r29788: cf 91 pop r2878a: 1f 91 pop r1778c: 0f 91 pop r1678e: 08 95 ret00000790 <ow_rom_search>:790: df 92 push r13792: ef 92 push r14794: ff 92 push r15796: 0f 93 push r16798: 1f 93 push r1779a: cf 93 push r2879c: df 93 push r2979e: e8 2e mov r14, r247a0: eb 01 movw r28, r227a2: 0e 94 85 03 call 0x70a <ow_reset>7a6: 88 23 and r24, r247a8: 19 f0 breq .+6 ; 0x7b0 <ow_rom_search+0x20>7aa: 8f ef ldi r24, 0xFF ; 2557ac: 90 e0 ldi r25, 0x00 ; 07ae: 37 c0 rjmp .+110 ; 0x81e <ow_rom_search+0x8e>7b0: 80 ef ldi r24, 0xF0 ; 2407b2: 0e 94 6e 03 call 0x6dc <ow_byte_wr>7b6: 00 e4 ldi r16, 0x40 ; 647b8: dd 24 eor r13, r137ba: 88 e0 ldi r24, 0x08 ; 87bc: f8 2e mov r15, r247be: 81 e0 ldi r24, 0x01 ; 17c0: 0e 94 4c 03 call 0x698 <ow_bit_io>7c4: 18 2f mov r17, r247c6: 81 e0 ldi r24, 0x01 ; 17c8: 0e 94 4c 03 call 0x698 <ow_bit_io>7cc: 88 23 and r24, r247ce: 29 f0 breq .+10 ; 0x7da <ow_rom_search+0x4a>7d0: 11 23 and r17, r177d2: 61 f0 breq .+24 ; 0x7ec <ow_rom_search+0x5c>7d4: 8e ef ldi r24, 0xFE ; 2547d6: 90 e0 ldi r25, 0x00 ; 07d8: 22 c0 rjmp .+68 ; 0x81e <ow_rom_search+0x8e>7da: 11 23 and r17, r177dc: c9 f4 brne .+50 ; 0x810 <ow_rom_search+0x80>7de: 0e 15 cp r16, r147e0: a8 f0 brcs .+42 ; 0x80c <ow_rom_search+0x7c>7e2: 88 81 ld r24, Y7e4: 80 ff sbrs r24, 07e6: 02 c0 rjmp .+4 ; 0x7ec <ow_rom_search+0x5c>7e8: e0 16 cp r14, r167ea: 81 f4 brne .+32 ; 0x80c <ow_rom_search+0x7c>7ec: 80 e0 ldi r24, 0x00 ; 07ee: 0e 94 4c 03 call 0x698 <ow_bit_io>7f2: 88 81 ld r24, Y7f4: 86 95 lsr r247f6: 88 83 st Y, r247f8: 01 50 subi r16, 0x01 ; 17fa: fa 94 dec r157fc: 01 f7 brne .-64 ; 0x7be <ow_rom_search+0x2e>7fe: 00 23 and r16, r16800: 11 f0 breq .+4 ; 0x806 <ow_rom_search+0x76>802: 21 96 adiw r28, 0x01 ; 1804: da cf rjmp .-76 ; 0x7ba <ow_rom_search+0x2a>806: 8d 2d mov r24, r13808: 99 27 eor r25, r2580a: 09 c0 rjmp .+18 ; 0x81e <ow_rom_search+0x8e>80c: d0 2e mov r13, r1680e: 11 e0 ldi r17, 0x01 ; 1810: 81 2f mov r24, r17812: 0e 94 4c 03 call 0x698 <ow_bit_io>816: 88 81 ld r24, Y818: 86 95 lsr r2481a: 80 68 ori r24, 0x80 ; 12881c: ec cf rjmp .-40 ; 0x7f6 <ow_rom_search+0x66>81e: df 91 pop r29820: cf 91 pop r28822: 1f 91 pop r17824: 0f 91 pop r16826: ff 90 pop r15828: ef 90 pop r1482a: df 90 pop r1382c: 08 95 ret0000082e <delayloop32>:#include "delay.h"void delayloop32(uint32_t loops){82e: dc 01 movw r26, r24830: cb 01 movw r24, r22__asm__ volatile ( "cp %A0,__zero_reg__ \n\t" \832: 81 15 cp r24, r1834: 91 05 cpc r25, r1836: a1 05 cpc r26, r1838: b1 05 cpc r27, r183a: 29 f0 breq .+10 ; 0x846 <L_Exit_5>0000083c <L_LOOP_5>:83c: 81 50 subi r24, 0x01 ; 183e: 90 40 sbci r25, 0x00 ; 0840: a0 40 sbci r26, 0x00 ; 0842: b0 40 sbci r27, 0x00 ; 0844: d9 f7 brne .-10 ; 0x83c <L_LOOP_5>00000846 <L_Exit_5>:846: 08 95 ret00000848 <crc8>:#define CRC8INIT 0x00#define CRC8POLY 0x18 //0X18 = X^8+X^5+X^4+X^0uint8_t crc8 ( uint8_t *data_in, uint16_t number_of_bytes_to_read ){848: 20 e0 ldi r18, 0x00 ; 084a: 40 e0 ldi r20, 0x00 ; 084c: 50 e0 ldi r21, 0x00 ; 084e: fc 01 movw r30, r24850: 13 c0 rjmp .+38 ; 0x878 <crc8+0x30>uint8_t crc;uint16_t loop_count;uint8_t bit_counter;uint8_t data;uint8_t feedback_bit;crc = CRC8INIT;for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++){data = data_in[loop_count];852: 90 81 ld r25, Z854: 38 e0 ldi r19, 0x08 ; 8856: a8 e1 ldi r26, 0x18 ; 24bit_counter = 8;do {feedback_bit = (crc ^ data) & 0x01;if ( feedback_bit == 0x01 ) {858: 82 2f mov r24, r1885a: 89 27 eor r24, r2585c: 80 ff sbrs r24, 085e: 04 c0 rjmp .+8 ; 0x868 <crc8+0x20>crc = crc ^ CRC8POLY;}crc = (crc >> 1) & 0x7F;860: 2a 27 eor r18, r26862: 26 95 lsr r18if ( feedback_bit == 0x01 ) {crc = crc | 0x80;864: 20 68 ori r18, 0x80 ; 128866: 01 c0 rjmp .+2 ; 0x86a <crc8+0x22>868: 26 95 lsr r18}data = data >> 1;bit_counter--;86a: 31 50 subi r19, 0x01 ; 1} while (bit_counter > 0);86c: 11 f0 breq .+4 ; 0x872 <crc8+0x2a>86e: 96 95 lsr r25870: f3 cf rjmp .-26 ; 0x858 <crc8+0x10>872: 4f 5f subi r20, 0xFF ; 255874: 5f 4f sbci r21, 0xFF ; 255876: 31 96 adiw r30, 0x01 ; 1878: 46 17 cp r20, r2287a: 57 07 cpc r21, r2387c: 51 f7 brne .-44 ; 0x852 <crc8+0xa>}return crc;}87e: 82 2f mov r24, r18880: 99 27 eor r25, r25882: 08 95 ret00000884 <Can_Process>:* Callback for when a message is received from the lower* layer (BIOS or CAN driver).*/void Can_Process(Can_Message_t* msg){884: cf 93 push r28886: df 93 push r29888: ec 01 movw r28, r24unsigned char n;/* Check if there is room on the queue. */if (RxQ_Len < STDCAN_RX_QUEUE_SIZE) {88a: 60 91 67 01 lds r22, 0x016788e: 68 30 cpi r22, 0x08 ; 8890: b8 f5 brcc .+110 ; 0x900 <Can_Process+0x7c>#if (STDCAN_FILTER)/* Try to match each filter in turn. */for (n = 0; n < STDCAN_NUM_FILTERS; n++) {if (RxFilters[n].Active && !((msg->Id ^ RxFilters[n].Id) & RxFilters[n].Mask)) {RxQ[RxQ_Wr_idx].Match = n;break;}}if (n == STDCAN_NUM_FILTERS) return; // No match found, discard message.#endif/* Copy the message from lower layer into the queue. */RxQ[RxQ_Wr_idx].Id = msg->Id;892: 70 91 d0 01 lds r23, 0x01D0896: 27 2f mov r18, r23898: 33 27 eor r19, r1989a: 8d e0 ldi r24, 0x0D ; 1389c: 90 e0 ldi r25, 0x00 ; 089e: 28 9f mul r18, r248a0: f0 01 movw r30, r08a2: 29 9f mul r18, r258a4: f0 0d add r31, r08a6: 38 9f mul r19, r248a8: f0 0d add r31, r08aa: 11 24 eor r1, r18ac: e8 59 subi r30, 0x98 ; 1528ae: fe 4f sbci r31, 0xFE ; 2548b0: 88 81 ld r24, Y8b2: 99 81 ldd r25, Y+1 ; 0x018b4: aa 81 ldd r26, Y+2 ; 0x028b6: bb 81 ldd r27, Y+3 ; 0x038b8: 80 83 st Z, r248ba: 91 83 std Z+1, r25 ; 0x018bc: a2 83 std Z+2, r26 ; 0x028be: b3 83 std Z+3, r27 ; 0x03RxQ[RxQ_Wr_idx].Length = msg->DataLength;8c0: 8c 81 ldd r24, Y+4 ; 0x048c2: 84 83 std Z+4, r24 ; 0x048c4: 20 e0 ldi r18, 0x00 ; 08c6: 30 e0 ldi r19, 0x00 ; 08c8: af 01 movw r20, r308ca: 98 2f mov r25, r248cc: 09 c0 rjmp .+18 ; 0x8e0 <Can_Process+0x5c>//TODO: This should be guarded against invalid DataLength.for (n = 0; n < RxQ[RxQ_Wr_idx].Length; n++) {RxQ[RxQ_Wr_idx].Data[n] = msg->Data.bytes[n];8ce: ff 27 eor r31, r318d0: da 01 movw r26, r208d2: ae 0f add r26, r308d4: bf 1f adc r27, r318d6: ec 0f add r30, r288d8: fd 1f adc r31, r298da: 87 81 ldd r24, Z+7 ; 0x078dc: fd 01 movw r30, r268de: 85 83 std Z+5, r24 ; 0x058e0: e2 2f mov r30, r188e2: 2f 5f subi r18, 0xFF ; 2558e4: 3f 4f sbci r19, 0xFF ; 2558e6: e9 17 cp r30, r258e8: 90 f3 brcs .-28 ; 0x8ce <Can_Process+0x4a>}/* Increment write index and queue length. */if (++RxQ_Wr_idx >= STDCAN_RX_QUEUE_SIZE) RxQ_Wr_idx = 0;8ea: 87 2f mov r24, r238ec: 8f 5f subi r24, 0xFF ; 2558ee: 80 93 d0 01 sts 0x01D0, r248f2: 88 30 cpi r24, 0x08 ; 88f4: 10 f0 brcs .+4 ; 0x8fa <Can_Process+0x76>8f6: 10 92 d0 01 sts 0x01D0, r1RxQ_Len++;8fa: 6f 5f subi r22, 0xFF ; 2558fc: 60 93 67 01 sts 0x0167, r22900: df 91 pop r29902: cf 91 pop r28904: 08 95 ret00000906 <StdCan_Get>:} else {/* Overflow, just drop the new message. In the future, some* form of priority scheme could be used to drop another* message in the queue.*/}}StdCan_Ret_t StdCan_Init(){StdCan_Ret_t retval;/* Reset all queue variables. */RxQ_Rd_idx = 0;RxQ_Wr_idx = 0;RxQ_Len = 0;#if (STDCAN_TX_QUEUE_SIZE > 1)TxQ_Rd_idx = 0;TxQ_Wr_idx = 0;TxQ_Len = 0;#endif#if defined(_AVRLIB_BIOS_)/* Initialize BIOS' interface for CAN. */BIOS_CanCallback = Can_Process;retval = StdCan_Ret_OK;#else/* Initialize CAN driver. */if (Can_Init() == CAN_OK)retval = StdCan_Ret_OK;elseretval = StdCan_Ret_Fail;#endif//TODO: Do something with the Node Descriptor.//(why have constats passed as parameters? they are defined at compiletime /arune)#if defined(_AVRLIB_BIOS_)/* TODO: When a Tx queue is implemented, the startup message should* be sent via StdCan_Put instead of directly to lower layer.*/Can_Message_t Startup;/* Set up Startup message format. */Startup.ExtendedFlag = 1;Startup.RemoteFlag = 0;Startup.DataLength = 4;Startup.Id = (CAN_NMT << CAN_SHIFT_CLASS) | (CAN_NMT_APP_START << CAN_SHIFT_NMT_TYPE);Startup.Data.bytes[0] = NODE_HW_ID&0xff;Startup.Data.bytes[1] = (NODE_HW_ID>>8)&0xff;Startup.Data.bytes[2] = (NODE_HW_ID>>16)&0xff;Startup.Data.bytes[3] = (NODE_HW_ID>>24)&0xff;/* Try to send it. */Can_Send(&Startup);#endifreturn retval;}StdCan_Ret_t StdCan_Get(StdCan_Msg_t* msg){906: cf 93 push r28908: df 93 push r2990a: ec 01 movw r28, r24unsigned char n;/* Check if there's a message waiting. */if (RxQ_Len) {90c: 80 91 67 01 lds r24, 0x0167910: 88 23 and r24, r24912: 19 f4 brne .+6 ; 0x91a <StdCan_Get+0x14>914: 82 e0 ldi r24, 0x02 ; 2916: 90 e0 ldi r25, 0x00 ; 0918: 4b c0 rjmp .+150 ; 0x9b0 <StdCan_Get+0xaa>/* Copy message to user buffer. */msg->Id = RxQ[RxQ_Rd_idx].Id;91a: 80 91 66 01 lds r24, 0x016691e: 99 27 eor r25, r25920: 2d e0 ldi r18, 0x0D ; 13922: 30 e0 ldi r19, 0x00 ; 0924: 82 9f mul r24, r18926: f0 01 movw r30, r0928: 83 9f mul r24, r1992a: f0 0d add r31, r092c: 92 9f mul r25, r1892e: f0 0d add r31, r0930: 11 24 eor r1, r1932: e8 59 subi r30, 0x98 ; 152934: fe 4f sbci r31, 0xFE ; 254936: 80 81 ld r24, Z938: 91 81 ldd r25, Z+1 ; 0x0193a: a2 81 ldd r26, Z+2 ; 0x0293c: b3 81 ldd r27, Z+3 ; 0x0393e: 88 83 st Y, r24940: 99 83 std Y+1, r25 ; 0x01942: aa 83 std Y+2, r26 ; 0x02944: bb 83 std Y+3, r27 ; 0x03msg->Length = RxQ[RxQ_Rd_idx].Length;946: 84 81 ldd r24, Z+4 ; 0x04948: 8c 83 std Y+4, r24 ; 0x0494a: 20 e0 ldi r18, 0x00 ; 094c: 30 e0 ldi r19, 0x00 ; 094e: 6d e0 ldi r22, 0x0D ; 13950: 70 e0 ldi r23, 0x00 ; 0952: 0b c0 rjmp .+22 ; 0x96a <StdCan_Get+0x64>//TODO: Consider a mempcy() of the entire message.for (n = 0; n < RxQ[RxQ_Rd_idx].Length; n++) {msg->Data[n] = RxQ[RxQ_Rd_idx].Data[n];954: 85 2f mov r24, r21956: 99 27 eor r25, r25958: ac 01 movw r20, r2495a: 4c 0f add r20, r2895c: 5d 1f adc r21, r2995e: a8 0f add r26, r24960: b9 1f adc r27, r25962: fd 01 movw r30, r26964: 85 81 ldd r24, Z+5 ; 0x05966: fa 01 movw r30, r20968: 85 83 std Z+5, r24 ; 0x0596a: 52 2f mov r21, r1896c: 40 91 66 01 lds r20, 0x0166970: 84 2f mov r24, r20972: 99 27 eor r25, r25974: 2f 5f subi r18, 0xFF ; 255976: 3f 4f sbci r19, 0xFF ; 255978: 86 9f mul r24, r2297a: d0 01 movw r26, r097c: 87 9f mul r24, r2397e: b0 0d add r27, r0980: 96 9f mul r25, r22982: b0 0d add r27, r0984: 11 24 eor r1, r1986: a8 59 subi r26, 0x98 ; 152988: be 4f sbci r27, 0xFE ; 25498a: fd 01 movw r30, r2698c: 84 81 ldd r24, Z+4 ; 0x0498e: 58 17 cp r21, r24990: 08 f3 brcs .-62 ; 0x954 <StdCan_Get+0x4e>}/* Increment read index and decrease queue length. */if (++RxQ_Rd_idx >= STDCAN_RX_QUEUE_SIZE) RxQ_Rd_idx = 0;992: 84 2f mov r24, r20994: 8f 5f subi r24, 0xFF ; 255996: 80 93 66 01 sts 0x0166, r2499a: 88 30 cpi r24, 0x08 ; 899c: 10 f0 brcs .+4 ; 0x9a2 <StdCan_Get+0x9c>99e: 10 92 66 01 sts 0x0166, r1RxQ_Len--;9a2: 80 91 67 01 lds r24, 0x01679a6: 81 50 subi r24, 0x01 ; 19a8: 80 93 67 01 sts 0x0167, r249ac: 80 e0 ldi r24, 0x00 ; 09ae: 90 e0 ldi r25, 0x00 ; 09b0: df 91 pop r299b2: cf 91 pop r289b4: 08 95 ret000009b6 <StdCan_Get_Pending>:return StdCan_Ret_OK;} else {/* Queue is empty. */return StdCan_Ret_Empty;}}unsigned char StdCan_Get_Pending(void){9b6: 80 91 67 01 lds r24, 0x0167return RxQ_Len;}9ba: 99 27 eor r25, r259bc: 08 95 ret000009be <StdCan_SendHeartbeat>:StdCan_Ret_t StdCan_Put(StdCan_Msg_t* msg){Can_Message_t Can_Msg;unsigned char n;/* Validate message. */if ((unsigned)msg->Length > 8) return StdCan_Ret_DataErr;/* Copy message directly to lower layer until a proper* queue has been implemented.* TODO: Implement a proper queue. This requires TX interrupt* support in the driver and BIOS.*/Can_Msg.ExtendedFlag = 1;Can_Msg.RemoteFlag = 0;Can_Msg.Id = msg->Id;Can_Msg.DataLength = msg->Length;for (n = 0; n < msg->Length; n++) {Can_Msg.Data.bytes[n] = msg->Data[n];}if (Can_Send(&Can_Msg) == CAN_OK) {Can_Process(&Can_Msg);return StdCan_Ret_OK;}elsereturn StdCan_Ret_Full;}void StdCan_SendHeartbeat(uint8_t n){9be: cf 93 push r289c0: df 93 push r299c2: cd b7 in r28, 0x3d ; 619c4: de b7 in r29, 0x3e ; 629c6: 2f 97 sbiw r28, 0x0f ; 159c8: 0f b6 in r0, 0x3f ; 639ca: f8 94 cli9cc: de bf out 0x3e, r29 ; 629ce: 0f be out 0x3f, r0 ; 639d0: cd bf out 0x3d, r28 ; 61/* TODO: When a Tx queue is implemented, the heartbeat should* be sent via StdCan_Put instead of directly to lower layer.*/Can_Message_t Heartbeat;/* Set up Heartbeat message format. */Heartbeat.ExtendedFlag = 1;9d2: 81 e0 ldi r24, 0x01 ; 19d4: 8e 83 std Y+6, r24 ; 0x06Heartbeat.RemoteFlag = 0;9d6: 1f 82 std Y+7, r1 ; 0x07Heartbeat.DataLength = 4;9d8: 84 e0 ldi r24, 0x04 ; 49da: 8d 83 std Y+5, r24 ; 0x05Heartbeat.Id = (CAN_NMT << CAN_SHIFT_CLASS) | (CAN_NMT_HEARTBEAT << CAN_SHIFT_NMT_TYPE);9dc: 80 e0 ldi r24, 0x00 ; 09de: 90 e0 ldi r25, 0x00 ; 09e0: ac e2 ldi r26, 0x2C ; 449e2: b0 e0 ldi r27, 0x00 ; 09e4: 89 83 std Y+1, r24 ; 0x019e6: 9a 83 std Y+2, r25 ; 0x029e8: ab 83 std Y+3, r26 ; 0x039ea: bc 83 std Y+4, r27 ; 0x04Heartbeat.Data.bytes[0] = NODE_HW_ID&0xff;9ec: 8f e1 ldi r24, 0x1F ; 319ee: 88 87 std Y+8, r24 ; 0x08Heartbeat.Data.bytes[1] = (NODE_HW_ID>>8)&0xff;9f0: 8b e0 ldi r24, 0x0B ; 119f2: 89 87 std Y+9, r24 ; 0x09Heartbeat.Data.bytes[2] = (NODE_HW_ID>>16)&0xff;9f4: 80 e9 ldi r24, 0x90 ; 1449f6: 8a 87 std Y+10, r24 ; 0x0aHeartbeat.Data.bytes[3] = (NODE_HW_ID>>24)&0xff;9f8: 87 eb ldi r24, 0xB7 ; 1839fa: 8b 87 std Y+11, r24 ; 0x0b/* Try to send it. */Can_Send(&Heartbeat);9fc: ce 01 movw r24, r289fe: 01 96 adiw r24, 0x01 ; 1a00: 0e 94 e1 18 call 0x31c2 <BIOS_CanSend>a04: 2f 96 adiw r28, 0x0f ; 15a06: 0f b6 in r0, 0x3f ; 63a08: f8 94 clia0a: de bf out 0x3e, r29 ; 62a0c: 0f be out 0x3f, r0 ; 63a0e: cd bf out 0x3d, r28 ; 61a10: df 91 pop r29a12: cf 91 pop r28a14: 08 95 ret00000a16 <StdCan_Put>:a16: 0f 93 push r16a18: 1f 93 push r17a1a: cf 93 push r28a1c: df 93 push r29a1e: cd b7 in r28, 0x3d ; 61a20: de b7 in r29, 0x3e ; 62a22: 2f 97 sbiw r28, 0x0f ; 15a24: 0f b6 in r0, 0x3f ; 63a26: f8 94 clia28: de bf out 0x3e, r29 ; 62a2a: 0f be out 0x3f, r0 ; 63a2c: cd bf out 0x3d, r28 ; 61a2e: 9c 01 movw r18, r24a30: fc 01 movw r30, r24a32: 44 81 ldd r20, Z+4 ; 0x04a34: 49 30 cpi r20, 0x09 ; 9a36: 18 f0 brcs .+6 ; 0xa3e <StdCan_Put+0x28>a38: 84 e0 ldi r24, 0x04 ; 4a3a: 90 e0 ldi r25, 0x00 ; 0a3c: 31 c0 rjmp .+98 ; 0xaa0 <StdCan_Put+0x8a>a3e: 81 e0 ldi r24, 0x01 ; 1a40: 8e 83 std Y+6, r24 ; 0x06a42: 1f 82 std Y+7, r1 ; 0x07a44: f9 01 movw r30, r18a46: 80 81 ld r24, Za48: 91 81 ldd r25, Z+1 ; 0x01a4a: a2 81 ldd r26, Z+2 ; 0x02a4c: b3 81 ldd r27, Z+3 ; 0x03a4e: 89 83 std Y+1, r24 ; 0x01a50: 9a 83 std Y+2, r25 ; 0x02a52: ab 83 std Y+3, r26 ; 0x03a54: bc 83 std Y+4, r27 ; 0x04a56: 4d 83 std Y+5, r20 ; 0x05a58: 40 e0 ldi r20, 0x00 ; 0a5a: 50 e0 ldi r21, 0x00 ; 0a5c: 8e 01 movw r16, r28a5e: 0f 5f subi r16, 0xFF ; 255a60: 1f 4f sbci r17, 0xFF ; 255a62: 0a c0 rjmp .+20 ; 0xa78 <StdCan_Put+0x62>a64: e9 2f mov r30, r25a66: ff 27 eor r31, r31a68: df 01 movw r26, r30a6a: a0 0f add r26, r16a6c: b1 1f adc r27, r17a6e: e2 0f add r30, r18a70: f3 1f adc r31, r19a72: 85 81 ldd r24, Z+5 ; 0x05a74: fd 01 movw r30, r26a76: 87 83 std Z+7, r24 ; 0x07a78: 94 2f mov r25, r20a7a: 4f 5f subi r20, 0xFF ; 255a7c: 5f 4f sbci r21, 0xFF ; 255a7e: f9 01 movw r30, r18a80: 84 81 ldd r24, Z+4 ; 0x04a82: 98 17 cp r25, r24a84: 78 f3 brcs .-34 ; 0xa64 <StdCan_Put+0x4e>a86: c8 01 movw r24, r16a88: 0e 94 e1 18 call 0x31c2 <BIOS_CanSend>a8c: 81 30 cpi r24, 0x01 ; 1a8e: 19 f0 breq .+6 ; 0xa96 <StdCan_Put+0x80>a90: 81 e0 ldi r24, 0x01 ; 1a92: 90 e0 ldi r25, 0x00 ; 0a94: 05 c0 rjmp .+10 ; 0xaa0 <StdCan_Put+0x8a>a96: c8 01 movw r24, r16a98: 0e 94 42 04 call 0x884 <Can_Process>a9c: 80 e0 ldi r24, 0x00 ; 0a9e: 90 e0 ldi r25, 0x00 ; 0aa0: 2f 96 adiw r28, 0x0f ; 15aa2: 0f b6 in r0, 0x3f ; 63aa4: f8 94 cliaa6: de bf out 0x3e, r29 ; 62aa8: 0f be out 0x3f, r0 ; 63aaa: cd bf out 0x3d, r28 ; 61aac: df 91 pop r29aae: cf 91 pop r28ab0: 1f 91 pop r17ab2: 0f 91 pop r16ab4: 08 95 ret00000ab6 <StdCan_Init>:ab6: cf 93 push r28ab8: df 93 push r29aba: cd b7 in r28, 0x3d ; 61abc: de b7 in r29, 0x3e ; 62abe: 2f 97 sbiw r28, 0x0f ; 15ac0: 0f b6 in r0, 0x3f ; 63ac2: f8 94 cliac4: de bf out 0x3e, r29 ; 62ac6: 0f be out 0x3f, r0 ; 63ac8: cd bf out 0x3d, r28 ; 61aca: 10 92 66 01 sts 0x0166, r1ace: 10 92 d0 01 sts 0x01D0, r1ad2: 10 92 67 01 sts 0x0167, r1ad6: 82 e4 ldi r24, 0x42 ; 66ad8: 94 e0 ldi r25, 0x04 ; 4ada: 90 93 16 01 sts 0x0116, r25ade: 80 93 15 01 sts 0x0115, r24ae2: 81 e0 ldi r24, 0x01 ; 1ae4: 8e 83 std Y+6, r24 ; 0x06ae6: 1f 82 std Y+7, r1 ; 0x07ae8: 84 e0 ldi r24, 0x04 ; 4aea: 8d 83 std Y+5, r24 ; 0x05aec: 80 e0 ldi r24, 0x00 ; 0aee: 90 e0 ldi r25, 0x00 ; 0af0: a8 e2 ldi r26, 0x28 ; 40af2: b0 e0 ldi r27, 0x00 ; 0af4: 89 83 std Y+1, r24 ; 0x01af6: 9a 83 std Y+2, r25 ; 0x02af8: ab 83 std Y+3, r26 ; 0x03afa: bc 83 std Y+4, r27 ; 0x04afc: 8f e1 ldi r24, 0x1F ; 31afe: 88 87 std Y+8, r24 ; 0x08b00: 8b e0 ldi r24, 0x0B ; 11b02: 89 87 std Y+9, r24 ; 0x09b04: 80 e9 ldi r24, 0x90 ; 144b06: 8a 87 std Y+10, r24 ; 0x0ab08: 87 eb ldi r24, 0xB7 ; 183b0a: 8b 87 std Y+11, r24 ; 0x0bb0c: ce 01 movw r24, r28b0e: 01 96 adiw r24, 0x01 ; 1b10: 0e 94 e1 18 call 0x31c2 <BIOS_CanSend>b14: 80 e0 ldi r24, 0x00 ; 0b16: 90 e0 ldi r25, 0x00 ; 0b18: 2f 96 adiw r28, 0x0f ; 15b1a: 0f b6 in r0, 0x3f ; 63b1c: f8 94 clib1e: de bf out 0x3e, r29 ; 62b20: 0f be out 0x3f, r0 ; 63b22: cd bf out 0x3d, r28 ; 61b24: df 91 pop r29b26: cf 91 pop r28b28: 08 95 ret00000b2a <ReadTemperature_callback>:uint8_t FlagReadTemperature, FlagConvertTemperature, FlagSearchSensors;void ReadTemperature_callback(uint8_t timer){FlagReadTemperature = 1;b2a: 81 e0 ldi r24, 0x01 ; 1b2c: 80 93 d1 01 sts 0x01D1, r24b30: 08 95 ret00000b32 <ConvertTemperature_callback>:}void ReadTemperature(void){static uint8_t SearchSensorsTimeout = sns_ds18x20_SEARCH_TIMEOUT;static uint8_t CurrentSensor = 0;uint8_t subzero, cel, cel_frac_bits = 0;StdCan_Msg_t txMsg;StdCan_Set_class(txMsg, CAN_MODULE_SNS);StdCan_Set_direction(txMsg, OWNER);txMsg.Header.ModuleType = MODULE_TYPE_sns_ds18x20;txMsg.Header.ModuleId = sns_ds18x20_ID;txMsg.Header.Command = SNS_CMD_TEMPERATURE_CELSIUS;txMsg.Length = 3;txMsg.Data[0] = SensorIds[CurrentSensor];if (DS18X20_read_meas(&gSensorIDs[CurrentSensor][0], &subzero, &cel, &cel_frac_bits) == DS18X20_OK){if (subzero){txMsg.Data[1] = -cel-1;txMsg.Data[2] = ~(cel_frac_bits<<4);}else{txMsg.Data[1] = cel;txMsg.Data[2] = (cel_frac_bits<<4);}}/* send txMsg */StdCan_Put(&txMsg);CurrentSensor++;if (CurrentSensor < NumberOfSensors)Timer_SetTimeout(sns_ds18x20_TIMER, sns_ds18x20_SEND_DELAY, TimerTypeOneShot, &ReadTemperature_callback);else{SearchSensorsTimeout--;if (SearchSensorsTimeout == 0){SearchSensorsTimeout = sns_ds18x20_SEARCH_TIMEOUT;FlagSearchSensors = 1;}CurrentSensor = 0;Timer_SetTimeout(sns_ds18x20_TIMER, sns_ds18x20_SEND_PERIOD , TimerTypeOneShot, &ConvertTemperature_callback);}}void ConvertTemperature_callback(uint8_t timer){FlagConvertTemperature = 1;b32: 81 e0 ldi r24, 0x01 ; 1b34: 80 93 d4 01 sts 0x01D4, r24b38: 08 95 ret00000b3a <sns_ds18x20_HandleMessage>:}void ConvertTemperature(void){if (DS18X20_start_meas(DS18X20_POWER_PARASITE, NULL) == DS18X20_OK){Timer_SetTimeout(sns_ds18x20_TIMER, DS18B20_TCONV_12BIT, TimerTypeOneShot, &ReadTemperature_callback);}}void sns_ds18x20_Init(void){/* Make sure there is no more then 4 sensors. */NumberOfSensors = search_sensors();Timer_SetTimeout(sns_ds18x20_TIMER, sns_ds18x20_SEND_PERIOD , TimerTypeFreeRunning, &ConvertTemperature_callback);}void sns_ds18x20_Process(void){if (FlagConvertTemperature){ConvertTemperature();FlagConvertTemperature = 0;}if (FlagSearchSensors){NumberOfSensors = search_sensors();uint8_t i, j;for(i = 0; i < NumberOfSensors; i++){SensorIds[i] = 0;for (j = 0; j < 7; j++){SensorIds[i] ^= gSensorIDs[i][j];}}FlagSearchSensors = 0;}if (FlagReadTemperature){ReadTemperature();FlagReadTemperature = 0;}}void sns_ds18x20_HandleMessage(StdCan_Msg_t *rxMsg){b3a: 08 95 ret00000b3c <sns_ds18x20_List>:}void sns_ds18x20_List(uint8_t ModuleSequenceNumber){b3c: cf 93 push r28b3e: df 93 push r29b40: cd b7 in r28, 0x3d ; 61b42: de b7 in r29, 0x3e ; 62b44: 2d 97 sbiw r28, 0x0d ; 13b46: 0f b6 in r0, 0x3f ; 63b48: f8 94 clib4a: de bf out 0x3e, r29 ; 62b4c: 0f be out 0x3f, r0 ; 63b4e: cd bf out 0x3d, r28 ; 61StdCan_Msg_t txMsg;StdCan_Set_class(txMsg, CAN_MODULE_SNS);StdCan_Set_direction(txMsg, OWNER);b50: 9b e1 ldi r25, 0x1B ; 27b52: 9c 83 std Y+4, r25 ; 0x04txMsg.Header.ModuleType = MODULE_TYPE_sns_ds18x20;b54: 93 e0 ldi r25, 0x03 ; 3b56: 9b 83 std Y+3, r25 ; 0x03txMsg.Header.ModuleId = sns_ds18x20_ID;b58: 21 e0 ldi r18, 0x01 ; 1b5a: 2a 83 std Y+2, r18 ; 0x02txMsg.Header.Command = CMD_LIST;b5c: 19 82 std Y+1, r1 ; 0x01txMsg.Length = 6;b5e: 96 e0 ldi r25, 0x06 ; 6b60: 9d 83 std Y+5, r25 ; 0x05txMsg.Data[3] = NODE_HW_ID&0xff;b62: 9f e1 ldi r25, 0x1F ; 31b64: 99 87 std Y+9, r25 ; 0x09txMsg.Data[2] = (NODE_HW_ID>>8)&0xff;b66: 9b e0 ldi r25, 0x0B ; 11b68: 98 87 std Y+8, r25 ; 0x08txMsg.Data[1] = (NODE_HW_ID>>16)&0xff;b6a: 90 e9 ldi r25, 0x90 ; 144b6c: 9f 83 std Y+7, r25 ; 0x07txMsg.Data[0] = (NODE_HW_ID>>24)&0xff;b6e: 97 eb ldi r25, 0xB7 ; 183b70: 9e 83 std Y+6, r25 ; 0x06txMsg.Data[4] = NUMBEROFMODULES;b72: 2a 87 std Y+10, r18 ; 0x0atxMsg.Data[5] = ModuleSequenceNumber;b74: 8b 87 std Y+11, r24 ; 0x0bStdCan_Put(&txMsg);b76: ce 01 movw r24, r28b78: 01 96 adiw r24, 0x01 ; 1b7a: 0e 94 0b 05 call 0xa16 <StdCan_Put>b7e: 2d 96 adiw r28, 0x0d ; 13b80: 0f b6 in r0, 0x3f ; 63b82: f8 94 clib84: de bf out 0x3e, r29 ; 62b86: 0f be out 0x3f, r0 ; 63b88: cd bf out 0x3d, r28 ; 61b8a: df 91 pop r29b8c: cf 91 pop r28b8e: 08 95 ret00000b90 <sns_ds18x20_Init>:b90: 0e 94 f0 02 call 0x5e0 <search_sensors>b94: 80 93 d2 01 sts 0x01D2, r24b98: 29 e9 ldi r18, 0x99 ; 153b9a: 35 e0 ldi r19, 0x05 ; 5b9c: 41 e0 ldi r20, 0x01 ; 1b9e: 60 e2 ldi r22, 0x20 ; 32ba0: 7e e4 ldi r23, 0x4E ; 78ba2: 81 e0 ldi r24, 0x01 ; 1ba4: 0e 94 f6 00 call 0x1ec <Timer_SetTimeout>ba8: 08 95 ret00000baa <ConvertTemperature>:baa: 60 e0 ldi r22, 0x00 ; 0bac: 70 e0 ldi r23, 0x00 ; 0bae: 80 e0 ldi r24, 0x00 ; 0bb0: 0e 94 a2 02 call 0x544 <DS18X20_start_meas>bb4: 88 23 and r24, r24bb6: 41 f4 brne .+16 ; 0xbc8 <ConvertTemperature+0x1e>bb8: 25 e9 ldi r18, 0x95 ; 149bba: 35 e0 ldi r19, 0x05 ; 5bbc: 40 e0 ldi r20, 0x00 ; 0bbe: 6e ee ldi r22, 0xEE ; 238bc0: 72 e0 ldi r23, 0x02 ; 2bc2: 81 e0 ldi r24, 0x01 ; 1bc4: 0e 94 f6 00 call 0x1ec <Timer_SetTimeout>bc8: 08 95 ret00000bca <ReadTemperature>:bca: cf 93 push r28bcc: df 93 push r29bce: cd b7 in r28, 0x3d ; 61bd0: de b7 in r29, 0x3e ; 62bd2: 60 97 sbiw r28, 0x10 ; 16bd4: 0f b6 in r0, 0x3f ; 63bd6: f8 94 clibd8: de bf out 0x3e, r29 ; 62bda: 0f be out 0x3f, r0 ; 63bdc: cd bf out 0x3d, r28 ; 61bde: 1b 82 std Y+3, r1 ; 0x03be0: 8b e1 ldi r24, 0x1B ; 27be2: 8f 83 std Y+7, r24 ; 0x07be4: 93 e0 ldi r25, 0x03 ; 3be6: 9e 83 std Y+6, r25 ; 0x06be8: 81 e0 ldi r24, 0x01 ; 1bea: 8d 83 std Y+5, r24 ; 0x05bec: 84 e0 ldi r24, 0x04 ; 4bee: 8c 83 std Y+4, r24 ; 0x04bf0: 98 87 std Y+8, r25 ; 0x08bf2: 80 91 2c 01 lds r24, 0x012Cbf6: 99 27 eor r25, r25bf8: 88 0f add r24, r24bfa: 99 1f adc r25, r25bfc: fc 01 movw r30, r24bfe: ec 5d subi r30, 0xDC ; 220c00: fe 4f sbci r31, 0xFE ; 254c02: 20 81 ld r18, Zc04: 29 87 std Y+9, r18 ; 0x09c06: 88 0f add r24, r24c08: 99 1f adc r25, r25c0a: 88 0f add r24, r24c0c: 99 1f adc r25, r25c0e: 9e 01 movw r18, r28c10: 2d 5f subi r18, 0xFD ; 253c12: 3f 4f sbci r19, 0xFF ; 255c14: ae 01 movw r20, r28c16: 4e 5f subi r20, 0xFE ; 254c18: 5f 4f sbci r21, 0xFF ; 255c1a: be 01 movw r22, r28c1c: 6f 5f subi r22, 0xFF ; 255c1e: 7f 4f sbci r23, 0xFF ; 255c20: 83 5d subi r24, 0xD3 ; 211c22: 9e 4f sbci r25, 0xFE ; 254c24: 0e 94 48 02 call 0x490 <DS18X20_read_meas>c28: 88 23 and r24, r24c2a: 79 f4 brne .+30 ; 0xc4a <ReadTemperature+0x80>c2c: 89 81 ldd r24, Y+1 ; 0x01c2e: 2a 81 ldd r18, Y+2 ; 0x02c30: 9b 81 ldd r25, Y+3 ; 0x03c32: 88 23 and r24, r24c34: 31 f0 breq .+12 ; 0xc42 <ReadTemperature+0x78>c36: 20 95 com r18c38: 2a 87 std Y+10, r18 ; 0x0ac3a: 92 95 swap r25c3c: 90 7f andi r25, 0xF0 ; 240c3e: 90 95 com r25c40: 03 c0 rjmp .+6 ; 0xc48 <ReadTemperature+0x7e>c42: 2a 87 std Y+10, r18 ; 0x0ac44: 92 95 swap r25c46: 90 7f andi r25, 0xF0 ; 240c48: 9b 87 std Y+11, r25 ; 0x0bc4a: ce 01 movw r24, r28c4c: 04 96 adiw r24, 0x04 ; 4c4e: 0e 94 0b 05 call 0xa16 <StdCan_Put>c52: 80 91 2c 01 lds r24, 0x012Cc56: 8f 5f subi r24, 0xFF ; 255c58: 80 93 2c 01 sts 0x012C, r24c5c: 90 91 d2 01 lds r25, 0x01D2c60: 89 17 cp r24, r25c62: 30 f4 brcc .+12 ; 0xc70 <ReadTemperature+0xa6>c64: 25 e9 ldi r18, 0x95 ; 149c66: 35 e0 ldi r19, 0x05 ; 5c68: 40 e0 ldi r20, 0x00 ; 0c6a: 64 ef ldi r22, 0xF4 ; 244c6c: 71 e0 ldi r23, 0x01 ; 1c6e: 14 c0 rjmp .+40 ; 0xc98 <ReadTemperature+0xce>c70: 80 91 23 01 lds r24, 0x0123c74: 81 50 subi r24, 0x01 ; 1c76: 80 93 23 01 sts 0x0123, r24c7a: 88 23 and r24, r24c7c: 31 f4 brne .+12 ; 0xc8a <ReadTemperature+0xc0>c7e: 85 e0 ldi r24, 0x05 ; 5c80: 80 93 23 01 sts 0x0123, r24c84: 81 e0 ldi r24, 0x01 ; 1c86: 80 93 d3 01 sts 0x01D3, r24c8a: 10 92 2c 01 sts 0x012C, r1c8e: 29 e9 ldi r18, 0x99 ; 153c90: 35 e0 ldi r19, 0x05 ; 5c92: 40 e0 ldi r20, 0x00 ; 0c94: 60 e2 ldi r22, 0x20 ; 32c96: 7e e4 ldi r23, 0x4E ; 78c98: 81 e0 ldi r24, 0x01 ; 1c9a: 0e 94 f6 00 call 0x1ec <Timer_SetTimeout>c9e: 60 96 adiw r28, 0x10 ; 16ca0: 0f b6 in r0, 0x3f ; 63ca2: f8 94 clica4: de bf out 0x3e, r29 ; 62ca6: 0f be out 0x3f, r0 ; 63ca8: cd bf out 0x3d, r28 ; 61caa: df 91 pop r29cac: cf 91 pop r28cae: 08 95 ret00000cb0 <sns_ds18x20_Process>:cb0: 80 91 d4 01 lds r24, 0x01D4cb4: 88 23 and r24, r24cb6: 21 f0 breq .+8 ; 0xcc0 <sns_ds18x20_Process+0x10>cb8: 0e 94 d5 05 call 0xbaa <ConvertTemperature>cbc: 10 92 d4 01 sts 0x01D4, r1cc0: 80 91 d3 01 lds r24, 0x01D3cc4: 88 23 and r24, r24cc6: 69 f1 breq .+90 ; 0xd22 <sns_ds18x20_Process+0x72>cc8: 0e 94 f0 02 call 0x5e0 <search_sensors>ccc: 68 2f mov r22, r24cce: 80 93 d2 01 sts 0x01D2, r24cd2: 50 e0 ldi r21, 0x00 ; 0cd4: 22 c0 rjmp .+68 ; 0xd1a <sns_ds18x20_Process+0x6a>cd6: a5 2f mov r26, r21cd8: bb 27 eor r27, r27cda: fd 01 movw r30, r26cdc: ee 0f add r30, r30cde: ff 1f adc r31, r31ce0: ec 5d subi r30, 0xDC ; 220ce2: fe 4f sbci r31, 0xFE ; 254ce4: 11 82 std Z+1, r1 ; 0x01ce6: 10 82 st Z, r1ce8: fd 01 movw r30, r26cea: 73 e0 ldi r23, 0x03 ; 3cec: ee 0f add r30, r30cee: ff 1f adc r31, r31cf0: 7a 95 dec r23cf2: e1 f7 brne .-8 ; 0xcec <sns_ds18x20_Process+0x3c>cf4: e3 5d subi r30, 0xD3 ; 211cf6: fe 4f sbci r31, 0xFE ; 254cf8: 40 e0 ldi r20, 0x00 ; 0cfa: 20 e0 ldi r18, 0x00 ; 0cfc: 30 e0 ldi r19, 0x00 ; 0cfe: 81 91 ld r24, Z+d00: 99 27 eor r25, r25d02: 28 27 eor r18, r24d04: 39 27 eor r19, r25d06: 4f 5f subi r20, 0xFF ; 255d08: 47 30 cpi r20, 0x07 ; 7d0a: c9 f7 brne .-14 ; 0xcfe <sns_ds18x20_Process+0x4e>d0c: aa 0f add r26, r26d0e: bb 1f adc r27, r27d10: ac 5d subi r26, 0xDC ; 220d12: be 4f sbci r27, 0xFE ; 254d14: 2d 93 st X+, r18d16: 3c 93 st X, r19d18: 5f 5f subi r21, 0xFF ; 255d1a: 56 17 cp r21, r22d1c: e1 f6 brne .-72 ; 0xcd6 <sns_ds18x20_Process+0x26>d1e: 10 92 d3 01 sts 0x01D3, r1d22: 80 91 d1 01 lds r24, 0x01D1d26: 88 23 and r24, r24d28: 21 f0 breq .+8 ; 0xd32 <sns_ds18x20_Process+0x82>d2a: 0e 94 e5 05 call 0xbca <ReadTemperature>d2e: 10 92 d1 01 sts 0x01D1, r1d32: 08 95 ret00000d34 <__divmodhi4>:d34: 97 fb bst r25, 7d36: 09 2e mov r0, r25d38: 07 26 eor r0, r23d3a: 0a d0 rcall .+20 ; 0xd50 <__divmodhi4_neg1>d3c: 77 fd sbrc r23, 7d3e: 04 d0 rcall .+8 ; 0xd48 <__divmodhi4_neg2>d40: 0c d0 rcall .+24 ; 0xd5a <__udivmodhi4>d42: 06 d0 rcall .+12 ; 0xd50 <__divmodhi4_neg1>d44: 00 20 and r0, r0d46: 1a f4 brpl .+6 ; 0xd4e <__divmodhi4_exit>00000d48 <__divmodhi4_neg2>:d48: 70 95 com r23d4a: 61 95 neg r22d4c: 7f 4f sbci r23, 0xFF ; 25500000d4e <__divmodhi4_exit>:d4e: 08 95 ret00000d50 <__divmodhi4_neg1>:d50: f6 f7 brtc .-4 ; 0xd4e <__divmodhi4_exit>d52: 90 95 com r25d54: 81 95 neg r24d56: 9f 4f sbci r25, 0xFF ; 255d58: 08 95 ret00000d5a <__udivmodhi4>:d5a: aa 1b sub r26, r26d5c: bb 1b sub r27, r27d5e: 51 e1 ldi r21, 0x11 ; 17d60: 07 c0 rjmp .+14 ; 0xd70 <__udivmodhi4_ep>00000d62 <__udivmodhi4_loop>:d62: aa 1f adc r26, r26d64: bb 1f adc r27, r27d66: a6 17 cp r26, r22d68: b7 07 cpc r27, r23d6a: 10 f0 brcs .+4 ; 0xd70 <__udivmodhi4_ep>d6c: a6 1b sub r26, r22d6e: b7 0b sbc r27, r2300000d70 <__udivmodhi4_ep>:d70: 88 1f adc r24, r24d72: 99 1f adc r25, r25d74: 5a 95 dec r21d76: a9 f7 brne .-22 ; 0xd62 <__udivmodhi4_loop>d78: 80 95 com r24d7a: 90 95 com r25d7c: bc 01 movw r22, r24d7e: cd 01 movw r24, r26d80: 08 95 ret