PoolClockHumidity.elf: file format elf32-avr Sections: Idx Name Size VMA LMA File off Algn 0 .data 00000024 00800100 00000900 00000994 2**0 CONTENTS, ALLOC, LOAD, DATA 1 .text 00000900 00000000 00000000 00000094 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .bss 00000008 00800124 00800124 000009b8 2**0 ALLOC 3 .comment 00000030 00000000 00000000 000009b8 2**0 CONTENTS, READONLY 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 000009e8 2**2 CONTENTS, READONLY 5 .debug_aranges 00000058 00000000 00000000 00000a28 2**0 CONTENTS, READONLY, DEBUGGING 6 .debug_info 0000228b 00000000 00000000 00000a80 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_abbrev 00000838 00000000 00000000 00002d0b 2**0 CONTENTS, READONLY, DEBUGGING 8 .debug_line 00000ba4 00000000 00000000 00003543 2**0 CONTENTS, READONLY, DEBUGGING 9 .debug_frame 000000f8 00000000 00000000 000040e8 2**2 CONTENTS, READONLY, DEBUGGING 10 .debug_str 000004ef 00000000 00000000 000041e0 2**0 CONTENTS, READONLY, DEBUGGING 11 .debug_loc 00001e2d 00000000 00000000 000046cf 2**0 CONTENTS, READONLY, DEBUGGING 12 .debug_ranges 00000168 00000000 00000000 000064fc 2**0 CONTENTS, READONLY, DEBUGGING Disassembly of section .text: 00000000 <__vectors>: 0: 19 c0 rjmp .+50 ; 0x34 <__ctors_end> 2: 33 c0 rjmp .+102 ; 0x6a <__bad_interrupt> 4: 32 c0 rjmp .+100 ; 0x6a <__bad_interrupt> 6: 31 c0 rjmp .+98 ; 0x6a <__bad_interrupt> 8: 30 c0 rjmp .+96 ; 0x6a <__bad_interrupt> a: 2f c0 rjmp .+94 ; 0x6a <__bad_interrupt> c: 2e c0 rjmp .+92 ; 0x6a <__bad_interrupt> e: 2d c0 rjmp .+90 ; 0x6a <__bad_interrupt> 10: 2c c0 rjmp .+88 ; 0x6a <__bad_interrupt> 12: 2b c0 rjmp .+86 ; 0x6a <__bad_interrupt> 14: 2a c0 rjmp .+84 ; 0x6a <__bad_interrupt> 16: 81 c0 rjmp .+258 ; 0x11a <__vector_11> 18: 28 c0 rjmp .+80 ; 0x6a <__bad_interrupt> 1a: 27 c0 rjmp .+78 ; 0x6a <__bad_interrupt> 1c: 26 c0 rjmp .+76 ; 0x6a <__bad_interrupt> 1e: 25 c0 rjmp .+74 ; 0x6a <__bad_interrupt> 20: 24 c0 rjmp .+72 ; 0x6a <__bad_interrupt> 22: 23 c0 rjmp .+70 ; 0x6a <__bad_interrupt> 24: 22 c0 rjmp .+68 ; 0x6a <__bad_interrupt> 26: 21 c0 rjmp .+66 ; 0x6a <__bad_interrupt> 28: 20 c0 rjmp .+64 ; 0x6a <__bad_interrupt> 2a: 1f c0 rjmp .+62 ; 0x6a <__bad_interrupt> 2c: 1e c0 rjmp .+60 ; 0x6a <__bad_interrupt> 2e: 1d c0 rjmp .+58 ; 0x6a <__bad_interrupt> 30: 1c c0 rjmp .+56 ; 0x6a <__bad_interrupt> 32: 1b c0 rjmp .+54 ; 0x6a <__bad_interrupt> 00000034 <__ctors_end>: 34: 11 24 eor r1, r1 36: 1f be out 0x3f, r1 ; 63 38: cf ef ldi r28, 0xFF ; 255 3a: d4 e0 ldi r29, 0x04 ; 4 3c: de bf out 0x3e, r29 ; 62 3e: cd bf out 0x3d, r28 ; 61 00000040 <__do_copy_data>: 40: 11 e0 ldi r17, 0x01 ; 1 42: a0 e0 ldi r26, 0x00 ; 0 44: b1 e0 ldi r27, 0x01 ; 1 46: e0 e0 ldi r30, 0x00 ; 0 48: f9 e0 ldi r31, 0x09 ; 9 4a: 02 c0 rjmp .+4 ; 0x50 <__do_copy_data+0x10> 4c: 05 90 lpm r0, Z+ 4e: 0d 92 st X+, r0 50: a4 32 cpi r26, 0x24 ; 36 52: b1 07 cpc r27, r17 54: d9 f7 brne .-10 ; 0x4c <__do_copy_data+0xc> 00000056 <__do_clear_bss>: 56: 21 e0 ldi r18, 0x01 ; 1 58: a4 e2 ldi r26, 0x24 ; 36 5a: b1 e0 ldi r27, 0x01 ; 1 5c: 01 c0 rjmp .+2 ; 0x60 <.do_clear_bss_start> 0000005e <.do_clear_bss_loop>: 5e: 1d 92 st X+, r1 00000060 <.do_clear_bss_start>: 60: ac 32 cpi r26, 0x2C ; 44 62: b2 07 cpc r27, r18 64: e1 f7 brne .-8 ; 0x5e <.do_clear_bss_loop> 66: 1d d3 rcall .+1594 ; 0x6a2
68: 49 c4 rjmp .+2194 ; 0x8fc <_exit> 0000006a <__bad_interrupt>: 6a: ca cf rjmp .-108 ; 0x0 <__vectors> 0000006c : /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; g_au8Digits[DIGIT_ONES] = u8Ones; g_au8Digits[DIGIT_UNIT] = u8Unit; 6c: 8f ef ldi r24, 0xFF ; 255 6e: 8a b9 out 0x0a, r24 ; 10 70: 87 e0 ldi r24, 0x07 ; 7 72: 84 b9 out 0x04, r24 ; 4 74: 80 e3 ldi r24, 0x30 ; 48 76: 88 b9 out 0x08, r24 ; 8 78: 3b 98 cbi 0x07, 3 ; 7 7a: 43 98 cbi 0x08, 3 ; 8 7c: 10 92 80 00 sts 0x0080, r1 ; 0x800080 <__EEPROM_REGION_LENGTH__+0x7f0080> 80: 8a e0 ldi r24, 0x0A ; 10 82: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__EEPROM_REGION_LENGTH__+0x7f0081> 86: 84 ec ldi r24, 0xC4 ; 196 88: 99 e0 ldi r25, 0x09 ; 9 8a: 90 93 89 00 sts 0x0089, r25 ; 0x800089 <__EEPROM_REGION_LENGTH__+0x7f0089> 8e: 80 93 88 00 sts 0x0088, r24 ; 0x800088 <__EEPROM_REGION_LENGTH__+0x7f0088> 92: ef e6 ldi r30, 0x6F ; 111 94: f0 e0 ldi r31, 0x00 ; 0 96: 80 81 ld r24, Z 98: 82 60 ori r24, 0x02 ; 2 9a: 80 83 st Z, r24 9c: 78 94 sei 9e: 08 95 ret 000000a0 : a0: 9d ec ldi r25, 0xCD ; 205 a2: 89 9f mul r24, r25 a4: 91 2d mov r25, r1 a6: 11 24 eor r1, r1 a8: 96 95 lsr r25 aa: 96 95 lsr r25 ac: 96 95 lsr r25 ae: e0 e0 ldi r30, 0x00 ; 0 b0: f1 e0 ldi r31, 0x01 ; 1 b2: 92 83 std Z+2, r25 ; 0x02 b4: 99 0f add r25, r25 b6: 29 2f mov r18, r25 b8: 22 0f add r18, r18 ba: 22 0f add r18, r18 bc: 92 0f add r25, r18 be: 89 1b sub r24, r25 c0: 81 83 std Z+1, r24 ; 0x01 c2: 60 83 st Z, r22 c4: 08 95 ret 000000c6 : /************************************************************************/ /* Read button status */ /************************************************************************/ void s_vReadButtons( void ) { if ( !(PINC & (1< { g_u8ButtonCountTop++; ca: 80 91 2b 01 lds r24, 0x012B ; 0x80012b ce: 8f 5f subi r24, 0xFF ; 255 d0: 80 93 2b 01 sts 0x012B, r24 ; 0x80012b d4: 02 c0 rjmp .+4 ; 0xda } else { g_u8ButtonCountTop = 0U; //reset button counter d6: 10 92 2b 01 sts 0x012B, r1 ; 0x80012b } if ( !(PINC & (1< { g_u8ButtonCountBot++; de: 80 91 2a 01 lds r24, 0x012A ; 0x80012a e2: 8f 5f subi r24, 0xFF ; 255 e4: 80 93 2a 01 sts 0x012A, r24 ; 0x80012a else { g_u8ButtonCountBot = 0U; //reset button counter } if ( g_u8ButtonCountTop > BUTTON_THRESHOLD ) e8: 90 91 2b 01 lds r25, 0x012B ; 0x80012b ec: 93 33 cpi r25, 0x33 ; 51 ee: 68 f0 brcs .+26 ; 0x10a f0: 06 c0 rjmp .+12 ; 0xfe { g_u8ButtonCountBot++; } else { g_u8ButtonCountBot = 0U; //reset button counter f2: 10 92 2a 01 sts 0x012A, r1 ; 0x80012a } if ( g_u8ButtonCountTop > BUTTON_THRESHOLD ) f6: 80 91 2b 01 lds r24, 0x012B ; 0x80012b fa: 83 33 cpi r24, 0x33 ; 51 fc: 68 f0 brcs .+26 ; 0x118 { g_u8ButtonCountTop = 0U; //reset top counter fe: 10 92 2b 01 sts 0x012B, r1 ; 0x80012b g_u8Mode = MODE_ANIMATION_1; 102: 81 e0 ldi r24, 0x01 ; 1 104: 80 93 29 01 sts 0x0129, r24 ; 0x800129 108: 08 95 ret } else if ( g_u8ButtonCountBot > BUTTON_THRESHOLD ) 10a: 83 33 cpi r24, 0x33 ; 51 10c: 28 f0 brcs .+10 ; 0x118 { g_u8ButtonCountBot = 0U; //reset bottom counter 10e: 10 92 2a 01 sts 0x012A, r1 ; 0x80012a g_u8Mode = MODE_ANIMATION_2; 112: 82 e0 ldi r24, 0x02 ; 2 114: 80 93 29 01 sts 0x0129, r24 ; 0x800129 118: 08 95 ret 0000011a <__vector_11>: /************************************************************************/ /* Timer1 ISR - show values on display */ /************************************************************************/ ISR ( TIMER1_COMPA_vect ) { 11a: 1f 92 push r1 11c: 0f 92 push r0 11e: 0f b6 in r0, 0x3f ; 63 120: 0f 92 push r0 122: 11 24 eor r1, r1 124: 2f 93 push r18 126: 3f 93 push r19 128: 4f 93 push r20 12a: 5f 93 push r21 12c: 6f 93 push r22 12e: 7f 93 push r23 130: 8f 93 push r24 132: 9f 93 push r25 134: af 93 push r26 136: bf 93 push r27 138: ef 93 push r30 13a: ff 93 push r31 PORTB = 0; 13c: 15 b8 out 0x05, r1 ; 5 PORTD = 0; 13e: 1b b8 out 0x0b, r1 ; 11 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); 140: 8d e0 ldi r24, 0x0D ; 13 142: 8a 95 dec r24 144: f1 f7 brne .-4 ; 0x142 <__vector_11+0x28> 146: 00 00 nop _delay_us(2); PORTB = SELECT_DIGIT(g_u8ISRDigitSelect); 148: 81 e0 ldi r24, 0x01 ; 1 14a: 90 e0 ldi r25, 0x00 ; 0 14c: 00 90 24 01 lds r0, 0x0124 ; 0x800124 <__data_end> 150: 02 c0 rjmp .+4 ; 0x156 <__vector_11+0x3c> 152: 88 0f add r24, r24 154: 99 1f adc r25, r25 156: 0a 94 dec r0 158: e2 f7 brpl .-8 ; 0x152 <__vector_11+0x38> 15a: 85 b9 out 0x05, r24 ; 5 PORTD = g_au8Symbols[g_au8Digits[g_u8ISRDigitSelect]]; 15c: e0 91 24 01 lds r30, 0x0124 ; 0x800124 <__data_end> 160: f0 e0 ldi r31, 0x00 ; 0 162: e0 50 subi r30, 0x00 ; 0 164: ff 4f sbci r31, 0xFF ; 255 166: e0 81 ld r30, Z 168: f0 e0 ldi r31, 0x00 ; 0 16a: ed 5f subi r30, 0xFD ; 253 16c: fe 4f sbci r31, 0xFE ; 254 16e: 80 81 ld r24, Z 170: 8b b9 out 0x0b, r24 ; 11 g_u8ISRDigitSelect++; 172: 80 91 24 01 lds r24, 0x0124 ; 0x800124 <__data_end> 176: 8f 5f subi r24, 0xFF ; 255 if (g_u8ISRDigitSelect > 2U) 178: 83 30 cpi r24, 0x03 ; 3 17a: 18 f4 brcc .+6 ; 0x182 <__vector_11+0x68> PORTB = 0; PORTD = 0; _delay_us(2); PORTB = SELECT_DIGIT(g_u8ISRDigitSelect); PORTD = g_au8Symbols[g_au8Digits[g_u8ISRDigitSelect]]; g_u8ISRDigitSelect++; 17c: 80 93 24 01 sts 0x0124, r24 ; 0x800124 <__data_end> 180: 02 c0 rjmp .+4 ; 0x186 <__vector_11+0x6c> if (g_u8ISRDigitSelect > 2U) { g_u8ISRDigitSelect = 0U; 182: 10 92 24 01 sts 0x0124, r1 ; 0x800124 <__data_end> } /* Read and evaluate button status */ s_vReadButtons(); 186: 9f df rcall .-194 ; 0xc6 } 188: ff 91 pop r31 18a: ef 91 pop r30 18c: bf 91 pop r27 18e: af 91 pop r26 190: 9f 91 pop r25 192: 8f 91 pop r24 194: 7f 91 pop r23 196: 6f 91 pop r22 198: 5f 91 pop r21 19a: 4f 91 pop r20 19c: 3f 91 pop r19 19e: 2f 91 pop r18 1a0: 0f 90 pop r0 1a2: 0f be out 0x3f, r0 ; 63 1a4: 0f 90 pop r0 1a6: 1f 90 pop r1 1a8: 18 95 reti 000001aa : /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 1aa: e0 e0 ldi r30, 0x00 ; 0 1ac: f1 e0 ldi r31, 0x01 ; 1 1ae: 90 e1 ldi r25, 0x10 ; 16 1b0: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 1b2: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 1b4: 90 83 st Z, r25 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); 1b6: 2f eb ldi r18, 0xBF ; 191 1b8: 35 e4 ldi r19, 0x45 ; 69 1ba: 44 e0 ldi r20, 0x04 ; 4 1bc: 21 50 subi r18, 0x01 ; 1 1be: 30 40 sbci r19, 0x00 ; 0 1c0: 40 40 sbci r20, 0x00 ; 0 1c2: e1 f7 brne .-8 ; 0x1bc 1c4: 00 c0 rjmp .+0 ; 0x1c6 1c6: 00 00 nop /************************************************************************/ void s_vShowAnim( uint8_t u8Select ) { s_vSetDisplayDigits( SYM_OFF, SYM_OFF, SYM_OFF ); _delay_ms(ANIMATION_DELAY_MS); switch ( u8Select ) 1c8: 81 30 cpi r24, 0x01 ; 1 1ca: 21 f0 breq .+8 ; 0x1d4 1cc: 82 30 cpi r24, 0x02 ; 2 1ce: 09 f4 brne .+2 ; 0x1d2 1d0: e2 c0 rjmp .+452 ; 0x396 1d2: c1 c1 rjmp .+898 ; 0x556 <__stack+0x57> /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 1d4: e0 e0 ldi r30, 0x00 ; 0 1d6: f1 e0 ldi r31, 0x01 ; 1 1d8: 22 e1 ldi r18, 0x12 ; 18 1da: 22 83 std Z+2, r18 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 1dc: 90 e1 ldi r25, 0x10 ; 16 1de: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 1e0: 90 83 st Z, r25 1e2: 5f eb ldi r21, 0xBF ; 191 1e4: 65 e4 ldi r22, 0x45 ; 69 1e6: 74 e0 ldi r23, 0x04 ; 4 1e8: 51 50 subi r21, 0x01 ; 1 1ea: 60 40 sbci r22, 0x00 ; 0 1ec: 70 40 sbci r23, 0x00 ; 0 1ee: e1 f7 brne .-8 ; 0x1e8 1f0: 00 c0 rjmp .+0 ; 0x1f2 1f2: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 1f4: 3c e0 ldi r19, 0x0C ; 12 1f6: 32 83 std Z+2, r19 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 1f8: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 1fa: 90 83 st Z, r25 1fc: 8f eb ldi r24, 0xBF ; 191 1fe: a5 e4 ldi r26, 0x45 ; 69 200: 44 e0 ldi r20, 0x04 ; 4 202: 81 50 subi r24, 0x01 ; 1 204: a0 40 sbci r26, 0x00 ; 0 206: 40 40 sbci r20, 0x00 ; 0 208: e1 f7 brne .-8 ; 0x202 20a: 00 c0 rjmp .+0 ; 0x20c 20c: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 20e: 88 e0 ldi r24, 0x08 ; 8 210: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 212: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 214: 90 83 st Z, r25 216: 5f eb ldi r21, 0xBF ; 191 218: 65 e4 ldi r22, 0x45 ; 69 21a: 74 e0 ldi r23, 0x04 ; 4 21c: 51 50 subi r21, 0x01 ; 1 21e: 60 40 sbci r22, 0x00 ; 0 220: 70 40 sbci r23, 0x00 ; 0 222: e1 f7 brne .-8 ; 0x21c 224: 00 c0 rjmp .+0 ; 0x226 226: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 228: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 22a: 21 83 std Z+1, r18 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 22c: 90 83 st Z, r25 22e: af eb ldi r26, 0xBF ; 191 230: 45 e4 ldi r20, 0x45 ; 69 232: 54 e0 ldi r21, 0x04 ; 4 234: a1 50 subi r26, 0x01 ; 1 236: 40 40 sbci r20, 0x00 ; 0 238: 50 40 sbci r21, 0x00 ; 0 23a: e1 f7 brne .-8 ; 0x234 23c: 00 c0 rjmp .+0 ; 0x23e 23e: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 240: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 242: 31 83 std Z+1, r19 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 244: 90 83 st Z, r25 246: 6f eb ldi r22, 0xBF ; 191 248: 75 e4 ldi r23, 0x45 ; 69 24a: a4 e0 ldi r26, 0x04 ; 4 24c: 61 50 subi r22, 0x01 ; 1 24e: 70 40 sbci r23, 0x00 ; 0 250: a0 40 sbci r26, 0x00 ; 0 252: e1 f7 brne .-8 ; 0x24c 254: 00 c0 rjmp .+0 ; 0x256 256: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 258: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 25a: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 25c: 90 83 st Z, r25 25e: 4f eb ldi r20, 0xBF ; 191 260: 55 e4 ldi r21, 0x45 ; 69 262: 64 e0 ldi r22, 0x04 ; 4 264: 41 50 subi r20, 0x01 ; 1 266: 50 40 sbci r21, 0x00 ; 0 268: 60 40 sbci r22, 0x00 ; 0 26a: e1 f7 brne .-8 ; 0x264 26c: 00 c0 rjmp .+0 ; 0x26e 26e: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 270: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 272: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 274: 41 e0 ldi r20, 0x01 ; 1 276: 40 83 st Z, r20 278: 7f eb ldi r23, 0xBF ; 191 27a: a5 e4 ldi r26, 0x45 ; 69 27c: 54 e0 ldi r21, 0x04 ; 4 27e: 71 50 subi r23, 0x01 ; 1 280: a0 40 sbci r26, 0x00 ; 0 282: 50 40 sbci r21, 0x00 ; 0 284: e1 f7 brne .-8 ; 0x27e 286: 00 c0 rjmp .+0 ; 0x288 288: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 28a: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 28c: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 28e: 53 e0 ldi r21, 0x03 ; 3 290: 50 83 st Z, r21 292: 6f eb ldi r22, 0xBF ; 191 294: 75 e4 ldi r23, 0x45 ; 69 296: a4 e0 ldi r26, 0x04 ; 4 298: 61 50 subi r22, 0x01 ; 1 29a: 70 40 sbci r23, 0x00 ; 0 29c: a0 40 sbci r26, 0x00 ; 0 29e: e1 f7 brne .-8 ; 0x298 2a0: 00 c0 rjmp .+0 ; 0x2a2 2a2: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 2a4: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 2a6: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 2a8: 80 83 st Z, r24 2aa: 6f eb ldi r22, 0xBF ; 191 2ac: 75 e4 ldi r23, 0x45 ; 69 2ae: a4 e0 ldi r26, 0x04 ; 4 2b0: 61 50 subi r22, 0x01 ; 1 2b2: 70 40 sbci r23, 0x00 ; 0 2b4: a0 40 sbci r26, 0x00 ; 0 2b6: e1 f7 brne .-8 ; 0x2b0 2b8: 00 c0 rjmp .+0 ; 0x2ba 2ba: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 2bc: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 2be: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 2c0: 80 83 st Z, r24 2c2: 6f eb ldi r22, 0xBF ; 191 2c4: 75 e4 ldi r23, 0x45 ; 69 2c6: a4 e0 ldi r26, 0x04 ; 4 2c8: 61 50 subi r22, 0x01 ; 1 2ca: 70 40 sbci r23, 0x00 ; 0 2cc: a0 40 sbci r26, 0x00 ; 0 2ce: e1 f7 brne .-8 ; 0x2c8 2d0: 00 c0 rjmp .+0 ; 0x2d2 2d2: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 2d4: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 2d6: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 2d8: 50 83 st Z, r21 2da: 5f eb ldi r21, 0xBF ; 191 2dc: 65 e4 ldi r22, 0x45 ; 69 2de: 74 e0 ldi r23, 0x04 ; 4 2e0: 51 50 subi r21, 0x01 ; 1 2e2: 60 40 sbci r22, 0x00 ; 0 2e4: 70 40 sbci r23, 0x00 ; 0 2e6: e1 f7 brne .-8 ; 0x2e0 2e8: 00 c0 rjmp .+0 ; 0x2ea 2ea: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 2ec: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 2ee: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 2f0: 40 83 st Z, r20 2f2: af eb ldi r26, 0xBF ; 191 2f4: 45 e4 ldi r20, 0x45 ; 69 2f6: 54 e0 ldi r21, 0x04 ; 4 2f8: a1 50 subi r26, 0x01 ; 1 2fa: 40 40 sbci r20, 0x00 ; 0 2fc: 50 40 sbci r21, 0x00 ; 0 2fe: e1 f7 brne .-8 ; 0x2f8 300: 00 c0 rjmp .+0 ; 0x302 302: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 304: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 306: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 308: 90 83 st Z, r25 30a: 6f eb ldi r22, 0xBF ; 191 30c: 75 e4 ldi r23, 0x45 ; 69 30e: a4 e0 ldi r26, 0x04 ; 4 310: 61 50 subi r22, 0x01 ; 1 312: 70 40 sbci r23, 0x00 ; 0 314: a0 40 sbci r26, 0x00 ; 0 316: e1 f7 brne .-8 ; 0x310 318: 00 c0 rjmp .+0 ; 0x31a 31a: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 31c: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 31e: 31 83 std Z+1, r19 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 320: 90 83 st Z, r25 322: 4f eb ldi r20, 0xBF ; 191 324: 55 e4 ldi r21, 0x45 ; 69 326: 64 e0 ldi r22, 0x04 ; 4 328: 41 50 subi r20, 0x01 ; 1 32a: 50 40 sbci r21, 0x00 ; 0 32c: 60 40 sbci r22, 0x00 ; 0 32e: e1 f7 brne .-8 ; 0x328 330: 00 c0 rjmp .+0 ; 0x332 332: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 334: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 336: 21 83 std Z+1, r18 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 338: 90 83 st Z, r25 33a: 7f eb ldi r23, 0xBF ; 191 33c: a5 e4 ldi r26, 0x45 ; 69 33e: 44 e0 ldi r20, 0x04 ; 4 340: 71 50 subi r23, 0x01 ; 1 342: a0 40 sbci r26, 0x00 ; 0 344: 40 40 sbci r20, 0x00 ; 0 346: e1 f7 brne .-8 ; 0x340 348: 00 c0 rjmp .+0 ; 0x34a 34a: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 34c: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 34e: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 350: 90 83 st Z, r25 352: 5f eb ldi r21, 0xBF ; 191 354: 65 e4 ldi r22, 0x45 ; 69 356: 74 e0 ldi r23, 0x04 ; 4 358: 51 50 subi r21, 0x01 ; 1 35a: 60 40 sbci r22, 0x00 ; 0 35c: 70 40 sbci r23, 0x00 ; 0 35e: e1 f7 brne .-8 ; 0x358 360: 00 c0 rjmp .+0 ; 0x362 362: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 364: 32 83 std Z+2, r19 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 366: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 368: 90 83 st Z, r25 36a: 8f eb ldi r24, 0xBF ; 191 36c: a5 e4 ldi r26, 0x45 ; 69 36e: 34 e0 ldi r19, 0x04 ; 4 370: 81 50 subi r24, 0x01 ; 1 372: a0 40 sbci r26, 0x00 ; 0 374: 30 40 sbci r19, 0x00 ; 0 376: e1 f7 brne .-8 ; 0x370 378: 00 c0 rjmp .+0 ; 0x37a 37a: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 37c: 22 83 std Z+2, r18 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 37e: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 380: 90 83 st Z, r25 382: 4f eb ldi r20, 0xBF ; 191 384: 55 e4 ldi r21, 0x45 ; 69 386: 64 e0 ldi r22, 0x04 ; 4 388: 41 50 subi r20, 0x01 ; 1 38a: 50 40 sbci r21, 0x00 ; 0 38c: 60 40 sbci r22, 0x00 ; 0 38e: e1 f7 brne .-8 ; 0x388 390: 00 c0 rjmp .+0 ; 0x392 392: 00 00 nop 394: e0 c0 rjmp .+448 ; 0x556 <__stack+0x57> /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 396: e0 e0 ldi r30, 0x00 ; 0 398: f1 e0 ldi r31, 0x01 ; 1 39a: 22 e1 ldi r18, 0x12 ; 18 39c: 22 83 std Z+2, r18 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 39e: 80 e1 ldi r24, 0x10 ; 16 3a0: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 3a2: 80 83 st Z, r24 3a4: 7f eb ldi r23, 0xBF ; 191 3a6: 95 e4 ldi r25, 0x45 ; 69 3a8: a4 e0 ldi r26, 0x04 ; 4 3aa: 71 50 subi r23, 0x01 ; 1 3ac: 90 40 sbci r25, 0x00 ; 0 3ae: a0 40 sbci r26, 0x00 ; 0 3b0: e1 f7 brne .-8 ; 0x3aa 3b2: 00 c0 rjmp .+0 ; 0x3b4 3b4: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 3b6: 3c e0 ldi r19, 0x0C ; 12 3b8: 32 83 std Z+2, r19 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 3ba: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 3bc: 80 83 st Z, r24 3be: 4f eb ldi r20, 0xBF ; 191 3c0: 55 e4 ldi r21, 0x45 ; 69 3c2: 64 e0 ldi r22, 0x04 ; 4 3c4: 41 50 subi r20, 0x01 ; 1 3c6: 50 40 sbci r21, 0x00 ; 0 3c8: 60 40 sbci r22, 0x00 ; 0 3ca: e1 f7 brne .-8 ; 0x3c4 3cc: 00 c0 rjmp .+0 ; 0x3ce 3ce: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 3d0: 98 e0 ldi r25, 0x08 ; 8 3d2: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 3d4: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 3d6: 80 83 st Z, r24 3d8: 7f eb ldi r23, 0xBF ; 191 3da: a5 e4 ldi r26, 0x45 ; 69 3dc: 44 e0 ldi r20, 0x04 ; 4 3de: 71 50 subi r23, 0x01 ; 1 3e0: a0 40 sbci r26, 0x00 ; 0 3e2: 40 40 sbci r20, 0x00 ; 0 3e4: e1 f7 brne .-8 ; 0x3de 3e6: 00 c0 rjmp .+0 ; 0x3e8 3e8: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 3ea: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 3ec: 21 83 std Z+1, r18 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 3ee: 80 83 st Z, r24 3f0: 5f eb ldi r21, 0xBF ; 191 3f2: 65 e4 ldi r22, 0x45 ; 69 3f4: 74 e0 ldi r23, 0x04 ; 4 3f6: 51 50 subi r21, 0x01 ; 1 3f8: 60 40 sbci r22, 0x00 ; 0 3fa: 70 40 sbci r23, 0x00 ; 0 3fc: e1 f7 brne .-8 ; 0x3f6 3fe: 00 c0 rjmp .+0 ; 0x400 <__LOCK_REGION_LENGTH__> 400: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 402: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 404: 31 83 std Z+1, r19 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 406: 80 83 st Z, r24 408: af eb ldi r26, 0xBF ; 191 40a: 45 e4 ldi r20, 0x45 ; 69 40c: 54 e0 ldi r21, 0x04 ; 4 40e: a1 50 subi r26, 0x01 ; 1 410: 40 40 sbci r20, 0x00 ; 0 412: 50 40 sbci r21, 0x00 ; 0 414: e1 f7 brne .-8 ; 0x40e <__LOCK_REGION_LENGTH__+0xe> 416: 00 c0 rjmp .+0 ; 0x418 <__LOCK_REGION_LENGTH__+0x18> 418: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 41a: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 41c: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 41e: 80 83 st Z, r24 420: 6f eb ldi r22, 0xBF ; 191 422: 75 e4 ldi r23, 0x45 ; 69 424: a4 e0 ldi r26, 0x04 ; 4 426: 61 50 subi r22, 0x01 ; 1 428: 70 40 sbci r23, 0x00 ; 0 42a: a0 40 sbci r26, 0x00 ; 0 42c: e1 f7 brne .-8 ; 0x426 <__LOCK_REGION_LENGTH__+0x26> 42e: 00 c0 rjmp .+0 ; 0x430 <__LOCK_REGION_LENGTH__+0x30> 430: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 432: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 434: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 436: 41 e0 ldi r20, 0x01 ; 1 438: 40 83 st Z, r20 43a: 5f eb ldi r21, 0xBF ; 191 43c: 65 e4 ldi r22, 0x45 ; 69 43e: 74 e0 ldi r23, 0x04 ; 4 440: 51 50 subi r21, 0x01 ; 1 442: 60 40 sbci r22, 0x00 ; 0 444: 70 40 sbci r23, 0x00 ; 0 446: e1 f7 brne .-8 ; 0x440 <__LOCK_REGION_LENGTH__+0x40> 448: 00 c0 rjmp .+0 ; 0x44a <__LOCK_REGION_LENGTH__+0x4a> 44a: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 44c: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 44e: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 450: 53 e0 ldi r21, 0x03 ; 3 452: 50 83 st Z, r21 454: af eb ldi r26, 0xBF ; 191 456: 65 e4 ldi r22, 0x45 ; 69 458: 74 e0 ldi r23, 0x04 ; 4 45a: a1 50 subi r26, 0x01 ; 1 45c: 60 40 sbci r22, 0x00 ; 0 45e: 70 40 sbci r23, 0x00 ; 0 460: e1 f7 brne .-8 ; 0x45a <__LOCK_REGION_LENGTH__+0x5a> 462: 00 c0 rjmp .+0 ; 0x464 <__LOCK_REGION_LENGTH__+0x64> 464: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 466: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 468: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 46a: 90 83 st Z, r25 46c: af eb ldi r26, 0xBF ; 191 46e: 65 e4 ldi r22, 0x45 ; 69 470: 74 e0 ldi r23, 0x04 ; 4 472: a1 50 subi r26, 0x01 ; 1 474: 60 40 sbci r22, 0x00 ; 0 476: 70 40 sbci r23, 0x00 ; 0 478: e1 f7 brne .-8 ; 0x472 <__LOCK_REGION_LENGTH__+0x72> 47a: 00 c0 rjmp .+0 ; 0x47c <__LOCK_REGION_LENGTH__+0x7c> 47c: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 47e: 52 83 std Z+2, r21 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 480: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 482: 90 83 st Z, r25 484: af eb ldi r26, 0xBF ; 191 486: 65 e4 ldi r22, 0x45 ; 69 488: 74 e0 ldi r23, 0x04 ; 4 48a: a1 50 subi r26, 0x01 ; 1 48c: 60 40 sbci r22, 0x00 ; 0 48e: 70 40 sbci r23, 0x00 ; 0 490: e1 f7 brne .-8 ; 0x48a <__LOCK_REGION_LENGTH__+0x8a> 492: 00 c0 rjmp .+0 ; 0x494 <__LOCK_REGION_LENGTH__+0x94> 494: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 496: 42 83 std Z+2, r20 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 498: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 49a: 90 83 st Z, r25 49c: af eb ldi r26, 0xBF ; 191 49e: 65 e4 ldi r22, 0x45 ; 69 4a0: 74 e0 ldi r23, 0x04 ; 4 4a2: a1 50 subi r26, 0x01 ; 1 4a4: 60 40 sbci r22, 0x00 ; 0 4a6: 70 40 sbci r23, 0x00 ; 0 4a8: e1 f7 brne .-8 ; 0x4a2 <__LOCK_REGION_LENGTH__+0xa2> 4aa: 00 c0 rjmp .+0 ; 0x4ac <__LOCK_REGION_LENGTH__+0xac> 4ac: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 4ae: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 4b0: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 4b2: 90 83 st Z, r25 4b4: af eb ldi r26, 0xBF ; 191 4b6: 65 e4 ldi r22, 0x45 ; 69 4b8: 74 e0 ldi r23, 0x04 ; 4 4ba: a1 50 subi r26, 0x01 ; 1 4bc: 60 40 sbci r22, 0x00 ; 0 4be: 70 40 sbci r23, 0x00 ; 0 4c0: e1 f7 brne .-8 ; 0x4ba <__LOCK_REGION_LENGTH__+0xba> 4c2: 00 c0 rjmp .+0 ; 0x4c4 <__LOCK_REGION_LENGTH__+0xc4> 4c4: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 4c6: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 4c8: 51 83 std Z+1, r21 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 4ca: 90 83 st Z, r25 4cc: af eb ldi r26, 0xBF ; 191 4ce: 55 e4 ldi r21, 0x45 ; 69 4d0: 64 e0 ldi r22, 0x04 ; 4 4d2: a1 50 subi r26, 0x01 ; 1 4d4: 50 40 sbci r21, 0x00 ; 0 4d6: 60 40 sbci r22, 0x00 ; 0 4d8: e1 f7 brne .-8 ; 0x4d2 <__LOCK_REGION_LENGTH__+0xd2> 4da: 00 c0 rjmp .+0 ; 0x4dc <__LOCK_REGION_LENGTH__+0xdc> 4dc: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 4de: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 4e0: 41 83 std Z+1, r20 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 4e2: 90 83 st Z, r25 4e4: 7f eb ldi r23, 0xBF ; 191 4e6: a5 e4 ldi r26, 0x45 ; 69 4e8: 44 e0 ldi r20, 0x04 ; 4 4ea: 71 50 subi r23, 0x01 ; 1 4ec: a0 40 sbci r26, 0x00 ; 0 4ee: 40 40 sbci r20, 0x00 ; 0 4f0: e1 f7 brne .-8 ; 0x4ea <__LOCK_REGION_LENGTH__+0xea> 4f2: 00 c0 rjmp .+0 ; 0x4f4 <__LOCK_REGION_LENGTH__+0xf4> 4f4: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 4f6: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 4f8: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 4fa: 90 83 st Z, r25 4fc: 5f eb ldi r21, 0xBF ; 191 4fe: 65 e4 ldi r22, 0x45 ; 69 500: 74 e0 ldi r23, 0x04 ; 4 502: 51 50 subi r21, 0x01 ; 1 504: 60 40 sbci r22, 0x00 ; 0 506: 70 40 sbci r23, 0x00 ; 0 508: e1 f7 brne .-8 ; 0x502 <__stack+0x3> 50a: 00 c0 rjmp .+0 ; 0x50c <__stack+0xd> 50c: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 50e: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 510: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 512: 30 83 st Z, r19 514: 9f eb ldi r25, 0xBF ; 191 516: a5 e4 ldi r26, 0x45 ; 69 518: 34 e0 ldi r19, 0x04 ; 4 51a: 91 50 subi r25, 0x01 ; 1 51c: a0 40 sbci r26, 0x00 ; 0 51e: 30 40 sbci r19, 0x00 ; 0 520: e1 f7 brne .-8 ; 0x51a <__stack+0x1b> 522: 00 c0 rjmp .+0 ; 0x524 <__stack+0x25> 524: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 526: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 528: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 52a: 20 83 st Z, r18 52c: 4f eb ldi r20, 0xBF ; 191 52e: 55 e4 ldi r21, 0x45 ; 69 530: 64 e0 ldi r22, 0x04 ; 4 532: 41 50 subi r20, 0x01 ; 1 534: 50 40 sbci r21, 0x00 ; 0 536: 60 40 sbci r22, 0x00 ; 0 538: e1 f7 brne .-8 ; 0x532 <__stack+0x33> 53a: 00 c0 rjmp .+0 ; 0x53c <__stack+0x3d> 53c: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 53e: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 540: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 542: 80 83 st Z, r24 544: 7f eb ldi r23, 0xBF ; 191 546: 85 e4 ldi r24, 0x45 ; 69 548: 94 e0 ldi r25, 0x04 ; 4 54a: 71 50 subi r23, 0x01 ; 1 54c: 80 40 sbci r24, 0x00 ; 0 54e: 90 40 sbci r25, 0x00 ; 0 550: e1 f7 brne .-8 ; 0x54a <__stack+0x4b> 552: 00 c0 rjmp .+0 ; 0x554 <__stack+0x55> 554: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 556: e0 e0 ldi r30, 0x00 ; 0 558: f1 e0 ldi r31, 0x01 ; 1 55a: 80 e1 ldi r24, 0x10 ; 16 55c: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 55e: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 560: 80 83 st Z, r24 562: af eb ldi r26, 0xBF ; 191 564: 25 e4 ldi r18, 0x45 ; 69 566: 34 e0 ldi r19, 0x04 ; 4 568: a1 50 subi r26, 0x01 ; 1 56a: 20 40 sbci r18, 0x00 ; 0 56c: 30 40 sbci r19, 0x00 ; 0 56e: e1 f7 brne .-8 ; 0x568 <__stack+0x69> 570: 00 c0 rjmp .+0 ; 0x572 <__stack+0x73> 572: 00 00 nop 574: 08 95 ret 00000576 : /************************************************************************/ /* Read humidity and temperature from DHT22 */ /************************************************************************/ uint8_t s_u8ReadSensor( void ) { 576: 0f 93 push r16 578: 1f 93 push r17 57a: cf 93 push r28 57c: df 93 push r29 57e: 00 d0 rcall .+0 ; 0x580 580: 00 d0 rcall .+0 ; 0x582 582: 1f 92 push r1 584: cd b7 in r28, 0x3d ; 61 586: de b7 in r29, 0x3e ; 62 uint8_t timeout = 200; SENSOR_sda_in; 588: 3b 98 cbi 0x07, 3 ; 7 // Bus master has released time min: 20us, typ: 30us, max: 200us while ( SENSOR_is_hi ) 58a: 89 ec ldi r24, 0xC9 ; 201 58c: 07 c0 rjmp .+14 ; 0x59c #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); 58e: 36 e0 ldi r19, 0x06 ; 6 590: 3a 95 dec r19 592: f1 f7 brne .-4 ; 0x590 594: 00 c0 rjmp .+0 ; 0x596 596: 81 50 subi r24, 0x01 ; 1 { _delay_us(1); if ( !timeout-- ) 598: 09 f4 brne .+2 ; 0x59c 59a: 6e c0 rjmp .+220 ; 0x678 uint8_t timeout = 200; SENSOR_sda_in; // Bus master has released time min: 20us, typ: 30us, max: 200us while ( SENSOR_is_hi ) 59c: 33 99 sbic 0x06, 3 ; 6 59e: f7 cf rjmp .-18 ; 0x58e 5a0: 86 e5 ldi r24, 0x56 ; 86 5a2: 07 c0 rjmp .+14 ; 0x5b2 5a4: 96 e0 ldi r25, 0x06 ; 6 5a6: 9a 95 dec r25 5a8: f1 f7 brne .-4 ; 0x5a6 5aa: 00 c0 rjmp .+0 ; 0x5ac 5ac: 81 50 subi r24, 0x01 ; 1 // AM2302 response signal min: 75us typ:80us max:85us timeout = 85; while(SENSOR_is_low) { _delay_us(1); if (!timeout--) 5ae: 09 f4 brne .+2 ; 0x5b2 5b0: 65 c0 rjmp .+202 ; 0x67c } } // AM2302 response signal min: 75us typ:80us max:85us timeout = 85; while(SENSOR_is_low) 5b2: 33 9b sbis 0x06, 3 ; 6 5b4: f7 cf rjmp .-18 ; 0x5a4 5b6: 86 e5 ldi r24, 0x56 ; 86 5b8: 07 c0 rjmp .+14 ; 0x5c8 5ba: a6 e0 ldi r26, 0x06 ; 6 5bc: aa 95 dec r26 5be: f1 f7 brne .-4 ; 0x5bc 5c0: 00 c0 rjmp .+0 ; 0x5c2 5c2: 81 50 subi r24, 0x01 ; 1 timeout = 85; while(SENSOR_is_hi) { _delay_us(1); if (!timeout--) 5c4: 09 f4 brne .+2 ; 0x5c8 5c6: 5c c0 rjmp .+184 ; 0x680 return 3; } } // response to low time timeout = 85; while(SENSOR_is_hi) 5c8: 33 99 sbic 0x06, 3 ; 6 5ca: f7 cf rjmp .-18 ; 0x5ba * signal 0 high time: 22 26 30 (bit=0) * signal 1 high time: 68 70 75 (bit=1) * signal 0,1 down time: 48 50 55 */ uint8_t sensor_data[5]={0}; 5cc: fe 01 movw r30, r28 5ce: 31 96 adiw r30, 0x01 ; 1 5d0: 85 e0 ldi r24, 0x05 ; 5 5d2: df 01 movw r26, r30 5d4: 1d 92 st X+, r1 5d6: 8a 95 dec r24 5d8: e9 f7 brne .-6 ; 0x5d4 5da: ae 01 movw r20, r28 5dc: 4a 5f subi r20, 0xFA ; 250 5de: 5f 4f sbci r21, 0xFF ; 255 5e0: 22 c0 rjmp .+68 ; 0x626 5e2: b6 e0 ldi r27, 0x06 ; 6 5e4: ba 95 dec r27 5e6: f1 f7 brne .-4 ; 0x5e4 5e8: 00 c0 rjmp .+0 ; 0x5ea 5ea: 91 50 subi r25, 0x01 ; 1 while(SENSOR_is_low) { _delay_us(1); // if timeout == 0 => sensor do not response if (!timeout--) 5ec: 11 f4 brne .+4 ; 0x5f2 5ee: 4a c0 rjmp .+148 ; 0x684 5f0: 98 e3 ldi r25, 0x38 ; 56 // get 8 bits from sensor for(uint8_t j = 1; j <= 8; j++) { // wait for sensor response timeout = 55; while(SENSOR_is_low) 5f2: 33 9b sbis 0x06, 3 ; 6 5f4: f6 cf rjmp .-20 ; 0x5e2 5f6: 38 ec ldi r19, 0xC8 ; 200 5f8: 3a 95 dec r19 5fa: f1 f7 brne .-4 ; 0x5f8 } } // wait 30 us to check if bit is logical "1" or "0" _delay_us(30); sensor_byte <<= 1; // add new lower bit 5fc: 22 0f add r18, r18 // If sda ist high after 30 us then bit is logical "1" else it was a logical "0" // For a logical "1" sda have to be low after 75 us. if (SENSOR_is_hi) 5fe: 33 99 sbic 0x06, 3 ; 6 600: 08 c0 rjmp .+16 ; 0x612 602: 0b c0 rjmp .+22 ; 0x61a 604: a6 e0 ldi r26, 0x06 ; 6 606: aa 95 dec r26 608: f1 f7 brne .-4 ; 0x606 60a: 00 c0 rjmp .+0 ; 0x60c 60c: 91 50 subi r25, 0x01 ; 1 while(SENSOR_is_hi) { _delay_us(1); if (!timeout--) 60e: 11 f4 brne .+4 ; 0x614 610: 3b c0 rjmp .+118 ; 0x688 612: 9e e2 ldi r25, 0x2E ; 46 if (SENSOR_is_hi) { sensor_byte |= 1; // add logical "1" timeout = 45; // 30us - 75us = 45us while(SENSOR_is_hi) 614: 33 99 sbic 0x06, 3 ; 6 616: f6 cf rjmp .-20 ; 0x604 // If sda ist high after 30 us then bit is logical "1" else it was a logical "0" // For a logical "1" sda have to be low after 75 us. if (SENSOR_is_hi) { sensor_byte |= 1; // add logical "1" 618: 21 60 ori r18, 0x01 ; 1 61a: 81 50 subi r24, 0x01 ; 1 for(uint8_t i = 0; i < 5; i++) { uint8_t sensor_byte = 0; // get 8 bits from sensor for(uint8_t j = 1; j <= 8; j++) 61c: 49 f7 brne .-46 ; 0x5f0 } } } } sensor_data[i] = sensor_byte; 61e: 21 93 st Z+, r18 * signal 0,1 down time: 48 50 55 */ uint8_t sensor_data[5]={0}; for(uint8_t i = 0; i < 5; i++) 620: 4e 17 cp r20, r30 622: 5f 07 cpc r21, r31 624: 19 f0 breq .+6 ; 0x62c 626: 88 e0 ldi r24, 0x08 ; 8 628: 20 e0 ldi r18, 0x00 ; 0 62a: e2 cf rjmp .-60 ; 0x5f0 sensor_data[i] = sensor_byte; } // checksum if ( ((sensor_data[0] + sensor_data[1] + sensor_data[2] + sensor_data[3]) & 0xff ) != sensor_data[4]) 62c: a9 81 ldd r26, Y+1 ; 0x01 62e: b0 e0 ldi r27, 0x00 ; 0 630: ea 81 ldd r30, Y+2 ; 0x02 632: f0 e0 ldi r31, 0x00 ; 0 634: 6b 81 ldd r22, Y+3 ; 0x03 636: 70 e0 ldi r23, 0x00 ; 0 638: 4c 81 ldd r20, Y+4 ; 0x04 63a: 50 e0 ldi r21, 0x00 ; 0 63c: 9d 01 movw r18, r26 63e: 2e 0f add r18, r30 640: 3f 1f adc r19, r31 642: 26 0f add r18, r22 644: 37 1f adc r19, r23 646: 24 0f add r18, r20 648: 35 1f adc r19, r21 64a: 33 27 eor r19, r19 64c: 0d 81 ldd r16, Y+5 ; 0x05 64e: 10 e0 ldi r17, 0x00 ; 0 650: 20 17 cp r18, r16 652: 31 07 cpc r19, r17 654: d9 f4 brne .+54 ; 0x68c // debug output //printf("%b %b %b %b %b %b" CR, sensor_data[0], sensor_data[1], sensor_data[2], sensor_data[3], sensor_data[4], ((sensor_data[0]+sensor_data[1]+sensor_data[2]+sensor_data[3]) & 0xff )); return 7; } g_u16Humidity = (sensor_data[0] << 8) + sensor_data[1]; 656: ba 2f mov r27, r26 658: aa 27 eor r26, r26 65a: ea 0f add r30, r26 65c: fb 1f adc r31, r27 65e: f0 93 28 01 sts 0x0128, r31 ; 0x800128 662: e0 93 27 01 sts 0x0127, r30 ; 0x800127 g_u16Temperature = (sensor_data[2] << 8) + sensor_data[3]; 666: 76 2f mov r23, r22 668: 66 27 eor r22, r22 66a: 46 0f add r20, r22 66c: 57 1f adc r21, r23 66e: 50 93 26 01 sts 0x0126, r21 ; 0x800126 672: 40 93 25 01 sts 0x0125, r20 ; 0x800125 return 0; 676: 0b c0 rjmp .+22 ; 0x68e while ( SENSOR_is_hi ) { _delay_us(1); if ( !timeout-- ) { return 2; 678: 82 e0 ldi r24, 0x02 ; 2 67a: 09 c0 rjmp .+18 ; 0x68e while(SENSOR_is_low) { _delay_us(1); if (!timeout--) { return 3; 67c: 83 e0 ldi r24, 0x03 ; 3 67e: 07 c0 rjmp .+14 ; 0x68e while(SENSOR_is_hi) { _delay_us(1); if (!timeout--) { return 4; 680: 84 e0 ldi r24, 0x04 ; 4 682: 05 c0 rjmp .+10 ; 0x68e _delay_us(1); // if timeout == 0 => sensor do not response if (!timeout--) { return 5; 684: 85 e0 ldi r24, 0x05 ; 5 686: 03 c0 rjmp .+6 ; 0x68e { _delay_us(1); if (!timeout--) { return 6; 688: 86 e0 ldi r24, 0x06 ; 6 68a: 01 c0 rjmp .+2 ; 0x68e // checksum if ( ((sensor_data[0] + sensor_data[1] + sensor_data[2] + sensor_data[3]) & 0xff ) != sensor_data[4]) { // debug output //printf("%b %b %b %b %b %b" CR, sensor_data[0], sensor_data[1], sensor_data[2], sensor_data[3], sensor_data[4], ((sensor_data[0]+sensor_data[1]+sensor_data[2]+sensor_data[3]) & 0xff )); return 7; 68c: 87 e0 ldi r24, 0x07 ; 7 g_u16Humidity = (sensor_data[0] << 8) + sensor_data[1]; g_u16Temperature = (sensor_data[2] << 8) + sensor_data[3]; return 0; 68e: 0f 90 pop r0 690: 0f 90 pop r0 692: 0f 90 pop r0 694: 0f 90 pop r0 696: 0f 90 pop r0 698: df 91 pop r29 69a: cf 91 pop r28 69c: 1f 91 pop r17 69e: 0f 91 pop r16 6a0: 08 95 ret 000006a2
: int main(void) { uint8_t u8ErrorCode = 0U; uint8_t u8Loop = 0U; s_vInit(); 6a2: e4 dc rcall .-1592 ; 0x6c /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 6a4: e0 e0 ldi r30, 0x00 ; 0 6a6: f1 e0 ldi r31, 0x01 ; 1 6a8: 90 e1 ldi r25, 0x10 ; 16 6aa: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 6ac: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 6ae: 90 83 st Z, r25 #else //round up by default __ticks_dc = (uint32_t)(ceil(fabs(__tmp))); #endif __builtin_avr_delay_cycles(__ticks_dc); 6b0: af e4 ldi r26, 0x4F ; 79 6b2: b3 ec ldi r27, 0xC3 ; 195 6b4: 11 97 sbiw r26, 0x01 ; 1 6b6: f1 f7 brne .-4 ; 0x6b4 6b8: 00 c0 rjmp .+0 ; 0x6ba 6ba: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 6bc: 83 e1 ldi r24, 0x13 ; 19 6be: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 6c0: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 6c2: 90 83 st Z, r25 6c4: bf e7 ldi r27, 0x7F ; 127 6c6: 0f e4 ldi r16, 0x4F ; 79 6c8: 12 e1 ldi r17, 0x12 ; 18 6ca: b1 50 subi r27, 0x01 ; 1 6cc: 00 40 sbci r16, 0x00 ; 0 6ce: 10 40 sbci r17, 0x00 ; 0 6d0: e1 f7 brne .-8 ; 0x6ca 6d2: 00 c0 rjmp .+0 ; 0x6d4 6d4: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 6d6: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 6d8: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 6da: 90 83 st Z, r25 6dc: 2f e7 ldi r18, 0x7F ; 127 6de: 3f e4 ldi r19, 0x4F ; 79 6e0: 42 e1 ldi r20, 0x12 ; 18 6e2: 21 50 subi r18, 0x01 ; 1 6e4: 30 40 sbci r19, 0x00 ; 0 6e6: 40 40 sbci r20, 0x00 ; 0 6e8: e1 f7 brne .-8 ; 0x6e2 6ea: 00 c0 rjmp .+0 ; 0x6ec 6ec: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 6ee: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 6f0: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 6f2: 80 83 st Z, r24 6f4: 8f e7 ldi r24, 0x7F ; 127 6f6: 9f e4 ldi r25, 0x4F ; 79 6f8: a2 e1 ldi r26, 0x12 ; 18 6fa: 81 50 subi r24, 0x01 ; 1 6fc: 90 40 sbci r25, 0x00 ; 0 6fe: a0 40 sbci r26, 0x00 ; 0 700: e1 f7 brne .-8 ; 0x6fa 702: 00 c0 rjmp .+0 ; 0x704 704: 00 00 nop 706: 35 e0 ldi r19, 0x05 ; 5 /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 708: 80 e1 ldi r24, 0x10 ; 16 g_au8Digits[DIGIT_ONES] = u8Ones; 70a: 23 e1 ldi r18, 0x13 ; 19 g_au8Digits[DIGIT_UNIT] = u8Unit; 70c: d9 e1 ldi r29, 0x19 ; 25 70e: c7 e0 ldi r28, 0x07 ; 7 710: ba e1 ldi r27, 0x1A ; 26 /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; g_au8Digits[DIGIT_ONES] = u8Ones; 712: 96 e1 ldi r25, 0x16 ; 22 g_au8Digits[DIGIT_UNIT] = u8Unit; 714: ab e1 ldi r26, 0x1B ; 27 /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 716: 7c e1 ldi r23, 0x1C ; 28 718: 6d e1 ldi r22, 0x1D ; 29 71a: 5e e1 ldi r21, 0x1E ; 30 71c: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 71e: 21 83 std Z+1, r18 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 720: d0 83 st Z, r29 722: 0f eb ldi r16, 0xBF ; 191 724: 15 e4 ldi r17, 0x45 ; 69 726: 44 e0 ldi r20, 0x04 ; 4 728: 01 50 subi r16, 0x01 ; 1 72a: 10 40 sbci r17, 0x00 ; 0 72c: 40 40 sbci r20, 0x00 ; 0 72e: e1 f7 brne .-8 ; 0x728 730: 00 c0 rjmp .+0 ; 0x732 732: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 734: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 736: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 738: c0 83 st Z, r28 73a: 0f eb ldi r16, 0xBF ; 191 73c: 15 e4 ldi r17, 0x45 ; 69 73e: 44 e0 ldi r20, 0x04 ; 4 740: 01 50 subi r16, 0x01 ; 1 742: 10 40 sbci r17, 0x00 ; 0 744: 40 40 sbci r20, 0x00 ; 0 746: e1 f7 brne .-8 ; 0x740 748: 00 c0 rjmp .+0 ; 0x74a 74a: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 74c: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 74e: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 750: b0 83 st Z, r27 752: 0f eb ldi r16, 0xBF ; 191 754: 15 e4 ldi r17, 0x45 ; 69 756: 44 e0 ldi r20, 0x04 ; 4 758: 01 50 subi r16, 0x01 ; 1 75a: 10 40 sbci r17, 0x00 ; 0 75c: 40 40 sbci r20, 0x00 ; 0 75e: e1 f7 brne .-8 ; 0x758 760: 00 c0 rjmp .+0 ; 0x762 762: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 764: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 766: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 768: a0 83 st Z, r26 76a: 0f eb ldi r16, 0xBF ; 191 76c: 15 e4 ldi r17, 0x45 ; 69 76e: 44 e0 ldi r20, 0x04 ; 4 770: 01 50 subi r16, 0x01 ; 1 772: 10 40 sbci r17, 0x00 ; 0 774: 40 40 sbci r20, 0x00 ; 0 776: e1 f7 brne .-8 ; 0x770 778: 00 c0 rjmp .+0 ; 0x77a 77a: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 77c: 92 83 std Z+2, r25 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 77e: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 780: 90 83 st Z, r25 782: 0f eb ldi r16, 0xBF ; 191 784: 15 e4 ldi r17, 0x45 ; 69 786: 44 e0 ldi r20, 0x04 ; 4 788: 01 50 subi r16, 0x01 ; 1 78a: 10 40 sbci r17, 0x00 ; 0 78c: 40 40 sbci r20, 0x00 ; 0 78e: e1 f7 brne .-8 ; 0x788 790: 00 c0 rjmp .+0 ; 0x792 792: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 794: 72 83 std Z+2, r23 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 796: 91 83 std Z+1, r25 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 798: 80 83 st Z, r24 79a: 0f eb ldi r16, 0xBF ; 191 79c: 15 e4 ldi r17, 0x45 ; 69 79e: 44 e0 ldi r20, 0x04 ; 4 7a0: 01 50 subi r16, 0x01 ; 1 7a2: 10 40 sbci r17, 0x00 ; 0 7a4: 40 40 sbci r20, 0x00 ; 0 7a6: e1 f7 brne .-8 ; 0x7a0 7a8: 00 c0 rjmp .+0 ; 0x7aa 7aa: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 7ac: 62 83 std Z+2, r22 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 7ae: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 7b0: 80 83 st Z, r24 7b2: 0f eb ldi r16, 0xBF ; 191 7b4: 15 e4 ldi r17, 0x45 ; 69 7b6: 44 e0 ldi r20, 0x04 ; 4 7b8: 01 50 subi r16, 0x01 ; 1 7ba: 10 40 sbci r17, 0x00 ; 0 7bc: 40 40 sbci r20, 0x00 ; 0 7be: e1 f7 brne .-8 ; 0x7b8 7c0: 00 c0 rjmp .+0 ; 0x7c2 7c2: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 7c4: 52 83 std Z+2, r21 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 7c6: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 7c8: 80 83 st Z, r24 7ca: 0f eb ldi r16, 0xBF ; 191 7cc: 15 e4 ldi r17, 0x45 ; 69 7ce: 44 e0 ldi r20, 0x04 ; 4 7d0: 01 50 subi r16, 0x01 ; 1 7d2: 10 40 sbci r17, 0x00 ; 0 7d4: 40 40 sbci r20, 0x00 ; 0 7d6: e1 f7 brne .-8 ; 0x7d0 7d8: 00 c0 rjmp .+0 ; 0x7da 7da: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 7dc: 0f e1 ldi r16, 0x1F ; 31 7de: 02 83 std Z+2, r16 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 7e0: 21 83 std Z+1, r18 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 7e2: 80 83 st Z, r24 7e4: 1f eb ldi r17, 0xBF ; 191 7e6: 45 e4 ldi r20, 0x45 ; 69 7e8: 04 e0 ldi r16, 0x04 ; 4 7ea: 11 50 subi r17, 0x01 ; 1 7ec: 40 40 sbci r20, 0x00 ; 0 7ee: 00 40 sbci r16, 0x00 ; 0 7f0: e1 f7 brne .-8 ; 0x7ea 7f2: 00 c0 rjmp .+0 ; 0x7f4 7f4: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 7f6: 22 83 std Z+2, r18 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 7f8: 21 83 std Z+1, r18 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 7fa: 20 83 st Z, r18 7fc: 1f eb ldi r17, 0xBF ; 191 7fe: 45 e4 ldi r20, 0x45 ; 69 800: 04 e0 ldi r16, 0x04 ; 4 802: 11 50 subi r17, 0x01 ; 1 804: 40 40 sbci r20, 0x00 ; 0 806: 00 40 sbci r16, 0x00 ; 0 808: e1 f7 brne .-8 ; 0x802 80a: 00 c0 rjmp .+0 ; 0x80c 80c: 00 00 nop 80e: 31 50 subi r19, 0x01 ; 1 s_vSetDisplayDigits( SYM_SEG_A, SYM_SEG_A, SYM_OFF ); _delay_ms(300); s_vSetDisplayDigits( SYM_SEG_A, SYM_SEG_A, SYM_SEG_A ); _delay_ms(300); while ( u8Loop < 5U ) 810: 09 f0 breq .+2 ; 0x814 812: 84 cf rjmp .-248 ; 0x71c /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 814: e0 e0 ldi r30, 0x00 ; 0 816: f1 e0 ldi r31, 0x01 ; 1 818: 80 e1 ldi r24, 0x10 ; 16 81a: 82 83 std Z+2, r24 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 81c: 81 83 std Z+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 81e: 80 83 st Z, r24 820: 1f ef ldi r17, 0xFF ; 255 822: 2e e9 ldi r18, 0x9E ; 158 824: 34 e2 ldi r19, 0x24 ; 36 826: 11 50 subi r17, 0x01 ; 1 828: 20 40 sbci r18, 0x00 ; 0 82a: 30 40 sbci r19, 0x00 ; 0 82c: e1 f7 brne .-8 ; 0x826 82e: 00 c0 rjmp .+0 ; 0x830 830: 00 00 nop /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 832: ef 01 movw r28, r30 834: 0c e0 ldi r16, 0x0C ; 12 g_au8Digits[DIGIT_ONES] = u8Ones; g_au8Digits[DIGIT_UNIT] = u8Unit; 836: 10 e1 ldi r17, 0x10 ; 16 s_vSetDisplayDigits( SYM_OFF, SYM_OFF, SYM_OFF ); _delay_ms(600); while ( 1 ) { switch ( g_u8Mode ) 838: 80 91 29 01 lds r24, 0x0129 ; 0x800129 83c: 81 30 cpi r24, 0x01 ; 1 83e: b1 f1 breq .+108 ; 0x8ac 840: 20 f0 brcs .+8 ; 0x84a 842: 82 30 cpi r24, 0x02 ; 2 844: 09 f4 brne .+2 ; 0x848 846: 40 c0 rjmp .+128 ; 0x8c8 848: f9 cf rjmp .-14 ; 0x83c { case MODE_MEASURE: if ( SENSOR_is_hi ) 84a: 33 9b sbis 0x06, 3 ; 6 84c: 25 c0 rjmp .+74 ; 0x898 { SENSOR_sda_out; 84e: 3b 9a sbi 0x07, 3 ; 7 SENSOR_sda_low; 850: 43 98 cbi 0x08, 3 ; 8 852: 4f e7 ldi r20, 0x7F ; 127 854: 88 e3 ldi r24, 0x38 ; 56 856: 91 e0 ldi r25, 0x01 ; 1 858: 41 50 subi r20, 0x01 ; 1 85a: 80 40 sbci r24, 0x00 ; 0 85c: 90 40 sbci r25, 0x00 ; 0 85e: e1 f7 brne .-8 ; 0x858 860: 00 c0 rjmp .+0 ; 0x862 862: 00 00 nop _delay_ms(20); u8ErrorCode = s_u8ReadSensor(); 864: 88 de rcall .-752 ; 0x576 if ( 0U == u8ErrorCode ) 866: 81 11 cpse r24, r1 868: 10 c0 rjmp .+32 ; 0x88a { s_vSetValue( g_u16Humidity / 10, SYM_P_P ); 86a: 20 91 27 01 lds r18, 0x0127 ; 0x800127 86e: 30 91 28 01 lds r19, 0x0128 ; 0x800128 872: ad ec ldi r26, 0xCD ; 205 874: bc ec ldi r27, 0xCC ; 204 876: 36 d0 rcall .+108 ; 0x8e4 <__umulhisi3> 878: 96 95 lsr r25 87a: 87 95 ror r24 87c: 96 95 lsr r25 87e: 87 95 ror r24 880: 96 95 lsr r25 882: 87 95 ror r24 884: 6f e0 ldi r22, 0x0F ; 15 886: 0c dc rcall .-2024 ; 0xa0 888: 03 c0 rjmp .+6 ; 0x890 /************************************************************************/ /* Set display digits individually */ /************************************************************************/ void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit ) { g_au8Digits[DIGIT_TENS] = u8Tens; 88a: 0a 83 std Y+2, r16 ; 0x02 g_au8Digits[DIGIT_ONES] = u8Ones; 88c: 89 83 std Y+1, r24 ; 0x01 g_au8Digits[DIGIT_UNIT] = u8Unit; 88e: 18 83 st Y, r17 else { s_vSetDisplayDigits( SYM_E, u8ErrorCode, SYM_OFF ); } } if ( g_u8Mode == MODE_MEASURE ) 890: 80 91 29 01 lds r24, 0x0129 ; 0x800129 894: 81 11 cpse r24, r1 896: d0 cf rjmp .-96 ; 0x838 898: af e7 ldi r26, 0x7F ; 127 89a: b4 e8 ldi r27, 0x84 ; 132 89c: 2e e1 ldi r18, 0x1E ; 30 89e: a1 50 subi r26, 0x01 ; 1 8a0: b0 40 sbci r27, 0x00 ; 0 8a2: 20 40 sbci r18, 0x00 ; 0 8a4: e1 f7 brne .-8 ; 0x89e 8a6: 00 c0 rjmp .+0 ; 0x8a8 8a8: 00 00 nop 8aa: c6 cf rjmp .-116 ; 0x838 { _delay_ms(500); } break; case MODE_ANIMATION_1: s_vShowAnim(g_u8Mode); 8ac: 81 e0 ldi r24, 0x01 ; 1 8ae: 7d dc rcall .-1798 ; 0x1aa g_u8Mode = MODE_MEASURE; 8b0: 10 92 29 01 sts 0x0129, r1 ; 0x800129 8b4: 3f ef ldi r19, 0xFF ; 255 8b6: 44 e3 ldi r20, 0x34 ; 52 8b8: 8c e0 ldi r24, 0x0C ; 12 8ba: 31 50 subi r19, 0x01 ; 1 8bc: 40 40 sbci r20, 0x00 ; 0 8be: 80 40 sbci r24, 0x00 ; 0 8c0: e1 f7 brne .-8 ; 0x8ba 8c2: 00 c0 rjmp .+0 ; 0x8c4 8c4: 00 00 nop 8c6: b8 cf rjmp .-144 ; 0x838 _delay_ms(200); break; case MODE_ANIMATION_2: s_vShowAnim(g_u8Mode); 8c8: 82 e0 ldi r24, 0x02 ; 2 8ca: 6f dc rcall .-1826 ; 0x1aa g_u8Mode = MODE_MEASURE; 8cc: 10 92 29 01 sts 0x0129, r1 ; 0x800129 8d0: 9f ef ldi r25, 0xFF ; 255 8d2: a4 e3 ldi r26, 0x34 ; 52 8d4: bc e0 ldi r27, 0x0C ; 12 8d6: 91 50 subi r25, 0x01 ; 1 8d8: a0 40 sbci r26, 0x00 ; 0 8da: b0 40 sbci r27, 0x00 ; 0 8dc: e1 f7 brne .-8 ; 0x8d6 8de: 00 c0 rjmp .+0 ; 0x8e0 8e0: 00 00 nop 8e2: aa cf rjmp .-172 ; 0x838 000008e4 <__umulhisi3>: 8e4: a2 9f mul r26, r18 8e6: b0 01 movw r22, r0 8e8: b3 9f mul r27, r19 8ea: c0 01 movw r24, r0 8ec: a3 9f mul r26, r19 8ee: 01 d0 rcall .+2 ; 0x8f2 <__umulhisi3+0xe> 8f0: b2 9f mul r27, r18 8f2: 70 0d add r23, r0 8f4: 81 1d adc r24, r1 8f6: 11 24 eor r1, r1 8f8: 91 1d adc r25, r1 8fa: 08 95 ret 000008fc <_exit>: 8fc: f8 94 cli 000008fe <__stop_program>: 8fe: ff cf rjmp .-2 ; 0x8fe <__stop_program>