You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1959 lines
79 KiB

  1. PoolClockHumidity.elf: file format elf32-avr
  2. Sections:
  3. Idx Name Size VMA LMA File off Algn
  4. 0 .data 00000024 00800100 00000900 00000994 2**0
  5. CONTENTS, ALLOC, LOAD, DATA
  6. 1 .text 00000900 00000000 00000000 00000094 2**1
  7. CONTENTS, ALLOC, LOAD, READONLY, CODE
  8. 2 .bss 00000008 00800124 00800124 000009b8 2**0
  9. ALLOC
  10. 3 .comment 00000030 00000000 00000000 000009b8 2**0
  11. CONTENTS, READONLY
  12. 4 .note.gnu.avr.deviceinfo 00000040 00000000 00000000 000009e8 2**2
  13. CONTENTS, READONLY
  14. 5 .debug_aranges 00000058 00000000 00000000 00000a28 2**0
  15. CONTENTS, READONLY, DEBUGGING
  16. 6 .debug_info 0000228b 00000000 00000000 00000a80 2**0
  17. CONTENTS, READONLY, DEBUGGING
  18. 7 .debug_abbrev 00000838 00000000 00000000 00002d0b 2**0
  19. CONTENTS, READONLY, DEBUGGING
  20. 8 .debug_line 00000ba4 00000000 00000000 00003543 2**0
  21. CONTENTS, READONLY, DEBUGGING
  22. 9 .debug_frame 000000f8 00000000 00000000 000040e8 2**2
  23. CONTENTS, READONLY, DEBUGGING
  24. 10 .debug_str 000004ef 00000000 00000000 000041e0 2**0
  25. CONTENTS, READONLY, DEBUGGING
  26. 11 .debug_loc 00001e2d 00000000 00000000 000046cf 2**0
  27. CONTENTS, READONLY, DEBUGGING
  28. 12 .debug_ranges 00000168 00000000 00000000 000064fc 2**0
  29. CONTENTS, READONLY, DEBUGGING
  30. Disassembly of section .text:
  31. 00000000 <__vectors>:
  32. 0: 19 c0 rjmp .+50 ; 0x34 <__ctors_end>
  33. 2: 33 c0 rjmp .+102 ; 0x6a <__bad_interrupt>
  34. 4: 32 c0 rjmp .+100 ; 0x6a <__bad_interrupt>
  35. 6: 31 c0 rjmp .+98 ; 0x6a <__bad_interrupt>
  36. 8: 30 c0 rjmp .+96 ; 0x6a <__bad_interrupt>
  37. a: 2f c0 rjmp .+94 ; 0x6a <__bad_interrupt>
  38. c: 2e c0 rjmp .+92 ; 0x6a <__bad_interrupt>
  39. e: 2d c0 rjmp .+90 ; 0x6a <__bad_interrupt>
  40. 10: 2c c0 rjmp .+88 ; 0x6a <__bad_interrupt>
  41. 12: 2b c0 rjmp .+86 ; 0x6a <__bad_interrupt>
  42. 14: 2a c0 rjmp .+84 ; 0x6a <__bad_interrupt>
  43. 16: 81 c0 rjmp .+258 ; 0x11a <__vector_11>
  44. 18: 28 c0 rjmp .+80 ; 0x6a <__bad_interrupt>
  45. 1a: 27 c0 rjmp .+78 ; 0x6a <__bad_interrupt>
  46. 1c: 26 c0 rjmp .+76 ; 0x6a <__bad_interrupt>
  47. 1e: 25 c0 rjmp .+74 ; 0x6a <__bad_interrupt>
  48. 20: 24 c0 rjmp .+72 ; 0x6a <__bad_interrupt>
  49. 22: 23 c0 rjmp .+70 ; 0x6a <__bad_interrupt>
  50. 24: 22 c0 rjmp .+68 ; 0x6a <__bad_interrupt>
  51. 26: 21 c0 rjmp .+66 ; 0x6a <__bad_interrupt>
  52. 28: 20 c0 rjmp .+64 ; 0x6a <__bad_interrupt>
  53. 2a: 1f c0 rjmp .+62 ; 0x6a <__bad_interrupt>
  54. 2c: 1e c0 rjmp .+60 ; 0x6a <__bad_interrupt>
  55. 2e: 1d c0 rjmp .+58 ; 0x6a <__bad_interrupt>
  56. 30: 1c c0 rjmp .+56 ; 0x6a <__bad_interrupt>
  57. 32: 1b c0 rjmp .+54 ; 0x6a <__bad_interrupt>
  58. 00000034 <__ctors_end>:
  59. 34: 11 24 eor r1, r1
  60. 36: 1f be out 0x3f, r1 ; 63
  61. 38: cf ef ldi r28, 0xFF ; 255
  62. 3a: d4 e0 ldi r29, 0x04 ; 4
  63. 3c: de bf out 0x3e, r29 ; 62
  64. 3e: cd bf out 0x3d, r28 ; 61
  65. 00000040 <__do_copy_data>:
  66. 40: 11 e0 ldi r17, 0x01 ; 1
  67. 42: a0 e0 ldi r26, 0x00 ; 0
  68. 44: b1 e0 ldi r27, 0x01 ; 1
  69. 46: e0 e0 ldi r30, 0x00 ; 0
  70. 48: f9 e0 ldi r31, 0x09 ; 9
  71. 4a: 02 c0 rjmp .+4 ; 0x50 <__do_copy_data+0x10>
  72. 4c: 05 90 lpm r0, Z+
  73. 4e: 0d 92 st X+, r0
  74. 50: a4 32 cpi r26, 0x24 ; 36
  75. 52: b1 07 cpc r27, r17
  76. 54: d9 f7 brne .-10 ; 0x4c <__do_copy_data+0xc>
  77. 00000056 <__do_clear_bss>:
  78. 56: 21 e0 ldi r18, 0x01 ; 1
  79. 58: a4 e2 ldi r26, 0x24 ; 36
  80. 5a: b1 e0 ldi r27, 0x01 ; 1
  81. 5c: 01 c0 rjmp .+2 ; 0x60 <.do_clear_bss_start>
  82. 0000005e <.do_clear_bss_loop>:
  83. 5e: 1d 92 st X+, r1
  84. 00000060 <.do_clear_bss_start>:
  85. 60: ac 32 cpi r26, 0x2C ; 44
  86. 62: b2 07 cpc r27, r18
  87. 64: e1 f7 brne .-8 ; 0x5e <.do_clear_bss_loop>
  88. 66: 1d d3 rcall .+1594 ; 0x6a2 <main>
  89. 68: 49 c4 rjmp .+2194 ; 0x8fc <_exit>
  90. 0000006a <__bad_interrupt>:
  91. 6a: ca cf rjmp .-108 ; 0x0 <__vectors>
  92. 0000006c <s_vInit>:
  93. /************************************************************************/
  94. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  95. {
  96. g_au8Digits[DIGIT_TENS] = u8Tens;
  97. g_au8Digits[DIGIT_ONES] = u8Ones;
  98. g_au8Digits[DIGIT_UNIT] = u8Unit;
  99. 6c: 8f ef ldi r24, 0xFF ; 255
  100. 6e: 8a b9 out 0x0a, r24 ; 10
  101. 70: 87 e0 ldi r24, 0x07 ; 7
  102. 72: 84 b9 out 0x04, r24 ; 4
  103. 74: 80 e3 ldi r24, 0x30 ; 48
  104. 76: 88 b9 out 0x08, r24 ; 8
  105. 78: 3b 98 cbi 0x07, 3 ; 7
  106. 7a: 43 98 cbi 0x08, 3 ; 8
  107. 7c: 10 92 80 00 sts 0x0080, r1 ; 0x800080 <__EEPROM_REGION_LENGTH__+0x7f0080>
  108. 80: 8a e0 ldi r24, 0x0A ; 10
  109. 82: 80 93 81 00 sts 0x0081, r24 ; 0x800081 <__EEPROM_REGION_LENGTH__+0x7f0081>
  110. 86: 84 ec ldi r24, 0xC4 ; 196
  111. 88: 99 e0 ldi r25, 0x09 ; 9
  112. 8a: 90 93 89 00 sts 0x0089, r25 ; 0x800089 <__EEPROM_REGION_LENGTH__+0x7f0089>
  113. 8e: 80 93 88 00 sts 0x0088, r24 ; 0x800088 <__EEPROM_REGION_LENGTH__+0x7f0088>
  114. 92: ef e6 ldi r30, 0x6F ; 111
  115. 94: f0 e0 ldi r31, 0x00 ; 0
  116. 96: 80 81 ld r24, Z
  117. 98: 82 60 ori r24, 0x02 ; 2
  118. 9a: 80 83 st Z, r24
  119. 9c: 78 94 sei
  120. 9e: 08 95 ret
  121. 000000a0 <s_vSetValue>:
  122. a0: 9d ec ldi r25, 0xCD ; 205
  123. a2: 89 9f mul r24, r25
  124. a4: 91 2d mov r25, r1
  125. a6: 11 24 eor r1, r1
  126. a8: 96 95 lsr r25
  127. aa: 96 95 lsr r25
  128. ac: 96 95 lsr r25
  129. ae: e0 e0 ldi r30, 0x00 ; 0
  130. b0: f1 e0 ldi r31, 0x01 ; 1
  131. b2: 92 83 std Z+2, r25 ; 0x02
  132. b4: 99 0f add r25, r25
  133. b6: 29 2f mov r18, r25
  134. b8: 22 0f add r18, r18
  135. ba: 22 0f add r18, r18
  136. bc: 92 0f add r25, r18
  137. be: 89 1b sub r24, r25
  138. c0: 81 83 std Z+1, r24 ; 0x01
  139. c2: 60 83 st Z, r22
  140. c4: 08 95 ret
  141. 000000c6 <s_vReadButtons>:
  142. /************************************************************************/
  143. /* Read button status */
  144. /************************************************************************/
  145. void s_vReadButtons( void )
  146. {
  147. if ( !(PINC & (1<<PINC4)) ) //if button '+' pressed
  148. c6: 34 99 sbic 0x06, 4 ; 6
  149. c8: 06 c0 rjmp .+12 ; 0xd6 <s_vReadButtons+0x10>
  150. {
  151. g_u8ButtonCountTop++;
  152. ca: 80 91 2b 01 lds r24, 0x012B ; 0x80012b <g_u8ButtonCountTop>
  153. ce: 8f 5f subi r24, 0xFF ; 255
  154. d0: 80 93 2b 01 sts 0x012B, r24 ; 0x80012b <g_u8ButtonCountTop>
  155. d4: 02 c0 rjmp .+4 ; 0xda <s_vReadButtons+0x14>
  156. }
  157. else
  158. {
  159. g_u8ButtonCountTop = 0U; //reset button counter
  160. d6: 10 92 2b 01 sts 0x012B, r1 ; 0x80012b <g_u8ButtonCountTop>
  161. }
  162. if ( !(PINC & (1<<PINC5)) ) //if button '-' pressed
  163. da: 35 99 sbic 0x06, 5 ; 6
  164. dc: 0a c0 rjmp .+20 ; 0xf2 <s_vReadButtons+0x2c>
  165. {
  166. g_u8ButtonCountBot++;
  167. de: 80 91 2a 01 lds r24, 0x012A ; 0x80012a <g_u8ButtonCountBot>
  168. e2: 8f 5f subi r24, 0xFF ; 255
  169. e4: 80 93 2a 01 sts 0x012A, r24 ; 0x80012a <g_u8ButtonCountBot>
  170. else
  171. {
  172. g_u8ButtonCountBot = 0U; //reset button counter
  173. }
  174. if ( g_u8ButtonCountTop > BUTTON_THRESHOLD )
  175. e8: 90 91 2b 01 lds r25, 0x012B ; 0x80012b <g_u8ButtonCountTop>
  176. ec: 93 33 cpi r25, 0x33 ; 51
  177. ee: 68 f0 brcs .+26 ; 0x10a <s_vReadButtons+0x44>
  178. f0: 06 c0 rjmp .+12 ; 0xfe <s_vReadButtons+0x38>
  179. {
  180. g_u8ButtonCountBot++;
  181. }
  182. else
  183. {
  184. g_u8ButtonCountBot = 0U; //reset button counter
  185. f2: 10 92 2a 01 sts 0x012A, r1 ; 0x80012a <g_u8ButtonCountBot>
  186. }
  187. if ( g_u8ButtonCountTop > BUTTON_THRESHOLD )
  188. f6: 80 91 2b 01 lds r24, 0x012B ; 0x80012b <g_u8ButtonCountTop>
  189. fa: 83 33 cpi r24, 0x33 ; 51
  190. fc: 68 f0 brcs .+26 ; 0x118 <s_vReadButtons+0x52>
  191. {
  192. g_u8ButtonCountTop = 0U; //reset top counter
  193. fe: 10 92 2b 01 sts 0x012B, r1 ; 0x80012b <g_u8ButtonCountTop>
  194. g_u8Mode = MODE_ANIMATION_1;
  195. 102: 81 e0 ldi r24, 0x01 ; 1
  196. 104: 80 93 29 01 sts 0x0129, r24 ; 0x800129 <g_u8Mode>
  197. 108: 08 95 ret
  198. }
  199. else if ( g_u8ButtonCountBot > BUTTON_THRESHOLD )
  200. 10a: 83 33 cpi r24, 0x33 ; 51
  201. 10c: 28 f0 brcs .+10 ; 0x118 <s_vReadButtons+0x52>
  202. {
  203. g_u8ButtonCountBot = 0U; //reset bottom counter
  204. 10e: 10 92 2a 01 sts 0x012A, r1 ; 0x80012a <g_u8ButtonCountBot>
  205. g_u8Mode = MODE_ANIMATION_2;
  206. 112: 82 e0 ldi r24, 0x02 ; 2
  207. 114: 80 93 29 01 sts 0x0129, r24 ; 0x800129 <g_u8Mode>
  208. 118: 08 95 ret
  209. 0000011a <__vector_11>:
  210. /************************************************************************/
  211. /* Timer1 ISR - show values on display */
  212. /************************************************************************/
  213. ISR ( TIMER1_COMPA_vect )
  214. {
  215. 11a: 1f 92 push r1
  216. 11c: 0f 92 push r0
  217. 11e: 0f b6 in r0, 0x3f ; 63
  218. 120: 0f 92 push r0
  219. 122: 11 24 eor r1, r1
  220. 124: 2f 93 push r18
  221. 126: 3f 93 push r19
  222. 128: 4f 93 push r20
  223. 12a: 5f 93 push r21
  224. 12c: 6f 93 push r22
  225. 12e: 7f 93 push r23
  226. 130: 8f 93 push r24
  227. 132: 9f 93 push r25
  228. 134: af 93 push r26
  229. 136: bf 93 push r27
  230. 138: ef 93 push r30
  231. 13a: ff 93 push r31
  232. PORTB = 0;
  233. 13c: 15 b8 out 0x05, r1 ; 5
  234. PORTD = 0;
  235. 13e: 1b b8 out 0x0b, r1 ; 11
  236. #else
  237. //round up by default
  238. __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
  239. #endif
  240. __builtin_avr_delay_cycles(__ticks_dc);
  241. 140: 8d e0 ldi r24, 0x0D ; 13
  242. 142: 8a 95 dec r24
  243. 144: f1 f7 brne .-4 ; 0x142 <__vector_11+0x28>
  244. 146: 00 00 nop
  245. _delay_us(2);
  246. PORTB = SELECT_DIGIT(g_u8ISRDigitSelect);
  247. 148: 81 e0 ldi r24, 0x01 ; 1
  248. 14a: 90 e0 ldi r25, 0x00 ; 0
  249. 14c: 00 90 24 01 lds r0, 0x0124 ; 0x800124 <__data_end>
  250. 150: 02 c0 rjmp .+4 ; 0x156 <__vector_11+0x3c>
  251. 152: 88 0f add r24, r24
  252. 154: 99 1f adc r25, r25
  253. 156: 0a 94 dec r0
  254. 158: e2 f7 brpl .-8 ; 0x152 <__vector_11+0x38>
  255. 15a: 85 b9 out 0x05, r24 ; 5
  256. PORTD = g_au8Symbols[g_au8Digits[g_u8ISRDigitSelect]];
  257. 15c: e0 91 24 01 lds r30, 0x0124 ; 0x800124 <__data_end>
  258. 160: f0 e0 ldi r31, 0x00 ; 0
  259. 162: e0 50 subi r30, 0x00 ; 0
  260. 164: ff 4f sbci r31, 0xFF ; 255
  261. 166: e0 81 ld r30, Z
  262. 168: f0 e0 ldi r31, 0x00 ; 0
  263. 16a: ed 5f subi r30, 0xFD ; 253
  264. 16c: fe 4f sbci r31, 0xFE ; 254
  265. 16e: 80 81 ld r24, Z
  266. 170: 8b b9 out 0x0b, r24 ; 11
  267. g_u8ISRDigitSelect++;
  268. 172: 80 91 24 01 lds r24, 0x0124 ; 0x800124 <__data_end>
  269. 176: 8f 5f subi r24, 0xFF ; 255
  270. if (g_u8ISRDigitSelect > 2U)
  271. 178: 83 30 cpi r24, 0x03 ; 3
  272. 17a: 18 f4 brcc .+6 ; 0x182 <__vector_11+0x68>
  273. PORTB = 0;
  274. PORTD = 0;
  275. _delay_us(2);
  276. PORTB = SELECT_DIGIT(g_u8ISRDigitSelect);
  277. PORTD = g_au8Symbols[g_au8Digits[g_u8ISRDigitSelect]];
  278. g_u8ISRDigitSelect++;
  279. 17c: 80 93 24 01 sts 0x0124, r24 ; 0x800124 <__data_end>
  280. 180: 02 c0 rjmp .+4 ; 0x186 <__vector_11+0x6c>
  281. if (g_u8ISRDigitSelect > 2U)
  282. {
  283. g_u8ISRDigitSelect = 0U;
  284. 182: 10 92 24 01 sts 0x0124, r1 ; 0x800124 <__data_end>
  285. }
  286. /* Read and evaluate button status */
  287. s_vReadButtons();
  288. 186: 9f df rcall .-194 ; 0xc6 <s_vReadButtons>
  289. }
  290. 188: ff 91 pop r31
  291. 18a: ef 91 pop r30
  292. 18c: bf 91 pop r27
  293. 18e: af 91 pop r26
  294. 190: 9f 91 pop r25
  295. 192: 8f 91 pop r24
  296. 194: 7f 91 pop r23
  297. 196: 6f 91 pop r22
  298. 198: 5f 91 pop r21
  299. 19a: 4f 91 pop r20
  300. 19c: 3f 91 pop r19
  301. 19e: 2f 91 pop r18
  302. 1a0: 0f 90 pop r0
  303. 1a2: 0f be out 0x3f, r0 ; 63
  304. 1a4: 0f 90 pop r0
  305. 1a6: 1f 90 pop r1
  306. 1a8: 18 95 reti
  307. 000001aa <s_vShowAnim>:
  308. /************************************************************************/
  309. /* Set display digits individually */
  310. /************************************************************************/
  311. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  312. {
  313. g_au8Digits[DIGIT_TENS] = u8Tens;
  314. 1aa: e0 e0 ldi r30, 0x00 ; 0
  315. 1ac: f1 e0 ldi r31, 0x01 ; 1
  316. 1ae: 90 e1 ldi r25, 0x10 ; 16
  317. 1b0: 92 83 std Z+2, r25 ; 0x02
  318. g_au8Digits[DIGIT_ONES] = u8Ones;
  319. 1b2: 91 83 std Z+1, r25 ; 0x01
  320. g_au8Digits[DIGIT_UNIT] = u8Unit;
  321. 1b4: 90 83 st Z, r25
  322. #else
  323. //round up by default
  324. __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
  325. #endif
  326. __builtin_avr_delay_cycles(__ticks_dc);
  327. 1b6: 2f eb ldi r18, 0xBF ; 191
  328. 1b8: 35 e4 ldi r19, 0x45 ; 69
  329. 1ba: 44 e0 ldi r20, 0x04 ; 4
  330. 1bc: 21 50 subi r18, 0x01 ; 1
  331. 1be: 30 40 sbci r19, 0x00 ; 0
  332. 1c0: 40 40 sbci r20, 0x00 ; 0
  333. 1c2: e1 f7 brne .-8 ; 0x1bc <s_vShowAnim+0x12>
  334. 1c4: 00 c0 rjmp .+0 ; 0x1c6 <s_vShowAnim+0x1c>
  335. 1c6: 00 00 nop
  336. /************************************************************************/
  337. void s_vShowAnim( uint8_t u8Select )
  338. {
  339. s_vSetDisplayDigits( SYM_OFF, SYM_OFF, SYM_OFF );
  340. _delay_ms(ANIMATION_DELAY_MS);
  341. switch ( u8Select )
  342. 1c8: 81 30 cpi r24, 0x01 ; 1
  343. 1ca: 21 f0 breq .+8 ; 0x1d4 <s_vShowAnim+0x2a>
  344. 1cc: 82 30 cpi r24, 0x02 ; 2
  345. 1ce: 09 f4 brne .+2 ; 0x1d2 <s_vShowAnim+0x28>
  346. 1d0: e2 c0 rjmp .+452 ; 0x396 <s_vShowAnim+0x1ec>
  347. 1d2: c1 c1 rjmp .+898 ; 0x556 <__stack+0x57>
  348. /************************************************************************/
  349. /* Set display digits individually */
  350. /************************************************************************/
  351. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  352. {
  353. g_au8Digits[DIGIT_TENS] = u8Tens;
  354. 1d4: e0 e0 ldi r30, 0x00 ; 0
  355. 1d6: f1 e0 ldi r31, 0x01 ; 1
  356. 1d8: 22 e1 ldi r18, 0x12 ; 18
  357. 1da: 22 83 std Z+2, r18 ; 0x02
  358. g_au8Digits[DIGIT_ONES] = u8Ones;
  359. 1dc: 90 e1 ldi r25, 0x10 ; 16
  360. 1de: 91 83 std Z+1, r25 ; 0x01
  361. g_au8Digits[DIGIT_UNIT] = u8Unit;
  362. 1e0: 90 83 st Z, r25
  363. 1e2: 5f eb ldi r21, 0xBF ; 191
  364. 1e4: 65 e4 ldi r22, 0x45 ; 69
  365. 1e6: 74 e0 ldi r23, 0x04 ; 4
  366. 1e8: 51 50 subi r21, 0x01 ; 1
  367. 1ea: 60 40 sbci r22, 0x00 ; 0
  368. 1ec: 70 40 sbci r23, 0x00 ; 0
  369. 1ee: e1 f7 brne .-8 ; 0x1e8 <s_vShowAnim+0x3e>
  370. 1f0: 00 c0 rjmp .+0 ; 0x1f2 <s_vShowAnim+0x48>
  371. 1f2: 00 00 nop
  372. /************************************************************************/
  373. /* Set display digits individually */
  374. /************************************************************************/
  375. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  376. {
  377. g_au8Digits[DIGIT_TENS] = u8Tens;
  378. 1f4: 3c e0 ldi r19, 0x0C ; 12
  379. 1f6: 32 83 std Z+2, r19 ; 0x02
  380. g_au8Digits[DIGIT_ONES] = u8Ones;
  381. 1f8: 91 83 std Z+1, r25 ; 0x01
  382. g_au8Digits[DIGIT_UNIT] = u8Unit;
  383. 1fa: 90 83 st Z, r25
  384. 1fc: 8f eb ldi r24, 0xBF ; 191
  385. 1fe: a5 e4 ldi r26, 0x45 ; 69
  386. 200: 44 e0 ldi r20, 0x04 ; 4
  387. 202: 81 50 subi r24, 0x01 ; 1
  388. 204: a0 40 sbci r26, 0x00 ; 0
  389. 206: 40 40 sbci r20, 0x00 ; 0
  390. 208: e1 f7 brne .-8 ; 0x202 <s_vShowAnim+0x58>
  391. 20a: 00 c0 rjmp .+0 ; 0x20c <s_vShowAnim+0x62>
  392. 20c: 00 00 nop
  393. /************************************************************************/
  394. /* Set display digits individually */
  395. /************************************************************************/
  396. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  397. {
  398. g_au8Digits[DIGIT_TENS] = u8Tens;
  399. 20e: 88 e0 ldi r24, 0x08 ; 8
  400. 210: 82 83 std Z+2, r24 ; 0x02
  401. g_au8Digits[DIGIT_ONES] = u8Ones;
  402. 212: 91 83 std Z+1, r25 ; 0x01
  403. g_au8Digits[DIGIT_UNIT] = u8Unit;
  404. 214: 90 83 st Z, r25
  405. 216: 5f eb ldi r21, 0xBF ; 191
  406. 218: 65 e4 ldi r22, 0x45 ; 69
  407. 21a: 74 e0 ldi r23, 0x04 ; 4
  408. 21c: 51 50 subi r21, 0x01 ; 1
  409. 21e: 60 40 sbci r22, 0x00 ; 0
  410. 220: 70 40 sbci r23, 0x00 ; 0
  411. 222: e1 f7 brne .-8 ; 0x21c <s_vShowAnim+0x72>
  412. 224: 00 c0 rjmp .+0 ; 0x226 <s_vShowAnim+0x7c>
  413. 226: 00 00 nop
  414. /************************************************************************/
  415. /* Set display digits individually */
  416. /************************************************************************/
  417. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  418. {
  419. g_au8Digits[DIGIT_TENS] = u8Tens;
  420. 228: 82 83 std Z+2, r24 ; 0x02
  421. g_au8Digits[DIGIT_ONES] = u8Ones;
  422. 22a: 21 83 std Z+1, r18 ; 0x01
  423. g_au8Digits[DIGIT_UNIT] = u8Unit;
  424. 22c: 90 83 st Z, r25
  425. 22e: af eb ldi r26, 0xBF ; 191
  426. 230: 45 e4 ldi r20, 0x45 ; 69
  427. 232: 54 e0 ldi r21, 0x04 ; 4
  428. 234: a1 50 subi r26, 0x01 ; 1
  429. 236: 40 40 sbci r20, 0x00 ; 0
  430. 238: 50 40 sbci r21, 0x00 ; 0
  431. 23a: e1 f7 brne .-8 ; 0x234 <s_vShowAnim+0x8a>
  432. 23c: 00 c0 rjmp .+0 ; 0x23e <s_vShowAnim+0x94>
  433. 23e: 00 00 nop
  434. /************************************************************************/
  435. /* Set display digits individually */
  436. /************************************************************************/
  437. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  438. {
  439. g_au8Digits[DIGIT_TENS] = u8Tens;
  440. 240: 82 83 std Z+2, r24 ; 0x02
  441. g_au8Digits[DIGIT_ONES] = u8Ones;
  442. 242: 31 83 std Z+1, r19 ; 0x01
  443. g_au8Digits[DIGIT_UNIT] = u8Unit;
  444. 244: 90 83 st Z, r25
  445. 246: 6f eb ldi r22, 0xBF ; 191
  446. 248: 75 e4 ldi r23, 0x45 ; 69
  447. 24a: a4 e0 ldi r26, 0x04 ; 4
  448. 24c: 61 50 subi r22, 0x01 ; 1
  449. 24e: 70 40 sbci r23, 0x00 ; 0
  450. 250: a0 40 sbci r26, 0x00 ; 0
  451. 252: e1 f7 brne .-8 ; 0x24c <s_vShowAnim+0xa2>
  452. 254: 00 c0 rjmp .+0 ; 0x256 <s_vShowAnim+0xac>
  453. 256: 00 00 nop
  454. /************************************************************************/
  455. /* Set display digits individually */
  456. /************************************************************************/
  457. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  458. {
  459. g_au8Digits[DIGIT_TENS] = u8Tens;
  460. 258: 82 83 std Z+2, r24 ; 0x02
  461. g_au8Digits[DIGIT_ONES] = u8Ones;
  462. 25a: 81 83 std Z+1, r24 ; 0x01
  463. g_au8Digits[DIGIT_UNIT] = u8Unit;
  464. 25c: 90 83 st Z, r25
  465. 25e: 4f eb ldi r20, 0xBF ; 191
  466. 260: 55 e4 ldi r21, 0x45 ; 69
  467. 262: 64 e0 ldi r22, 0x04 ; 4
  468. 264: 41 50 subi r20, 0x01 ; 1
  469. 266: 50 40 sbci r21, 0x00 ; 0
  470. 268: 60 40 sbci r22, 0x00 ; 0
  471. 26a: e1 f7 brne .-8 ; 0x264 <s_vShowAnim+0xba>
  472. 26c: 00 c0 rjmp .+0 ; 0x26e <s_vShowAnim+0xc4>
  473. 26e: 00 00 nop
  474. /************************************************************************/
  475. /* Set display digits individually */
  476. /************************************************************************/
  477. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  478. {
  479. g_au8Digits[DIGIT_TENS] = u8Tens;
  480. 270: 82 83 std Z+2, r24 ; 0x02
  481. g_au8Digits[DIGIT_ONES] = u8Ones;
  482. 272: 81 83 std Z+1, r24 ; 0x01
  483. g_au8Digits[DIGIT_UNIT] = u8Unit;
  484. 274: 41 e0 ldi r20, 0x01 ; 1
  485. 276: 40 83 st Z, r20
  486. 278: 7f eb ldi r23, 0xBF ; 191
  487. 27a: a5 e4 ldi r26, 0x45 ; 69
  488. 27c: 54 e0 ldi r21, 0x04 ; 4
  489. 27e: 71 50 subi r23, 0x01 ; 1
  490. 280: a0 40 sbci r26, 0x00 ; 0
  491. 282: 50 40 sbci r21, 0x00 ; 0
  492. 284: e1 f7 brne .-8 ; 0x27e <s_vShowAnim+0xd4>
  493. 286: 00 c0 rjmp .+0 ; 0x288 <s_vShowAnim+0xde>
  494. 288: 00 00 nop
  495. /************************************************************************/
  496. /* Set display digits individually */
  497. /************************************************************************/
  498. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  499. {
  500. g_au8Digits[DIGIT_TENS] = u8Tens;
  501. 28a: 82 83 std Z+2, r24 ; 0x02
  502. g_au8Digits[DIGIT_ONES] = u8Ones;
  503. 28c: 81 83 std Z+1, r24 ; 0x01
  504. g_au8Digits[DIGIT_UNIT] = u8Unit;
  505. 28e: 53 e0 ldi r21, 0x03 ; 3
  506. 290: 50 83 st Z, r21
  507. 292: 6f eb ldi r22, 0xBF ; 191
  508. 294: 75 e4 ldi r23, 0x45 ; 69
  509. 296: a4 e0 ldi r26, 0x04 ; 4
  510. 298: 61 50 subi r22, 0x01 ; 1
  511. 29a: 70 40 sbci r23, 0x00 ; 0
  512. 29c: a0 40 sbci r26, 0x00 ; 0
  513. 29e: e1 f7 brne .-8 ; 0x298 <s_vShowAnim+0xee>
  514. 2a0: 00 c0 rjmp .+0 ; 0x2a2 <s_vShowAnim+0xf8>
  515. 2a2: 00 00 nop
  516. /************************************************************************/
  517. /* Set display digits individually */
  518. /************************************************************************/
  519. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  520. {
  521. g_au8Digits[DIGIT_TENS] = u8Tens;
  522. 2a4: 82 83 std Z+2, r24 ; 0x02
  523. g_au8Digits[DIGIT_ONES] = u8Ones;
  524. 2a6: 81 83 std Z+1, r24 ; 0x01
  525. g_au8Digits[DIGIT_UNIT] = u8Unit;
  526. 2a8: 80 83 st Z, r24
  527. 2aa: 6f eb ldi r22, 0xBF ; 191
  528. 2ac: 75 e4 ldi r23, 0x45 ; 69
  529. 2ae: a4 e0 ldi r26, 0x04 ; 4
  530. 2b0: 61 50 subi r22, 0x01 ; 1
  531. 2b2: 70 40 sbci r23, 0x00 ; 0
  532. 2b4: a0 40 sbci r26, 0x00 ; 0
  533. 2b6: e1 f7 brne .-8 ; 0x2b0 <s_vShowAnim+0x106>
  534. 2b8: 00 c0 rjmp .+0 ; 0x2ba <s_vShowAnim+0x110>
  535. 2ba: 00 00 nop
  536. /************************************************************************/
  537. /* Set display digits individually */
  538. /************************************************************************/
  539. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  540. {
  541. g_au8Digits[DIGIT_TENS] = u8Tens;
  542. 2bc: 82 83 std Z+2, r24 ; 0x02
  543. g_au8Digits[DIGIT_ONES] = u8Ones;
  544. 2be: 81 83 std Z+1, r24 ; 0x01
  545. g_au8Digits[DIGIT_UNIT] = u8Unit;
  546. 2c0: 80 83 st Z, r24
  547. 2c2: 6f eb ldi r22, 0xBF ; 191
  548. 2c4: 75 e4 ldi r23, 0x45 ; 69
  549. 2c6: a4 e0 ldi r26, 0x04 ; 4
  550. 2c8: 61 50 subi r22, 0x01 ; 1
  551. 2ca: 70 40 sbci r23, 0x00 ; 0
  552. 2cc: a0 40 sbci r26, 0x00 ; 0
  553. 2ce: e1 f7 brne .-8 ; 0x2c8 <s_vShowAnim+0x11e>
  554. 2d0: 00 c0 rjmp .+0 ; 0x2d2 <s_vShowAnim+0x128>
  555. 2d2: 00 00 nop
  556. /************************************************************************/
  557. /* Set display digits individually */
  558. /************************************************************************/
  559. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  560. {
  561. g_au8Digits[DIGIT_TENS] = u8Tens;
  562. 2d4: 82 83 std Z+2, r24 ; 0x02
  563. g_au8Digits[DIGIT_ONES] = u8Ones;
  564. 2d6: 81 83 std Z+1, r24 ; 0x01
  565. g_au8Digits[DIGIT_UNIT] = u8Unit;
  566. 2d8: 50 83 st Z, r21
  567. 2da: 5f eb ldi r21, 0xBF ; 191
  568. 2dc: 65 e4 ldi r22, 0x45 ; 69
  569. 2de: 74 e0 ldi r23, 0x04 ; 4
  570. 2e0: 51 50 subi r21, 0x01 ; 1
  571. 2e2: 60 40 sbci r22, 0x00 ; 0
  572. 2e4: 70 40 sbci r23, 0x00 ; 0
  573. 2e6: e1 f7 brne .-8 ; 0x2e0 <s_vShowAnim+0x136>
  574. 2e8: 00 c0 rjmp .+0 ; 0x2ea <s_vShowAnim+0x140>
  575. 2ea: 00 00 nop
  576. /************************************************************************/
  577. /* Set display digits individually */
  578. /************************************************************************/
  579. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  580. {
  581. g_au8Digits[DIGIT_TENS] = u8Tens;
  582. 2ec: 82 83 std Z+2, r24 ; 0x02
  583. g_au8Digits[DIGIT_ONES] = u8Ones;
  584. 2ee: 81 83 std Z+1, r24 ; 0x01
  585. g_au8Digits[DIGIT_UNIT] = u8Unit;
  586. 2f0: 40 83 st Z, r20
  587. 2f2: af eb ldi r26, 0xBF ; 191
  588. 2f4: 45 e4 ldi r20, 0x45 ; 69
  589. 2f6: 54 e0 ldi r21, 0x04 ; 4
  590. 2f8: a1 50 subi r26, 0x01 ; 1
  591. 2fa: 40 40 sbci r20, 0x00 ; 0
  592. 2fc: 50 40 sbci r21, 0x00 ; 0
  593. 2fe: e1 f7 brne .-8 ; 0x2f8 <s_vShowAnim+0x14e>
  594. 300: 00 c0 rjmp .+0 ; 0x302 <s_vShowAnim+0x158>
  595. 302: 00 00 nop
  596. /************************************************************************/
  597. /* Set display digits individually */
  598. /************************************************************************/
  599. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  600. {
  601. g_au8Digits[DIGIT_TENS] = u8Tens;
  602. 304: 82 83 std Z+2, r24 ; 0x02
  603. g_au8Digits[DIGIT_ONES] = u8Ones;
  604. 306: 81 83 std Z+1, r24 ; 0x01
  605. g_au8Digits[DIGIT_UNIT] = u8Unit;
  606. 308: 90 83 st Z, r25
  607. 30a: 6f eb ldi r22, 0xBF ; 191
  608. 30c: 75 e4 ldi r23, 0x45 ; 69
  609. 30e: a4 e0 ldi r26, 0x04 ; 4
  610. 310: 61 50 subi r22, 0x01 ; 1
  611. 312: 70 40 sbci r23, 0x00 ; 0
  612. 314: a0 40 sbci r26, 0x00 ; 0
  613. 316: e1 f7 brne .-8 ; 0x310 <s_vShowAnim+0x166>
  614. 318: 00 c0 rjmp .+0 ; 0x31a <s_vShowAnim+0x170>
  615. 31a: 00 00 nop
  616. /************************************************************************/
  617. /* Set display digits individually */
  618. /************************************************************************/
  619. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  620. {
  621. g_au8Digits[DIGIT_TENS] = u8Tens;
  622. 31c: 82 83 std Z+2, r24 ; 0x02
  623. g_au8Digits[DIGIT_ONES] = u8Ones;
  624. 31e: 31 83 std Z+1, r19 ; 0x01
  625. g_au8Digits[DIGIT_UNIT] = u8Unit;
  626. 320: 90 83 st Z, r25
  627. 322: 4f eb ldi r20, 0xBF ; 191
  628. 324: 55 e4 ldi r21, 0x45 ; 69
  629. 326: 64 e0 ldi r22, 0x04 ; 4
  630. 328: 41 50 subi r20, 0x01 ; 1
  631. 32a: 50 40 sbci r21, 0x00 ; 0
  632. 32c: 60 40 sbci r22, 0x00 ; 0
  633. 32e: e1 f7 brne .-8 ; 0x328 <s_vShowAnim+0x17e>
  634. 330: 00 c0 rjmp .+0 ; 0x332 <s_vShowAnim+0x188>
  635. 332: 00 00 nop
  636. /************************************************************************/
  637. /* Set display digits individually */
  638. /************************************************************************/
  639. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  640. {
  641. g_au8Digits[DIGIT_TENS] = u8Tens;
  642. 334: 82 83 std Z+2, r24 ; 0x02
  643. g_au8Digits[DIGIT_ONES] = u8Ones;
  644. 336: 21 83 std Z+1, r18 ; 0x01
  645. g_au8Digits[DIGIT_UNIT] = u8Unit;
  646. 338: 90 83 st Z, r25
  647. 33a: 7f eb ldi r23, 0xBF ; 191
  648. 33c: a5 e4 ldi r26, 0x45 ; 69
  649. 33e: 44 e0 ldi r20, 0x04 ; 4
  650. 340: 71 50 subi r23, 0x01 ; 1
  651. 342: a0 40 sbci r26, 0x00 ; 0
  652. 344: 40 40 sbci r20, 0x00 ; 0
  653. 346: e1 f7 brne .-8 ; 0x340 <s_vShowAnim+0x196>
  654. 348: 00 c0 rjmp .+0 ; 0x34a <s_vShowAnim+0x1a0>
  655. 34a: 00 00 nop
  656. /************************************************************************/
  657. /* Set display digits individually */
  658. /************************************************************************/
  659. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  660. {
  661. g_au8Digits[DIGIT_TENS] = u8Tens;
  662. 34c: 82 83 std Z+2, r24 ; 0x02
  663. g_au8Digits[DIGIT_ONES] = u8Ones;
  664. 34e: 91 83 std Z+1, r25 ; 0x01
  665. g_au8Digits[DIGIT_UNIT] = u8Unit;
  666. 350: 90 83 st Z, r25
  667. 352: 5f eb ldi r21, 0xBF ; 191
  668. 354: 65 e4 ldi r22, 0x45 ; 69
  669. 356: 74 e0 ldi r23, 0x04 ; 4
  670. 358: 51 50 subi r21, 0x01 ; 1
  671. 35a: 60 40 sbci r22, 0x00 ; 0
  672. 35c: 70 40 sbci r23, 0x00 ; 0
  673. 35e: e1 f7 brne .-8 ; 0x358 <s_vShowAnim+0x1ae>
  674. 360: 00 c0 rjmp .+0 ; 0x362 <s_vShowAnim+0x1b8>
  675. 362: 00 00 nop
  676. /************************************************************************/
  677. /* Set display digits individually */
  678. /************************************************************************/
  679. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  680. {
  681. g_au8Digits[DIGIT_TENS] = u8Tens;
  682. 364: 32 83 std Z+2, r19 ; 0x02
  683. g_au8Digits[DIGIT_ONES] = u8Ones;
  684. 366: 91 83 std Z+1, r25 ; 0x01
  685. g_au8Digits[DIGIT_UNIT] = u8Unit;
  686. 368: 90 83 st Z, r25
  687. 36a: 8f eb ldi r24, 0xBF ; 191
  688. 36c: a5 e4 ldi r26, 0x45 ; 69
  689. 36e: 34 e0 ldi r19, 0x04 ; 4
  690. 370: 81 50 subi r24, 0x01 ; 1
  691. 372: a0 40 sbci r26, 0x00 ; 0
  692. 374: 30 40 sbci r19, 0x00 ; 0
  693. 376: e1 f7 brne .-8 ; 0x370 <s_vShowAnim+0x1c6>
  694. 378: 00 c0 rjmp .+0 ; 0x37a <s_vShowAnim+0x1d0>
  695. 37a: 00 00 nop
  696. /************************************************************************/
  697. /* Set display digits individually */
  698. /************************************************************************/
  699. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  700. {
  701. g_au8Digits[DIGIT_TENS] = u8Tens;
  702. 37c: 22 83 std Z+2, r18 ; 0x02
  703. g_au8Digits[DIGIT_ONES] = u8Ones;
  704. 37e: 91 83 std Z+1, r25 ; 0x01
  705. g_au8Digits[DIGIT_UNIT] = u8Unit;
  706. 380: 90 83 st Z, r25
  707. 382: 4f eb ldi r20, 0xBF ; 191
  708. 384: 55 e4 ldi r21, 0x45 ; 69
  709. 386: 64 e0 ldi r22, 0x04 ; 4
  710. 388: 41 50 subi r20, 0x01 ; 1
  711. 38a: 50 40 sbci r21, 0x00 ; 0
  712. 38c: 60 40 sbci r22, 0x00 ; 0
  713. 38e: e1 f7 brne .-8 ; 0x388 <s_vShowAnim+0x1de>
  714. 390: 00 c0 rjmp .+0 ; 0x392 <s_vShowAnim+0x1e8>
  715. 392: 00 00 nop
  716. 394: e0 c0 rjmp .+448 ; 0x556 <__stack+0x57>
  717. /************************************************************************/
  718. /* Set display digits individually */
  719. /************************************************************************/
  720. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  721. {
  722. g_au8Digits[DIGIT_TENS] = u8Tens;
  723. 396: e0 e0 ldi r30, 0x00 ; 0
  724. 398: f1 e0 ldi r31, 0x01 ; 1
  725. 39a: 22 e1 ldi r18, 0x12 ; 18
  726. 39c: 22 83 std Z+2, r18 ; 0x02
  727. g_au8Digits[DIGIT_ONES] = u8Ones;
  728. 39e: 80 e1 ldi r24, 0x10 ; 16
  729. 3a0: 81 83 std Z+1, r24 ; 0x01
  730. g_au8Digits[DIGIT_UNIT] = u8Unit;
  731. 3a2: 80 83 st Z, r24
  732. 3a4: 7f eb ldi r23, 0xBF ; 191
  733. 3a6: 95 e4 ldi r25, 0x45 ; 69
  734. 3a8: a4 e0 ldi r26, 0x04 ; 4
  735. 3aa: 71 50 subi r23, 0x01 ; 1
  736. 3ac: 90 40 sbci r25, 0x00 ; 0
  737. 3ae: a0 40 sbci r26, 0x00 ; 0
  738. 3b0: e1 f7 brne .-8 ; 0x3aa <s_vShowAnim+0x200>
  739. 3b2: 00 c0 rjmp .+0 ; 0x3b4 <s_vShowAnim+0x20a>
  740. 3b4: 00 00 nop
  741. /************************************************************************/
  742. /* Set display digits individually */
  743. /************************************************************************/
  744. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  745. {
  746. g_au8Digits[DIGIT_TENS] = u8Tens;
  747. 3b6: 3c e0 ldi r19, 0x0C ; 12
  748. 3b8: 32 83 std Z+2, r19 ; 0x02
  749. g_au8Digits[DIGIT_ONES] = u8Ones;
  750. 3ba: 81 83 std Z+1, r24 ; 0x01
  751. g_au8Digits[DIGIT_UNIT] = u8Unit;
  752. 3bc: 80 83 st Z, r24
  753. 3be: 4f eb ldi r20, 0xBF ; 191
  754. 3c0: 55 e4 ldi r21, 0x45 ; 69
  755. 3c2: 64 e0 ldi r22, 0x04 ; 4
  756. 3c4: 41 50 subi r20, 0x01 ; 1
  757. 3c6: 50 40 sbci r21, 0x00 ; 0
  758. 3c8: 60 40 sbci r22, 0x00 ; 0
  759. 3ca: e1 f7 brne .-8 ; 0x3c4 <s_vShowAnim+0x21a>
  760. 3cc: 00 c0 rjmp .+0 ; 0x3ce <s_vShowAnim+0x224>
  761. 3ce: 00 00 nop
  762. /************************************************************************/
  763. /* Set display digits individually */
  764. /************************************************************************/
  765. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  766. {
  767. g_au8Digits[DIGIT_TENS] = u8Tens;
  768. 3d0: 98 e0 ldi r25, 0x08 ; 8
  769. 3d2: 92 83 std Z+2, r25 ; 0x02
  770. g_au8Digits[DIGIT_ONES] = u8Ones;
  771. 3d4: 81 83 std Z+1, r24 ; 0x01
  772. g_au8Digits[DIGIT_UNIT] = u8Unit;
  773. 3d6: 80 83 st Z, r24
  774. 3d8: 7f eb ldi r23, 0xBF ; 191
  775. 3da: a5 e4 ldi r26, 0x45 ; 69
  776. 3dc: 44 e0 ldi r20, 0x04 ; 4
  777. 3de: 71 50 subi r23, 0x01 ; 1
  778. 3e0: a0 40 sbci r26, 0x00 ; 0
  779. 3e2: 40 40 sbci r20, 0x00 ; 0
  780. 3e4: e1 f7 brne .-8 ; 0x3de <s_vShowAnim+0x234>
  781. 3e6: 00 c0 rjmp .+0 ; 0x3e8 <s_vShowAnim+0x23e>
  782. 3e8: 00 00 nop
  783. /************************************************************************/
  784. /* Set display digits individually */
  785. /************************************************************************/
  786. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  787. {
  788. g_au8Digits[DIGIT_TENS] = u8Tens;
  789. 3ea: 92 83 std Z+2, r25 ; 0x02
  790. g_au8Digits[DIGIT_ONES] = u8Ones;
  791. 3ec: 21 83 std Z+1, r18 ; 0x01
  792. g_au8Digits[DIGIT_UNIT] = u8Unit;
  793. 3ee: 80 83 st Z, r24
  794. 3f0: 5f eb ldi r21, 0xBF ; 191
  795. 3f2: 65 e4 ldi r22, 0x45 ; 69
  796. 3f4: 74 e0 ldi r23, 0x04 ; 4
  797. 3f6: 51 50 subi r21, 0x01 ; 1
  798. 3f8: 60 40 sbci r22, 0x00 ; 0
  799. 3fa: 70 40 sbci r23, 0x00 ; 0
  800. 3fc: e1 f7 brne .-8 ; 0x3f6 <s_vShowAnim+0x24c>
  801. 3fe: 00 c0 rjmp .+0 ; 0x400 <__LOCK_REGION_LENGTH__>
  802. 400: 00 00 nop
  803. /************************************************************************/
  804. /* Set display digits individually */
  805. /************************************************************************/
  806. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  807. {
  808. g_au8Digits[DIGIT_TENS] = u8Tens;
  809. 402: 92 83 std Z+2, r25 ; 0x02
  810. g_au8Digits[DIGIT_ONES] = u8Ones;
  811. 404: 31 83 std Z+1, r19 ; 0x01
  812. g_au8Digits[DIGIT_UNIT] = u8Unit;
  813. 406: 80 83 st Z, r24
  814. 408: af eb ldi r26, 0xBF ; 191
  815. 40a: 45 e4 ldi r20, 0x45 ; 69
  816. 40c: 54 e0 ldi r21, 0x04 ; 4
  817. 40e: a1 50 subi r26, 0x01 ; 1
  818. 410: 40 40 sbci r20, 0x00 ; 0
  819. 412: 50 40 sbci r21, 0x00 ; 0
  820. 414: e1 f7 brne .-8 ; 0x40e <__LOCK_REGION_LENGTH__+0xe>
  821. 416: 00 c0 rjmp .+0 ; 0x418 <__LOCK_REGION_LENGTH__+0x18>
  822. 418: 00 00 nop
  823. /************************************************************************/
  824. /* Set display digits individually */
  825. /************************************************************************/
  826. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  827. {
  828. g_au8Digits[DIGIT_TENS] = u8Tens;
  829. 41a: 92 83 std Z+2, r25 ; 0x02
  830. g_au8Digits[DIGIT_ONES] = u8Ones;
  831. 41c: 91 83 std Z+1, r25 ; 0x01
  832. g_au8Digits[DIGIT_UNIT] = u8Unit;
  833. 41e: 80 83 st Z, r24
  834. 420: 6f eb ldi r22, 0xBF ; 191
  835. 422: 75 e4 ldi r23, 0x45 ; 69
  836. 424: a4 e0 ldi r26, 0x04 ; 4
  837. 426: 61 50 subi r22, 0x01 ; 1
  838. 428: 70 40 sbci r23, 0x00 ; 0
  839. 42a: a0 40 sbci r26, 0x00 ; 0
  840. 42c: e1 f7 brne .-8 ; 0x426 <__LOCK_REGION_LENGTH__+0x26>
  841. 42e: 00 c0 rjmp .+0 ; 0x430 <__LOCK_REGION_LENGTH__+0x30>
  842. 430: 00 00 nop
  843. /************************************************************************/
  844. /* Set display digits individually */
  845. /************************************************************************/
  846. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  847. {
  848. g_au8Digits[DIGIT_TENS] = u8Tens;
  849. 432: 92 83 std Z+2, r25 ; 0x02
  850. g_au8Digits[DIGIT_ONES] = u8Ones;
  851. 434: 91 83 std Z+1, r25 ; 0x01
  852. g_au8Digits[DIGIT_UNIT] = u8Unit;
  853. 436: 41 e0 ldi r20, 0x01 ; 1
  854. 438: 40 83 st Z, r20
  855. 43a: 5f eb ldi r21, 0xBF ; 191
  856. 43c: 65 e4 ldi r22, 0x45 ; 69
  857. 43e: 74 e0 ldi r23, 0x04 ; 4
  858. 440: 51 50 subi r21, 0x01 ; 1
  859. 442: 60 40 sbci r22, 0x00 ; 0
  860. 444: 70 40 sbci r23, 0x00 ; 0
  861. 446: e1 f7 brne .-8 ; 0x440 <__LOCK_REGION_LENGTH__+0x40>
  862. 448: 00 c0 rjmp .+0 ; 0x44a <__LOCK_REGION_LENGTH__+0x4a>
  863. 44a: 00 00 nop
  864. /************************************************************************/
  865. /* Set display digits individually */
  866. /************************************************************************/
  867. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  868. {
  869. g_au8Digits[DIGIT_TENS] = u8Tens;
  870. 44c: 92 83 std Z+2, r25 ; 0x02
  871. g_au8Digits[DIGIT_ONES] = u8Ones;
  872. 44e: 91 83 std Z+1, r25 ; 0x01
  873. g_au8Digits[DIGIT_UNIT] = u8Unit;
  874. 450: 53 e0 ldi r21, 0x03 ; 3
  875. 452: 50 83 st Z, r21
  876. 454: af eb ldi r26, 0xBF ; 191
  877. 456: 65 e4 ldi r22, 0x45 ; 69
  878. 458: 74 e0 ldi r23, 0x04 ; 4
  879. 45a: a1 50 subi r26, 0x01 ; 1
  880. 45c: 60 40 sbci r22, 0x00 ; 0
  881. 45e: 70 40 sbci r23, 0x00 ; 0
  882. 460: e1 f7 brne .-8 ; 0x45a <__LOCK_REGION_LENGTH__+0x5a>
  883. 462: 00 c0 rjmp .+0 ; 0x464 <__LOCK_REGION_LENGTH__+0x64>
  884. 464: 00 00 nop
  885. /************************************************************************/
  886. /* Set display digits individually */
  887. /************************************************************************/
  888. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  889. {
  890. g_au8Digits[DIGIT_TENS] = u8Tens;
  891. 466: 92 83 std Z+2, r25 ; 0x02
  892. g_au8Digits[DIGIT_ONES] = u8Ones;
  893. 468: 91 83 std Z+1, r25 ; 0x01
  894. g_au8Digits[DIGIT_UNIT] = u8Unit;
  895. 46a: 90 83 st Z, r25
  896. 46c: af eb ldi r26, 0xBF ; 191
  897. 46e: 65 e4 ldi r22, 0x45 ; 69
  898. 470: 74 e0 ldi r23, 0x04 ; 4
  899. 472: a1 50 subi r26, 0x01 ; 1
  900. 474: 60 40 sbci r22, 0x00 ; 0
  901. 476: 70 40 sbci r23, 0x00 ; 0
  902. 478: e1 f7 brne .-8 ; 0x472 <__LOCK_REGION_LENGTH__+0x72>
  903. 47a: 00 c0 rjmp .+0 ; 0x47c <__LOCK_REGION_LENGTH__+0x7c>
  904. 47c: 00 00 nop
  905. /************************************************************************/
  906. /* Set display digits individually */
  907. /************************************************************************/
  908. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  909. {
  910. g_au8Digits[DIGIT_TENS] = u8Tens;
  911. 47e: 52 83 std Z+2, r21 ; 0x02
  912. g_au8Digits[DIGIT_ONES] = u8Ones;
  913. 480: 91 83 std Z+1, r25 ; 0x01
  914. g_au8Digits[DIGIT_UNIT] = u8Unit;
  915. 482: 90 83 st Z, r25
  916. 484: af eb ldi r26, 0xBF ; 191
  917. 486: 65 e4 ldi r22, 0x45 ; 69
  918. 488: 74 e0 ldi r23, 0x04 ; 4
  919. 48a: a1 50 subi r26, 0x01 ; 1
  920. 48c: 60 40 sbci r22, 0x00 ; 0
  921. 48e: 70 40 sbci r23, 0x00 ; 0
  922. 490: e1 f7 brne .-8 ; 0x48a <__LOCK_REGION_LENGTH__+0x8a>
  923. 492: 00 c0 rjmp .+0 ; 0x494 <__LOCK_REGION_LENGTH__+0x94>
  924. 494: 00 00 nop
  925. /************************************************************************/
  926. /* Set display digits individually */
  927. /************************************************************************/
  928. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  929. {
  930. g_au8Digits[DIGIT_TENS] = u8Tens;
  931. 496: 42 83 std Z+2, r20 ; 0x02
  932. g_au8Digits[DIGIT_ONES] = u8Ones;
  933. 498: 91 83 std Z+1, r25 ; 0x01
  934. g_au8Digits[DIGIT_UNIT] = u8Unit;
  935. 49a: 90 83 st Z, r25
  936. 49c: af eb ldi r26, 0xBF ; 191
  937. 49e: 65 e4 ldi r22, 0x45 ; 69
  938. 4a0: 74 e0 ldi r23, 0x04 ; 4
  939. 4a2: a1 50 subi r26, 0x01 ; 1
  940. 4a4: 60 40 sbci r22, 0x00 ; 0
  941. 4a6: 70 40 sbci r23, 0x00 ; 0
  942. 4a8: e1 f7 brne .-8 ; 0x4a2 <__LOCK_REGION_LENGTH__+0xa2>
  943. 4aa: 00 c0 rjmp .+0 ; 0x4ac <__LOCK_REGION_LENGTH__+0xac>
  944. 4ac: 00 00 nop
  945. /************************************************************************/
  946. /* Set display digits individually */
  947. /************************************************************************/
  948. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  949. {
  950. g_au8Digits[DIGIT_TENS] = u8Tens;
  951. 4ae: 82 83 std Z+2, r24 ; 0x02
  952. g_au8Digits[DIGIT_ONES] = u8Ones;
  953. 4b0: 91 83 std Z+1, r25 ; 0x01
  954. g_au8Digits[DIGIT_UNIT] = u8Unit;
  955. 4b2: 90 83 st Z, r25
  956. 4b4: af eb ldi r26, 0xBF ; 191
  957. 4b6: 65 e4 ldi r22, 0x45 ; 69
  958. 4b8: 74 e0 ldi r23, 0x04 ; 4
  959. 4ba: a1 50 subi r26, 0x01 ; 1
  960. 4bc: 60 40 sbci r22, 0x00 ; 0
  961. 4be: 70 40 sbci r23, 0x00 ; 0
  962. 4c0: e1 f7 brne .-8 ; 0x4ba <__LOCK_REGION_LENGTH__+0xba>
  963. 4c2: 00 c0 rjmp .+0 ; 0x4c4 <__LOCK_REGION_LENGTH__+0xc4>
  964. 4c4: 00 00 nop
  965. /************************************************************************/
  966. /* Set display digits individually */
  967. /************************************************************************/
  968. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  969. {
  970. g_au8Digits[DIGIT_TENS] = u8Tens;
  971. 4c6: 82 83 std Z+2, r24 ; 0x02
  972. g_au8Digits[DIGIT_ONES] = u8Ones;
  973. 4c8: 51 83 std Z+1, r21 ; 0x01
  974. g_au8Digits[DIGIT_UNIT] = u8Unit;
  975. 4ca: 90 83 st Z, r25
  976. 4cc: af eb ldi r26, 0xBF ; 191
  977. 4ce: 55 e4 ldi r21, 0x45 ; 69
  978. 4d0: 64 e0 ldi r22, 0x04 ; 4
  979. 4d2: a1 50 subi r26, 0x01 ; 1
  980. 4d4: 50 40 sbci r21, 0x00 ; 0
  981. 4d6: 60 40 sbci r22, 0x00 ; 0
  982. 4d8: e1 f7 brne .-8 ; 0x4d2 <__LOCK_REGION_LENGTH__+0xd2>
  983. 4da: 00 c0 rjmp .+0 ; 0x4dc <__LOCK_REGION_LENGTH__+0xdc>
  984. 4dc: 00 00 nop
  985. /************************************************************************/
  986. /* Set display digits individually */
  987. /************************************************************************/
  988. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  989. {
  990. g_au8Digits[DIGIT_TENS] = u8Tens;
  991. 4de: 82 83 std Z+2, r24 ; 0x02
  992. g_au8Digits[DIGIT_ONES] = u8Ones;
  993. 4e0: 41 83 std Z+1, r20 ; 0x01
  994. g_au8Digits[DIGIT_UNIT] = u8Unit;
  995. 4e2: 90 83 st Z, r25
  996. 4e4: 7f eb ldi r23, 0xBF ; 191
  997. 4e6: a5 e4 ldi r26, 0x45 ; 69
  998. 4e8: 44 e0 ldi r20, 0x04 ; 4
  999. 4ea: 71 50 subi r23, 0x01 ; 1
  1000. 4ec: a0 40 sbci r26, 0x00 ; 0
  1001. 4ee: 40 40 sbci r20, 0x00 ; 0
  1002. 4f0: e1 f7 brne .-8 ; 0x4ea <__LOCK_REGION_LENGTH__+0xea>
  1003. 4f2: 00 c0 rjmp .+0 ; 0x4f4 <__LOCK_REGION_LENGTH__+0xf4>
  1004. 4f4: 00 00 nop
  1005. /************************************************************************/
  1006. /* Set display digits individually */
  1007. /************************************************************************/
  1008. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1009. {
  1010. g_au8Digits[DIGIT_TENS] = u8Tens;
  1011. 4f6: 82 83 std Z+2, r24 ; 0x02
  1012. g_au8Digits[DIGIT_ONES] = u8Ones;
  1013. 4f8: 81 83 std Z+1, r24 ; 0x01
  1014. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1015. 4fa: 90 83 st Z, r25
  1016. 4fc: 5f eb ldi r21, 0xBF ; 191
  1017. 4fe: 65 e4 ldi r22, 0x45 ; 69
  1018. 500: 74 e0 ldi r23, 0x04 ; 4
  1019. 502: 51 50 subi r21, 0x01 ; 1
  1020. 504: 60 40 sbci r22, 0x00 ; 0
  1021. 506: 70 40 sbci r23, 0x00 ; 0
  1022. 508: e1 f7 brne .-8 ; 0x502 <__stack+0x3>
  1023. 50a: 00 c0 rjmp .+0 ; 0x50c <__stack+0xd>
  1024. 50c: 00 00 nop
  1025. /************************************************************************/
  1026. /* Set display digits individually */
  1027. /************************************************************************/
  1028. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1029. {
  1030. g_au8Digits[DIGIT_TENS] = u8Tens;
  1031. 50e: 82 83 std Z+2, r24 ; 0x02
  1032. g_au8Digits[DIGIT_ONES] = u8Ones;
  1033. 510: 81 83 std Z+1, r24 ; 0x01
  1034. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1035. 512: 30 83 st Z, r19
  1036. 514: 9f eb ldi r25, 0xBF ; 191
  1037. 516: a5 e4 ldi r26, 0x45 ; 69
  1038. 518: 34 e0 ldi r19, 0x04 ; 4
  1039. 51a: 91 50 subi r25, 0x01 ; 1
  1040. 51c: a0 40 sbci r26, 0x00 ; 0
  1041. 51e: 30 40 sbci r19, 0x00 ; 0
  1042. 520: e1 f7 brne .-8 ; 0x51a <__stack+0x1b>
  1043. 522: 00 c0 rjmp .+0 ; 0x524 <__stack+0x25>
  1044. 524: 00 00 nop
  1045. /************************************************************************/
  1046. /* Set display digits individually */
  1047. /************************************************************************/
  1048. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1049. {
  1050. g_au8Digits[DIGIT_TENS] = u8Tens;
  1051. 526: 82 83 std Z+2, r24 ; 0x02
  1052. g_au8Digits[DIGIT_ONES] = u8Ones;
  1053. 528: 81 83 std Z+1, r24 ; 0x01
  1054. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1055. 52a: 20 83 st Z, r18
  1056. 52c: 4f eb ldi r20, 0xBF ; 191
  1057. 52e: 55 e4 ldi r21, 0x45 ; 69
  1058. 530: 64 e0 ldi r22, 0x04 ; 4
  1059. 532: 41 50 subi r20, 0x01 ; 1
  1060. 534: 50 40 sbci r21, 0x00 ; 0
  1061. 536: 60 40 sbci r22, 0x00 ; 0
  1062. 538: e1 f7 brne .-8 ; 0x532 <__stack+0x33>
  1063. 53a: 00 c0 rjmp .+0 ; 0x53c <__stack+0x3d>
  1064. 53c: 00 00 nop
  1065. /************************************************************************/
  1066. /* Set display digits individually */
  1067. /************************************************************************/
  1068. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1069. {
  1070. g_au8Digits[DIGIT_TENS] = u8Tens;
  1071. 53e: 82 83 std Z+2, r24 ; 0x02
  1072. g_au8Digits[DIGIT_ONES] = u8Ones;
  1073. 540: 81 83 std Z+1, r24 ; 0x01
  1074. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1075. 542: 80 83 st Z, r24
  1076. 544: 7f eb ldi r23, 0xBF ; 191
  1077. 546: 85 e4 ldi r24, 0x45 ; 69
  1078. 548: 94 e0 ldi r25, 0x04 ; 4
  1079. 54a: 71 50 subi r23, 0x01 ; 1
  1080. 54c: 80 40 sbci r24, 0x00 ; 0
  1081. 54e: 90 40 sbci r25, 0x00 ; 0
  1082. 550: e1 f7 brne .-8 ; 0x54a <__stack+0x4b>
  1083. 552: 00 c0 rjmp .+0 ; 0x554 <__stack+0x55>
  1084. 554: 00 00 nop
  1085. /************************************************************************/
  1086. /* Set display digits individually */
  1087. /************************************************************************/
  1088. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1089. {
  1090. g_au8Digits[DIGIT_TENS] = u8Tens;
  1091. 556: e0 e0 ldi r30, 0x00 ; 0
  1092. 558: f1 e0 ldi r31, 0x01 ; 1
  1093. 55a: 80 e1 ldi r24, 0x10 ; 16
  1094. 55c: 82 83 std Z+2, r24 ; 0x02
  1095. g_au8Digits[DIGIT_ONES] = u8Ones;
  1096. 55e: 81 83 std Z+1, r24 ; 0x01
  1097. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1098. 560: 80 83 st Z, r24
  1099. 562: af eb ldi r26, 0xBF ; 191
  1100. 564: 25 e4 ldi r18, 0x45 ; 69
  1101. 566: 34 e0 ldi r19, 0x04 ; 4
  1102. 568: a1 50 subi r26, 0x01 ; 1
  1103. 56a: 20 40 sbci r18, 0x00 ; 0
  1104. 56c: 30 40 sbci r19, 0x00 ; 0
  1105. 56e: e1 f7 brne .-8 ; 0x568 <__stack+0x69>
  1106. 570: 00 c0 rjmp .+0 ; 0x572 <__stack+0x73>
  1107. 572: 00 00 nop
  1108. 574: 08 95 ret
  1109. 00000576 <s_u8ReadSensor>:
  1110. /************************************************************************/
  1111. /* Read humidity and temperature from DHT22 */
  1112. /************************************************************************/
  1113. uint8_t s_u8ReadSensor( void )
  1114. {
  1115. 576: 0f 93 push r16
  1116. 578: 1f 93 push r17
  1117. 57a: cf 93 push r28
  1118. 57c: df 93 push r29
  1119. 57e: 00 d0 rcall .+0 ; 0x580 <s_u8ReadSensor+0xa>
  1120. 580: 00 d0 rcall .+0 ; 0x582 <s_u8ReadSensor+0xc>
  1121. 582: 1f 92 push r1
  1122. 584: cd b7 in r28, 0x3d ; 61
  1123. 586: de b7 in r29, 0x3e ; 62
  1124. uint8_t timeout = 200;
  1125. SENSOR_sda_in;
  1126. 588: 3b 98 cbi 0x07, 3 ; 7
  1127. // Bus master has released time min: 20us, typ: 30us, max: 200us
  1128. while ( SENSOR_is_hi )
  1129. 58a: 89 ec ldi r24, 0xC9 ; 201
  1130. 58c: 07 c0 rjmp .+14 ; 0x59c <s_u8ReadSensor+0x26>
  1131. #else
  1132. //round up by default
  1133. __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
  1134. #endif
  1135. __builtin_avr_delay_cycles(__ticks_dc);
  1136. 58e: 36 e0 ldi r19, 0x06 ; 6
  1137. 590: 3a 95 dec r19
  1138. 592: f1 f7 brne .-4 ; 0x590 <s_u8ReadSensor+0x1a>
  1139. 594: 00 c0 rjmp .+0 ; 0x596 <s_u8ReadSensor+0x20>
  1140. 596: 81 50 subi r24, 0x01 ; 1
  1141. {
  1142. _delay_us(1);
  1143. if ( !timeout-- )
  1144. 598: 09 f4 brne .+2 ; 0x59c <s_u8ReadSensor+0x26>
  1145. 59a: 6e c0 rjmp .+220 ; 0x678 <s_u8ReadSensor+0x102>
  1146. uint8_t timeout = 200;
  1147. SENSOR_sda_in;
  1148. // Bus master has released time min: 20us, typ: 30us, max: 200us
  1149. while ( SENSOR_is_hi )
  1150. 59c: 33 99 sbic 0x06, 3 ; 6
  1151. 59e: f7 cf rjmp .-18 ; 0x58e <s_u8ReadSensor+0x18>
  1152. 5a0: 86 e5 ldi r24, 0x56 ; 86
  1153. 5a2: 07 c0 rjmp .+14 ; 0x5b2 <s_u8ReadSensor+0x3c>
  1154. 5a4: 96 e0 ldi r25, 0x06 ; 6
  1155. 5a6: 9a 95 dec r25
  1156. 5a8: f1 f7 brne .-4 ; 0x5a6 <s_u8ReadSensor+0x30>
  1157. 5aa: 00 c0 rjmp .+0 ; 0x5ac <s_u8ReadSensor+0x36>
  1158. 5ac: 81 50 subi r24, 0x01 ; 1
  1159. // AM2302 response signal min: 75us typ:80us max:85us
  1160. timeout = 85;
  1161. while(SENSOR_is_low)
  1162. {
  1163. _delay_us(1);
  1164. if (!timeout--)
  1165. 5ae: 09 f4 brne .+2 ; 0x5b2 <s_u8ReadSensor+0x3c>
  1166. 5b0: 65 c0 rjmp .+202 ; 0x67c <s_u8ReadSensor+0x106>
  1167. }
  1168. }
  1169. // AM2302 response signal min: 75us typ:80us max:85us
  1170. timeout = 85;
  1171. while(SENSOR_is_low)
  1172. 5b2: 33 9b sbis 0x06, 3 ; 6
  1173. 5b4: f7 cf rjmp .-18 ; 0x5a4 <s_u8ReadSensor+0x2e>
  1174. 5b6: 86 e5 ldi r24, 0x56 ; 86
  1175. 5b8: 07 c0 rjmp .+14 ; 0x5c8 <s_u8ReadSensor+0x52>
  1176. 5ba: a6 e0 ldi r26, 0x06 ; 6
  1177. 5bc: aa 95 dec r26
  1178. 5be: f1 f7 brne .-4 ; 0x5bc <s_u8ReadSensor+0x46>
  1179. 5c0: 00 c0 rjmp .+0 ; 0x5c2 <s_u8ReadSensor+0x4c>
  1180. 5c2: 81 50 subi r24, 0x01 ; 1
  1181. timeout = 85;
  1182. while(SENSOR_is_hi)
  1183. {
  1184. _delay_us(1);
  1185. if (!timeout--)
  1186. 5c4: 09 f4 brne .+2 ; 0x5c8 <s_u8ReadSensor+0x52>
  1187. 5c6: 5c c0 rjmp .+184 ; 0x680 <s_u8ReadSensor+0x10a>
  1188. return 3;
  1189. }
  1190. } // response to low time
  1191. timeout = 85;
  1192. while(SENSOR_is_hi)
  1193. 5c8: 33 99 sbic 0x06, 3 ; 6
  1194. 5ca: f7 cf rjmp .-18 ; 0x5ba <s_u8ReadSensor+0x44>
  1195. * signal 0 high time: 22 26 30 (bit=0)
  1196. * signal 1 high time: 68 70 75 (bit=1)
  1197. * signal 0,1 down time: 48 50 55
  1198. */
  1199. uint8_t sensor_data[5]={0};
  1200. 5cc: fe 01 movw r30, r28
  1201. 5ce: 31 96 adiw r30, 0x01 ; 1
  1202. 5d0: 85 e0 ldi r24, 0x05 ; 5
  1203. 5d2: df 01 movw r26, r30
  1204. 5d4: 1d 92 st X+, r1
  1205. 5d6: 8a 95 dec r24
  1206. 5d8: e9 f7 brne .-6 ; 0x5d4 <s_u8ReadSensor+0x5e>
  1207. 5da: ae 01 movw r20, r28
  1208. 5dc: 4a 5f subi r20, 0xFA ; 250
  1209. 5de: 5f 4f sbci r21, 0xFF ; 255
  1210. 5e0: 22 c0 rjmp .+68 ; 0x626 <s_u8ReadSensor+0xb0>
  1211. 5e2: b6 e0 ldi r27, 0x06 ; 6
  1212. 5e4: ba 95 dec r27
  1213. 5e6: f1 f7 brne .-4 ; 0x5e4 <s_u8ReadSensor+0x6e>
  1214. 5e8: 00 c0 rjmp .+0 ; 0x5ea <s_u8ReadSensor+0x74>
  1215. 5ea: 91 50 subi r25, 0x01 ; 1
  1216. while(SENSOR_is_low)
  1217. {
  1218. _delay_us(1);
  1219. // if timeout == 0 => sensor do not response
  1220. if (!timeout--)
  1221. 5ec: 11 f4 brne .+4 ; 0x5f2 <s_u8ReadSensor+0x7c>
  1222. 5ee: 4a c0 rjmp .+148 ; 0x684 <s_u8ReadSensor+0x10e>
  1223. 5f0: 98 e3 ldi r25, 0x38 ; 56
  1224. // get 8 bits from sensor
  1225. for(uint8_t j = 1; j <= 8; j++)
  1226. {
  1227. // wait for sensor response
  1228. timeout = 55;
  1229. while(SENSOR_is_low)
  1230. 5f2: 33 9b sbis 0x06, 3 ; 6
  1231. 5f4: f6 cf rjmp .-20 ; 0x5e2 <s_u8ReadSensor+0x6c>
  1232. 5f6: 38 ec ldi r19, 0xC8 ; 200
  1233. 5f8: 3a 95 dec r19
  1234. 5fa: f1 f7 brne .-4 ; 0x5f8 <s_u8ReadSensor+0x82>
  1235. }
  1236. }
  1237. // wait 30 us to check if bit is logical "1" or "0"
  1238. _delay_us(30);
  1239. sensor_byte <<= 1; // add new lower bit
  1240. 5fc: 22 0f add r18, r18
  1241. // If sda ist high after 30 us then bit is logical "1" else it was a logical "0"
  1242. // For a logical "1" sda have to be low after 75 us.
  1243. if (SENSOR_is_hi)
  1244. 5fe: 33 99 sbic 0x06, 3 ; 6
  1245. 600: 08 c0 rjmp .+16 ; 0x612 <s_u8ReadSensor+0x9c>
  1246. 602: 0b c0 rjmp .+22 ; 0x61a <s_u8ReadSensor+0xa4>
  1247. 604: a6 e0 ldi r26, 0x06 ; 6
  1248. 606: aa 95 dec r26
  1249. 608: f1 f7 brne .-4 ; 0x606 <s_u8ReadSensor+0x90>
  1250. 60a: 00 c0 rjmp .+0 ; 0x60c <s_u8ReadSensor+0x96>
  1251. 60c: 91 50 subi r25, 0x01 ; 1
  1252. while(SENSOR_is_hi)
  1253. {
  1254. _delay_us(1);
  1255. if (!timeout--)
  1256. 60e: 11 f4 brne .+4 ; 0x614 <s_u8ReadSensor+0x9e>
  1257. 610: 3b c0 rjmp .+118 ; 0x688 <s_u8ReadSensor+0x112>
  1258. 612: 9e e2 ldi r25, 0x2E ; 46
  1259. if (SENSOR_is_hi)
  1260. {
  1261. sensor_byte |= 1; // add logical "1"
  1262. timeout = 45; // 30us - 75us = 45us
  1263. while(SENSOR_is_hi)
  1264. 614: 33 99 sbic 0x06, 3 ; 6
  1265. 616: f6 cf rjmp .-20 ; 0x604 <s_u8ReadSensor+0x8e>
  1266. // If sda ist high after 30 us then bit is logical "1" else it was a logical "0"
  1267. // For a logical "1" sda have to be low after 75 us.
  1268. if (SENSOR_is_hi)
  1269. {
  1270. sensor_byte |= 1; // add logical "1"
  1271. 618: 21 60 ori r18, 0x01 ; 1
  1272. 61a: 81 50 subi r24, 0x01 ; 1
  1273. for(uint8_t i = 0; i < 5; i++)
  1274. {
  1275. uint8_t sensor_byte = 0;
  1276. // get 8 bits from sensor
  1277. for(uint8_t j = 1; j <= 8; j++)
  1278. 61c: 49 f7 brne .-46 ; 0x5f0 <s_u8ReadSensor+0x7a>
  1279. }
  1280. }
  1281. }
  1282. }
  1283. sensor_data[i] = sensor_byte;
  1284. 61e: 21 93 st Z+, r18
  1285. * signal 0,1 down time: 48 50 55
  1286. */
  1287. uint8_t sensor_data[5]={0};
  1288. for(uint8_t i = 0; i < 5; i++)
  1289. 620: 4e 17 cp r20, r30
  1290. 622: 5f 07 cpc r21, r31
  1291. 624: 19 f0 breq .+6 ; 0x62c <s_u8ReadSensor+0xb6>
  1292. 626: 88 e0 ldi r24, 0x08 ; 8
  1293. 628: 20 e0 ldi r18, 0x00 ; 0
  1294. 62a: e2 cf rjmp .-60 ; 0x5f0 <s_u8ReadSensor+0x7a>
  1295. sensor_data[i] = sensor_byte;
  1296. }
  1297. // checksum
  1298. if ( ((sensor_data[0] + sensor_data[1] + sensor_data[2] + sensor_data[3]) & 0xff ) != sensor_data[4])
  1299. 62c: a9 81 ldd r26, Y+1 ; 0x01
  1300. 62e: b0 e0 ldi r27, 0x00 ; 0
  1301. 630: ea 81 ldd r30, Y+2 ; 0x02
  1302. 632: f0 e0 ldi r31, 0x00 ; 0
  1303. 634: 6b 81 ldd r22, Y+3 ; 0x03
  1304. 636: 70 e0 ldi r23, 0x00 ; 0
  1305. 638: 4c 81 ldd r20, Y+4 ; 0x04
  1306. 63a: 50 e0 ldi r21, 0x00 ; 0
  1307. 63c: 9d 01 movw r18, r26
  1308. 63e: 2e 0f add r18, r30
  1309. 640: 3f 1f adc r19, r31
  1310. 642: 26 0f add r18, r22
  1311. 644: 37 1f adc r19, r23
  1312. 646: 24 0f add r18, r20
  1313. 648: 35 1f adc r19, r21
  1314. 64a: 33 27 eor r19, r19
  1315. 64c: 0d 81 ldd r16, Y+5 ; 0x05
  1316. 64e: 10 e0 ldi r17, 0x00 ; 0
  1317. 650: 20 17 cp r18, r16
  1318. 652: 31 07 cpc r19, r17
  1319. 654: d9 f4 brne .+54 ; 0x68c <s_u8ReadSensor+0x116>
  1320. // debug output
  1321. //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 ));
  1322. return 7;
  1323. }
  1324. g_u16Humidity = (sensor_data[0] << 8) + sensor_data[1];
  1325. 656: ba 2f mov r27, r26
  1326. 658: aa 27 eor r26, r26
  1327. 65a: ea 0f add r30, r26
  1328. 65c: fb 1f adc r31, r27
  1329. 65e: f0 93 28 01 sts 0x0128, r31 ; 0x800128 <g_u16Humidity+0x1>
  1330. 662: e0 93 27 01 sts 0x0127, r30 ; 0x800127 <g_u16Humidity>
  1331. g_u16Temperature = (sensor_data[2] << 8) + sensor_data[3];
  1332. 666: 76 2f mov r23, r22
  1333. 668: 66 27 eor r22, r22
  1334. 66a: 46 0f add r20, r22
  1335. 66c: 57 1f adc r21, r23
  1336. 66e: 50 93 26 01 sts 0x0126, r21 ; 0x800126 <g_u16Temperature+0x1>
  1337. 672: 40 93 25 01 sts 0x0125, r20 ; 0x800125 <g_u16Temperature>
  1338. return 0;
  1339. 676: 0b c0 rjmp .+22 ; 0x68e <s_u8ReadSensor+0x118>
  1340. while ( SENSOR_is_hi )
  1341. {
  1342. _delay_us(1);
  1343. if ( !timeout-- )
  1344. {
  1345. return 2;
  1346. 678: 82 e0 ldi r24, 0x02 ; 2
  1347. 67a: 09 c0 rjmp .+18 ; 0x68e <s_u8ReadSensor+0x118>
  1348. while(SENSOR_is_low)
  1349. {
  1350. _delay_us(1);
  1351. if (!timeout--)
  1352. {
  1353. return 3;
  1354. 67c: 83 e0 ldi r24, 0x03 ; 3
  1355. 67e: 07 c0 rjmp .+14 ; 0x68e <s_u8ReadSensor+0x118>
  1356. while(SENSOR_is_hi)
  1357. {
  1358. _delay_us(1);
  1359. if (!timeout--)
  1360. {
  1361. return 4;
  1362. 680: 84 e0 ldi r24, 0x04 ; 4
  1363. 682: 05 c0 rjmp .+10 ; 0x68e <s_u8ReadSensor+0x118>
  1364. _delay_us(1);
  1365. // if timeout == 0 => sensor do not response
  1366. if (!timeout--)
  1367. {
  1368. return 5;
  1369. 684: 85 e0 ldi r24, 0x05 ; 5
  1370. 686: 03 c0 rjmp .+6 ; 0x68e <s_u8ReadSensor+0x118>
  1371. {
  1372. _delay_us(1);
  1373. if (!timeout--)
  1374. {
  1375. return 6;
  1376. 688: 86 e0 ldi r24, 0x06 ; 6
  1377. 68a: 01 c0 rjmp .+2 ; 0x68e <s_u8ReadSensor+0x118>
  1378. // checksum
  1379. if ( ((sensor_data[0] + sensor_data[1] + sensor_data[2] + sensor_data[3]) & 0xff ) != sensor_data[4])
  1380. {
  1381. // debug output
  1382. //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 ));
  1383. return 7;
  1384. 68c: 87 e0 ldi r24, 0x07 ; 7
  1385. g_u16Humidity = (sensor_data[0] << 8) + sensor_data[1];
  1386. g_u16Temperature = (sensor_data[2] << 8) + sensor_data[3];
  1387. return 0;
  1388. 68e: 0f 90 pop r0
  1389. 690: 0f 90 pop r0
  1390. 692: 0f 90 pop r0
  1391. 694: 0f 90 pop r0
  1392. 696: 0f 90 pop r0
  1393. 698: df 91 pop r29
  1394. 69a: cf 91 pop r28
  1395. 69c: 1f 91 pop r17
  1396. 69e: 0f 91 pop r16
  1397. 6a0: 08 95 ret
  1398. 000006a2 <main>:
  1399. int main(void)
  1400. {
  1401. uint8_t u8ErrorCode = 0U;
  1402. uint8_t u8Loop = 0U;
  1403. s_vInit();
  1404. 6a2: e4 dc rcall .-1592 ; 0x6c <s_vInit>
  1405. /************************************************************************/
  1406. /* Set display digits individually */
  1407. /************************************************************************/
  1408. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1409. {
  1410. g_au8Digits[DIGIT_TENS] = u8Tens;
  1411. 6a4: e0 e0 ldi r30, 0x00 ; 0
  1412. 6a6: f1 e0 ldi r31, 0x01 ; 1
  1413. 6a8: 90 e1 ldi r25, 0x10 ; 16
  1414. 6aa: 92 83 std Z+2, r25 ; 0x02
  1415. g_au8Digits[DIGIT_ONES] = u8Ones;
  1416. 6ac: 91 83 std Z+1, r25 ; 0x01
  1417. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1418. 6ae: 90 83 st Z, r25
  1419. #else
  1420. //round up by default
  1421. __ticks_dc = (uint32_t)(ceil(fabs(__tmp)));
  1422. #endif
  1423. __builtin_avr_delay_cycles(__ticks_dc);
  1424. 6b0: af e4 ldi r26, 0x4F ; 79
  1425. 6b2: b3 ec ldi r27, 0xC3 ; 195
  1426. 6b4: 11 97 sbiw r26, 0x01 ; 1
  1427. 6b6: f1 f7 brne .-4 ; 0x6b4 <main+0x12>
  1428. 6b8: 00 c0 rjmp .+0 ; 0x6ba <main+0x18>
  1429. 6ba: 00 00 nop
  1430. /************************************************************************/
  1431. /* Set display digits individually */
  1432. /************************************************************************/
  1433. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1434. {
  1435. g_au8Digits[DIGIT_TENS] = u8Tens;
  1436. 6bc: 83 e1 ldi r24, 0x13 ; 19
  1437. 6be: 82 83 std Z+2, r24 ; 0x02
  1438. g_au8Digits[DIGIT_ONES] = u8Ones;
  1439. 6c0: 91 83 std Z+1, r25 ; 0x01
  1440. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1441. 6c2: 90 83 st Z, r25
  1442. 6c4: bf e7 ldi r27, 0x7F ; 127
  1443. 6c6: 0f e4 ldi r16, 0x4F ; 79
  1444. 6c8: 12 e1 ldi r17, 0x12 ; 18
  1445. 6ca: b1 50 subi r27, 0x01 ; 1
  1446. 6cc: 00 40 sbci r16, 0x00 ; 0
  1447. 6ce: 10 40 sbci r17, 0x00 ; 0
  1448. 6d0: e1 f7 brne .-8 ; 0x6ca <main+0x28>
  1449. 6d2: 00 c0 rjmp .+0 ; 0x6d4 <main+0x32>
  1450. 6d4: 00 00 nop
  1451. /************************************************************************/
  1452. /* Set display digits individually */
  1453. /************************************************************************/
  1454. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1455. {
  1456. g_au8Digits[DIGIT_TENS] = u8Tens;
  1457. 6d6: 82 83 std Z+2, r24 ; 0x02
  1458. g_au8Digits[DIGIT_ONES] = u8Ones;
  1459. 6d8: 81 83 std Z+1, r24 ; 0x01
  1460. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1461. 6da: 90 83 st Z, r25
  1462. 6dc: 2f e7 ldi r18, 0x7F ; 127
  1463. 6de: 3f e4 ldi r19, 0x4F ; 79
  1464. 6e0: 42 e1 ldi r20, 0x12 ; 18
  1465. 6e2: 21 50 subi r18, 0x01 ; 1
  1466. 6e4: 30 40 sbci r19, 0x00 ; 0
  1467. 6e6: 40 40 sbci r20, 0x00 ; 0
  1468. 6e8: e1 f7 brne .-8 ; 0x6e2 <main+0x40>
  1469. 6ea: 00 c0 rjmp .+0 ; 0x6ec <main+0x4a>
  1470. 6ec: 00 00 nop
  1471. /************************************************************************/
  1472. /* Set display digits individually */
  1473. /************************************************************************/
  1474. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1475. {
  1476. g_au8Digits[DIGIT_TENS] = u8Tens;
  1477. 6ee: 82 83 std Z+2, r24 ; 0x02
  1478. g_au8Digits[DIGIT_ONES] = u8Ones;
  1479. 6f0: 81 83 std Z+1, r24 ; 0x01
  1480. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1481. 6f2: 80 83 st Z, r24
  1482. 6f4: 8f e7 ldi r24, 0x7F ; 127
  1483. 6f6: 9f e4 ldi r25, 0x4F ; 79
  1484. 6f8: a2 e1 ldi r26, 0x12 ; 18
  1485. 6fa: 81 50 subi r24, 0x01 ; 1
  1486. 6fc: 90 40 sbci r25, 0x00 ; 0
  1487. 6fe: a0 40 sbci r26, 0x00 ; 0
  1488. 700: e1 f7 brne .-8 ; 0x6fa <main+0x58>
  1489. 702: 00 c0 rjmp .+0 ; 0x704 <main+0x62>
  1490. 704: 00 00 nop
  1491. 706: 35 e0 ldi r19, 0x05 ; 5
  1492. /************************************************************************/
  1493. /* Set display digits individually */
  1494. /************************************************************************/
  1495. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1496. {
  1497. g_au8Digits[DIGIT_TENS] = u8Tens;
  1498. 708: 80 e1 ldi r24, 0x10 ; 16
  1499. g_au8Digits[DIGIT_ONES] = u8Ones;
  1500. 70a: 23 e1 ldi r18, 0x13 ; 19
  1501. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1502. 70c: d9 e1 ldi r29, 0x19 ; 25
  1503. 70e: c7 e0 ldi r28, 0x07 ; 7
  1504. 710: ba e1 ldi r27, 0x1A ; 26
  1505. /* Set display digits individually */
  1506. /************************************************************************/
  1507. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1508. {
  1509. g_au8Digits[DIGIT_TENS] = u8Tens;
  1510. g_au8Digits[DIGIT_ONES] = u8Ones;
  1511. 712: 96 e1 ldi r25, 0x16 ; 22
  1512. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1513. 714: ab e1 ldi r26, 0x1B ; 27
  1514. /************************************************************************/
  1515. /* Set display digits individually */
  1516. /************************************************************************/
  1517. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1518. {
  1519. g_au8Digits[DIGIT_TENS] = u8Tens;
  1520. 716: 7c e1 ldi r23, 0x1C ; 28
  1521. 718: 6d e1 ldi r22, 0x1D ; 29
  1522. 71a: 5e e1 ldi r21, 0x1E ; 30
  1523. 71c: 82 83 std Z+2, r24 ; 0x02
  1524. g_au8Digits[DIGIT_ONES] = u8Ones;
  1525. 71e: 21 83 std Z+1, r18 ; 0x01
  1526. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1527. 720: d0 83 st Z, r29
  1528. 722: 0f eb ldi r16, 0xBF ; 191
  1529. 724: 15 e4 ldi r17, 0x45 ; 69
  1530. 726: 44 e0 ldi r20, 0x04 ; 4
  1531. 728: 01 50 subi r16, 0x01 ; 1
  1532. 72a: 10 40 sbci r17, 0x00 ; 0
  1533. 72c: 40 40 sbci r20, 0x00 ; 0
  1534. 72e: e1 f7 brne .-8 ; 0x728 <main+0x86>
  1535. 730: 00 c0 rjmp .+0 ; 0x732 <main+0x90>
  1536. 732: 00 00 nop
  1537. /************************************************************************/
  1538. /* Set display digits individually */
  1539. /************************************************************************/
  1540. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1541. {
  1542. g_au8Digits[DIGIT_TENS] = u8Tens;
  1543. 734: 82 83 std Z+2, r24 ; 0x02
  1544. g_au8Digits[DIGIT_ONES] = u8Ones;
  1545. 736: 81 83 std Z+1, r24 ; 0x01
  1546. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1547. 738: c0 83 st Z, r28
  1548. 73a: 0f eb ldi r16, 0xBF ; 191
  1549. 73c: 15 e4 ldi r17, 0x45 ; 69
  1550. 73e: 44 e0 ldi r20, 0x04 ; 4
  1551. 740: 01 50 subi r16, 0x01 ; 1
  1552. 742: 10 40 sbci r17, 0x00 ; 0
  1553. 744: 40 40 sbci r20, 0x00 ; 0
  1554. 746: e1 f7 brne .-8 ; 0x740 <main+0x9e>
  1555. 748: 00 c0 rjmp .+0 ; 0x74a <main+0xa8>
  1556. 74a: 00 00 nop
  1557. /************************************************************************/
  1558. /* Set display digits individually */
  1559. /************************************************************************/
  1560. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1561. {
  1562. g_au8Digits[DIGIT_TENS] = u8Tens;
  1563. 74c: 82 83 std Z+2, r24 ; 0x02
  1564. g_au8Digits[DIGIT_ONES] = u8Ones;
  1565. 74e: 81 83 std Z+1, r24 ; 0x01
  1566. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1567. 750: b0 83 st Z, r27
  1568. 752: 0f eb ldi r16, 0xBF ; 191
  1569. 754: 15 e4 ldi r17, 0x45 ; 69
  1570. 756: 44 e0 ldi r20, 0x04 ; 4
  1571. 758: 01 50 subi r16, 0x01 ; 1
  1572. 75a: 10 40 sbci r17, 0x00 ; 0
  1573. 75c: 40 40 sbci r20, 0x00 ; 0
  1574. 75e: e1 f7 brne .-8 ; 0x758 <main+0xb6>
  1575. 760: 00 c0 rjmp .+0 ; 0x762 <main+0xc0>
  1576. 762: 00 00 nop
  1577. /************************************************************************/
  1578. /* Set display digits individually */
  1579. /************************************************************************/
  1580. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1581. {
  1582. g_au8Digits[DIGIT_TENS] = u8Tens;
  1583. 764: 82 83 std Z+2, r24 ; 0x02
  1584. g_au8Digits[DIGIT_ONES] = u8Ones;
  1585. 766: 91 83 std Z+1, r25 ; 0x01
  1586. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1587. 768: a0 83 st Z, r26
  1588. 76a: 0f eb ldi r16, 0xBF ; 191
  1589. 76c: 15 e4 ldi r17, 0x45 ; 69
  1590. 76e: 44 e0 ldi r20, 0x04 ; 4
  1591. 770: 01 50 subi r16, 0x01 ; 1
  1592. 772: 10 40 sbci r17, 0x00 ; 0
  1593. 774: 40 40 sbci r20, 0x00 ; 0
  1594. 776: e1 f7 brne .-8 ; 0x770 <main+0xce>
  1595. 778: 00 c0 rjmp .+0 ; 0x77a <main+0xd8>
  1596. 77a: 00 00 nop
  1597. /************************************************************************/
  1598. /* Set display digits individually */
  1599. /************************************************************************/
  1600. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1601. {
  1602. g_au8Digits[DIGIT_TENS] = u8Tens;
  1603. 77c: 92 83 std Z+2, r25 ; 0x02
  1604. g_au8Digits[DIGIT_ONES] = u8Ones;
  1605. 77e: 91 83 std Z+1, r25 ; 0x01
  1606. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1607. 780: 90 83 st Z, r25
  1608. 782: 0f eb ldi r16, 0xBF ; 191
  1609. 784: 15 e4 ldi r17, 0x45 ; 69
  1610. 786: 44 e0 ldi r20, 0x04 ; 4
  1611. 788: 01 50 subi r16, 0x01 ; 1
  1612. 78a: 10 40 sbci r17, 0x00 ; 0
  1613. 78c: 40 40 sbci r20, 0x00 ; 0
  1614. 78e: e1 f7 brne .-8 ; 0x788 <main+0xe6>
  1615. 790: 00 c0 rjmp .+0 ; 0x792 <main+0xf0>
  1616. 792: 00 00 nop
  1617. /************************************************************************/
  1618. /* Set display digits individually */
  1619. /************************************************************************/
  1620. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1621. {
  1622. g_au8Digits[DIGIT_TENS] = u8Tens;
  1623. 794: 72 83 std Z+2, r23 ; 0x02
  1624. g_au8Digits[DIGIT_ONES] = u8Ones;
  1625. 796: 91 83 std Z+1, r25 ; 0x01
  1626. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1627. 798: 80 83 st Z, r24
  1628. 79a: 0f eb ldi r16, 0xBF ; 191
  1629. 79c: 15 e4 ldi r17, 0x45 ; 69
  1630. 79e: 44 e0 ldi r20, 0x04 ; 4
  1631. 7a0: 01 50 subi r16, 0x01 ; 1
  1632. 7a2: 10 40 sbci r17, 0x00 ; 0
  1633. 7a4: 40 40 sbci r20, 0x00 ; 0
  1634. 7a6: e1 f7 brne .-8 ; 0x7a0 <main+0xfe>
  1635. 7a8: 00 c0 rjmp .+0 ; 0x7aa <main+0x108>
  1636. 7aa: 00 00 nop
  1637. /************************************************************************/
  1638. /* Set display digits individually */
  1639. /************************************************************************/
  1640. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1641. {
  1642. g_au8Digits[DIGIT_TENS] = u8Tens;
  1643. 7ac: 62 83 std Z+2, r22 ; 0x02
  1644. g_au8Digits[DIGIT_ONES] = u8Ones;
  1645. 7ae: 81 83 std Z+1, r24 ; 0x01
  1646. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1647. 7b0: 80 83 st Z, r24
  1648. 7b2: 0f eb ldi r16, 0xBF ; 191
  1649. 7b4: 15 e4 ldi r17, 0x45 ; 69
  1650. 7b6: 44 e0 ldi r20, 0x04 ; 4
  1651. 7b8: 01 50 subi r16, 0x01 ; 1
  1652. 7ba: 10 40 sbci r17, 0x00 ; 0
  1653. 7bc: 40 40 sbci r20, 0x00 ; 0
  1654. 7be: e1 f7 brne .-8 ; 0x7b8 <main+0x116>
  1655. 7c0: 00 c0 rjmp .+0 ; 0x7c2 <main+0x120>
  1656. 7c2: 00 00 nop
  1657. /************************************************************************/
  1658. /* Set display digits individually */
  1659. /************************************************************************/
  1660. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1661. {
  1662. g_au8Digits[DIGIT_TENS] = u8Tens;
  1663. 7c4: 52 83 std Z+2, r21 ; 0x02
  1664. g_au8Digits[DIGIT_ONES] = u8Ones;
  1665. 7c6: 81 83 std Z+1, r24 ; 0x01
  1666. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1667. 7c8: 80 83 st Z, r24
  1668. 7ca: 0f eb ldi r16, 0xBF ; 191
  1669. 7cc: 15 e4 ldi r17, 0x45 ; 69
  1670. 7ce: 44 e0 ldi r20, 0x04 ; 4
  1671. 7d0: 01 50 subi r16, 0x01 ; 1
  1672. 7d2: 10 40 sbci r17, 0x00 ; 0
  1673. 7d4: 40 40 sbci r20, 0x00 ; 0
  1674. 7d6: e1 f7 brne .-8 ; 0x7d0 <main+0x12e>
  1675. 7d8: 00 c0 rjmp .+0 ; 0x7da <main+0x138>
  1676. 7da: 00 00 nop
  1677. /************************************************************************/
  1678. /* Set display digits individually */
  1679. /************************************************************************/
  1680. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1681. {
  1682. g_au8Digits[DIGIT_TENS] = u8Tens;
  1683. 7dc: 0f e1 ldi r16, 0x1F ; 31
  1684. 7de: 02 83 std Z+2, r16 ; 0x02
  1685. g_au8Digits[DIGIT_ONES] = u8Ones;
  1686. 7e0: 21 83 std Z+1, r18 ; 0x01
  1687. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1688. 7e2: 80 83 st Z, r24
  1689. 7e4: 1f eb ldi r17, 0xBF ; 191
  1690. 7e6: 45 e4 ldi r20, 0x45 ; 69
  1691. 7e8: 04 e0 ldi r16, 0x04 ; 4
  1692. 7ea: 11 50 subi r17, 0x01 ; 1
  1693. 7ec: 40 40 sbci r20, 0x00 ; 0
  1694. 7ee: 00 40 sbci r16, 0x00 ; 0
  1695. 7f0: e1 f7 brne .-8 ; 0x7ea <main+0x148>
  1696. 7f2: 00 c0 rjmp .+0 ; 0x7f4 <main+0x152>
  1697. 7f4: 00 00 nop
  1698. /************************************************************************/
  1699. /* Set display digits individually */
  1700. /************************************************************************/
  1701. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1702. {
  1703. g_au8Digits[DIGIT_TENS] = u8Tens;
  1704. 7f6: 22 83 std Z+2, r18 ; 0x02
  1705. g_au8Digits[DIGIT_ONES] = u8Ones;
  1706. 7f8: 21 83 std Z+1, r18 ; 0x01
  1707. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1708. 7fa: 20 83 st Z, r18
  1709. 7fc: 1f eb ldi r17, 0xBF ; 191
  1710. 7fe: 45 e4 ldi r20, 0x45 ; 69
  1711. 800: 04 e0 ldi r16, 0x04 ; 4
  1712. 802: 11 50 subi r17, 0x01 ; 1
  1713. 804: 40 40 sbci r20, 0x00 ; 0
  1714. 806: 00 40 sbci r16, 0x00 ; 0
  1715. 808: e1 f7 brne .-8 ; 0x802 <main+0x160>
  1716. 80a: 00 c0 rjmp .+0 ; 0x80c <main+0x16a>
  1717. 80c: 00 00 nop
  1718. 80e: 31 50 subi r19, 0x01 ; 1
  1719. s_vSetDisplayDigits( SYM_SEG_A, SYM_SEG_A, SYM_OFF );
  1720. _delay_ms(300);
  1721. s_vSetDisplayDigits( SYM_SEG_A, SYM_SEG_A, SYM_SEG_A );
  1722. _delay_ms(300);
  1723. while ( u8Loop < 5U )
  1724. 810: 09 f0 breq .+2 ; 0x814 <main+0x172>
  1725. 812: 84 cf rjmp .-248 ; 0x71c <main+0x7a>
  1726. /************************************************************************/
  1727. /* Set display digits individually */
  1728. /************************************************************************/
  1729. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1730. {
  1731. g_au8Digits[DIGIT_TENS] = u8Tens;
  1732. 814: e0 e0 ldi r30, 0x00 ; 0
  1733. 816: f1 e0 ldi r31, 0x01 ; 1
  1734. 818: 80 e1 ldi r24, 0x10 ; 16
  1735. 81a: 82 83 std Z+2, r24 ; 0x02
  1736. g_au8Digits[DIGIT_ONES] = u8Ones;
  1737. 81c: 81 83 std Z+1, r24 ; 0x01
  1738. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1739. 81e: 80 83 st Z, r24
  1740. 820: 1f ef ldi r17, 0xFF ; 255
  1741. 822: 2e e9 ldi r18, 0x9E ; 158
  1742. 824: 34 e2 ldi r19, 0x24 ; 36
  1743. 826: 11 50 subi r17, 0x01 ; 1
  1744. 828: 20 40 sbci r18, 0x00 ; 0
  1745. 82a: 30 40 sbci r19, 0x00 ; 0
  1746. 82c: e1 f7 brne .-8 ; 0x826 <main+0x184>
  1747. 82e: 00 c0 rjmp .+0 ; 0x830 <main+0x18e>
  1748. 830: 00 00 nop
  1749. /************************************************************************/
  1750. /* Set display digits individually */
  1751. /************************************************************************/
  1752. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1753. {
  1754. g_au8Digits[DIGIT_TENS] = u8Tens;
  1755. 832: ef 01 movw r28, r30
  1756. 834: 0c e0 ldi r16, 0x0C ; 12
  1757. g_au8Digits[DIGIT_ONES] = u8Ones;
  1758. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1759. 836: 10 e1 ldi r17, 0x10 ; 16
  1760. s_vSetDisplayDigits( SYM_OFF, SYM_OFF, SYM_OFF );
  1761. _delay_ms(600);
  1762. while ( 1 )
  1763. {
  1764. switch ( g_u8Mode )
  1765. 838: 80 91 29 01 lds r24, 0x0129 ; 0x800129 <g_u8Mode>
  1766. 83c: 81 30 cpi r24, 0x01 ; 1
  1767. 83e: b1 f1 breq .+108 ; 0x8ac <main+0x20a>
  1768. 840: 20 f0 brcs .+8 ; 0x84a <main+0x1a8>
  1769. 842: 82 30 cpi r24, 0x02 ; 2
  1770. 844: 09 f4 brne .+2 ; 0x848 <main+0x1a6>
  1771. 846: 40 c0 rjmp .+128 ; 0x8c8 <main+0x226>
  1772. 848: f9 cf rjmp .-14 ; 0x83c <main+0x19a>
  1773. {
  1774. case MODE_MEASURE:
  1775. if ( SENSOR_is_hi )
  1776. 84a: 33 9b sbis 0x06, 3 ; 6
  1777. 84c: 25 c0 rjmp .+74 ; 0x898 <main+0x1f6>
  1778. {
  1779. SENSOR_sda_out;
  1780. 84e: 3b 9a sbi 0x07, 3 ; 7
  1781. SENSOR_sda_low;
  1782. 850: 43 98 cbi 0x08, 3 ; 8
  1783. 852: 4f e7 ldi r20, 0x7F ; 127
  1784. 854: 88 e3 ldi r24, 0x38 ; 56
  1785. 856: 91 e0 ldi r25, 0x01 ; 1
  1786. 858: 41 50 subi r20, 0x01 ; 1
  1787. 85a: 80 40 sbci r24, 0x00 ; 0
  1788. 85c: 90 40 sbci r25, 0x00 ; 0
  1789. 85e: e1 f7 brne .-8 ; 0x858 <main+0x1b6>
  1790. 860: 00 c0 rjmp .+0 ; 0x862 <main+0x1c0>
  1791. 862: 00 00 nop
  1792. _delay_ms(20);
  1793. u8ErrorCode = s_u8ReadSensor();
  1794. 864: 88 de rcall .-752 ; 0x576 <s_u8ReadSensor>
  1795. if ( 0U == u8ErrorCode )
  1796. 866: 81 11 cpse r24, r1
  1797. 868: 10 c0 rjmp .+32 ; 0x88a <main+0x1e8>
  1798. {
  1799. s_vSetValue( g_u16Humidity / 10, SYM_P_P );
  1800. 86a: 20 91 27 01 lds r18, 0x0127 ; 0x800127 <g_u16Humidity>
  1801. 86e: 30 91 28 01 lds r19, 0x0128 ; 0x800128 <g_u16Humidity+0x1>
  1802. 872: ad ec ldi r26, 0xCD ; 205
  1803. 874: bc ec ldi r27, 0xCC ; 204
  1804. 876: 36 d0 rcall .+108 ; 0x8e4 <__umulhisi3>
  1805. 878: 96 95 lsr r25
  1806. 87a: 87 95 ror r24
  1807. 87c: 96 95 lsr r25
  1808. 87e: 87 95 ror r24
  1809. 880: 96 95 lsr r25
  1810. 882: 87 95 ror r24
  1811. 884: 6f e0 ldi r22, 0x0F ; 15
  1812. 886: 0c dc rcall .-2024 ; 0xa0 <s_vSetValue>
  1813. 888: 03 c0 rjmp .+6 ; 0x890 <main+0x1ee>
  1814. /************************************************************************/
  1815. /* Set display digits individually */
  1816. /************************************************************************/
  1817. void s_vSetDisplayDigits( uint8_t u8Tens, uint8_t u8Ones, uint8_t u8Unit )
  1818. {
  1819. g_au8Digits[DIGIT_TENS] = u8Tens;
  1820. 88a: 0a 83 std Y+2, r16 ; 0x02
  1821. g_au8Digits[DIGIT_ONES] = u8Ones;
  1822. 88c: 89 83 std Y+1, r24 ; 0x01
  1823. g_au8Digits[DIGIT_UNIT] = u8Unit;
  1824. 88e: 18 83 st Y, r17
  1825. else
  1826. {
  1827. s_vSetDisplayDigits( SYM_E, u8ErrorCode, SYM_OFF );
  1828. }
  1829. }
  1830. if ( g_u8Mode == MODE_MEASURE )
  1831. 890: 80 91 29 01 lds r24, 0x0129 ; 0x800129 <g_u8Mode>
  1832. 894: 81 11 cpse r24, r1
  1833. 896: d0 cf rjmp .-96 ; 0x838 <main+0x196>
  1834. 898: af e7 ldi r26, 0x7F ; 127
  1835. 89a: b4 e8 ldi r27, 0x84 ; 132
  1836. 89c: 2e e1 ldi r18, 0x1E ; 30
  1837. 89e: a1 50 subi r26, 0x01 ; 1
  1838. 8a0: b0 40 sbci r27, 0x00 ; 0
  1839. 8a2: 20 40 sbci r18, 0x00 ; 0
  1840. 8a4: e1 f7 brne .-8 ; 0x89e <main+0x1fc>
  1841. 8a6: 00 c0 rjmp .+0 ; 0x8a8 <main+0x206>
  1842. 8a8: 00 00 nop
  1843. 8aa: c6 cf rjmp .-116 ; 0x838 <main+0x196>
  1844. {
  1845. _delay_ms(500);
  1846. }
  1847. break;
  1848. case MODE_ANIMATION_1:
  1849. s_vShowAnim(g_u8Mode);
  1850. 8ac: 81 e0 ldi r24, 0x01 ; 1
  1851. 8ae: 7d dc rcall .-1798 ; 0x1aa <s_vShowAnim>
  1852. g_u8Mode = MODE_MEASURE;
  1853. 8b0: 10 92 29 01 sts 0x0129, r1 ; 0x800129 <g_u8Mode>
  1854. 8b4: 3f ef ldi r19, 0xFF ; 255
  1855. 8b6: 44 e3 ldi r20, 0x34 ; 52
  1856. 8b8: 8c e0 ldi r24, 0x0C ; 12
  1857. 8ba: 31 50 subi r19, 0x01 ; 1
  1858. 8bc: 40 40 sbci r20, 0x00 ; 0
  1859. 8be: 80 40 sbci r24, 0x00 ; 0
  1860. 8c0: e1 f7 brne .-8 ; 0x8ba <main+0x218>
  1861. 8c2: 00 c0 rjmp .+0 ; 0x8c4 <main+0x222>
  1862. 8c4: 00 00 nop
  1863. 8c6: b8 cf rjmp .-144 ; 0x838 <main+0x196>
  1864. _delay_ms(200);
  1865. break;
  1866. case MODE_ANIMATION_2:
  1867. s_vShowAnim(g_u8Mode);
  1868. 8c8: 82 e0 ldi r24, 0x02 ; 2
  1869. 8ca: 6f dc rcall .-1826 ; 0x1aa <s_vShowAnim>
  1870. g_u8Mode = MODE_MEASURE;
  1871. 8cc: 10 92 29 01 sts 0x0129, r1 ; 0x800129 <g_u8Mode>
  1872. 8d0: 9f ef ldi r25, 0xFF ; 255
  1873. 8d2: a4 e3 ldi r26, 0x34 ; 52
  1874. 8d4: bc e0 ldi r27, 0x0C ; 12
  1875. 8d6: 91 50 subi r25, 0x01 ; 1
  1876. 8d8: a0 40 sbci r26, 0x00 ; 0
  1877. 8da: b0 40 sbci r27, 0x00 ; 0
  1878. 8dc: e1 f7 brne .-8 ; 0x8d6 <main+0x234>
  1879. 8de: 00 c0 rjmp .+0 ; 0x8e0 <main+0x23e>
  1880. 8e0: 00 00 nop
  1881. 8e2: aa cf rjmp .-172 ; 0x838 <main+0x196>
  1882. 000008e4 <__umulhisi3>:
  1883. 8e4: a2 9f mul r26, r18
  1884. 8e6: b0 01 movw r22, r0
  1885. 8e8: b3 9f mul r27, r19
  1886. 8ea: c0 01 movw r24, r0
  1887. 8ec: a3 9f mul r26, r19
  1888. 8ee: 01 d0 rcall .+2 ; 0x8f2 <__umulhisi3+0xe>
  1889. 8f0: b2 9f mul r27, r18
  1890. 8f2: 70 0d add r23, r0
  1891. 8f4: 81 1d adc r24, r1
  1892. 8f6: 11 24 eor r1, r1
  1893. 8f8: 91 1d adc r25, r1
  1894. 8fa: 08 95 ret
  1895. 000008fc <_exit>:
  1896. 8fc: f8 94 cli
  1897. 000008fe <__stop_program>:
  1898. 8fe: ff cf rjmp .-2 ; 0x8fe <__stop_program>