Many changes from 2018
[owSlave2.git] / common / OWDS2450_DS2423.S
1 \r
2 // Copyright (c) 2018, Tobias Mueller tm(at)tm3d.de\r
3 // All rights reserved. \r
4 // \r
5 // Redistribution and use in source and binary forms, with or without \r
6 // modification, are permitted provided that the following conditions are \r
7 // met: \r
8 // \r
9 //  * Redistributions of source code must retain the above copyright \r
10 //    notice, this list of conditions and the following disclaimer. \r
11 //  * Redistributions in binary form must reproduce the above copyright \r
12 //    notice, this list of conditions and the following disclaimer in the \r
13 //    documentation and/or other materials provided with the \r
14 //    distribution. \r
15 //  * All advertising materials mentioning features or use of this \r
16 //    software must display the following acknowledgement: This product \r
17 //    includes software developed by tm3d.de and its contributors. \r
18 //  * Neither the name of tm3d.de nor the names of its contributors may \r
19 //    be used to endorse or promote products derived from this software \r
20 //    without specific prior written permission. \r
21 // \r
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR \r
25 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
26 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
27 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
28 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, \r
29 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY \r
30 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
31 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
32 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \r
33 \r
34 #define _CHANGEABLE_ID_\r
35 #define _ZERO_POLLING_\r
36 \r
37 #include "../common/OWConfig.s"\r
38 #include "../common/OWCRC16.s"\r
39 \r
40 .extern pack1,20\r
41 .extern pack2,45\r
42 .extern counters2,16\r
43 //Bleiben gleich denn es werden nicht beide gleichzeitig abgefragt\r
44 .comm addr,1 ;zweites Adressbyte ist unnoetig (Warum auch immer fuer 32 Byte 16 Bit Adressen verwendet werden....)\r
45 .comm crcsave,1 ; zwischenspeicherspeicher fuer crc nur zweites byte....\r
46 //.extern  am2302_temp,2\r
47 \r
48 .comm gcontrol1,1\r
49 .comm gcontrol2,1\r
50 \r
51 .macro CHIP_INIT        \r
52 .endm\r
53 \r
54 .macro COMMAND_TABLE\r
55                 rjmp h_readmemoryaddr1\r
56                 rjmp h_readmemory1\r
57                 rjmp h_readmemorycrc11\r
58                 rjmp h_readmemorycrc21\r
59                 rjmp h_writememoryaddr1\r
60                 rjmp h_writememory1\r
61                 rjmp h_writememorycrc11\r
62                 rjmp h_writememorycrc21\r
63                 rjmp h_writememoryreadback1\r
64                 rjmp h_convert1\r
65                 rjmp h_convertcrc11\r
66                 rjmp h_convertcrc21\r
67                 rjmp h_convert_conv1\r
68 \r
69                 rjmp h_writescratchpad2\r
70                 rjmp h_writescratchpad_crc2\r
71                 rjmp h_readscratchpad2\r
72                 rjmp h_copyscratchpad2\r
73                 rjmp h_readmemory_addr2\r
74                 rjmp h_readmemory2\r
75                 rjmp h_readmemorycounter_addr2\r
76                 rjmp h_readmemorycounter2\r
77                 rjmp h_readmemorycounter_ex2\r
78 .endm\r
79 \r
80 #include "../common/OWRomFunctionsDual.s"\r
81 #include "../common/OWTimerInterrupt.s"\r
82 \r
83 \r
84 \r
85 ; Ab hier Geraeteabhaenging\r
86 #define OW_READ_MEMORY_ADDR1 OW_FIRST_COMMAND+0\r
87 #define OW_READ_MEMORY1 OW_FIRST_COMMAND+1\r
88 #define OW_READ_MEMORY_CRC11 OW_FIRST_COMMAND+2\r
89 #define OW_READ_MEMORY_CRC21 OW_FIRST_COMMAND+3\r
90 #define OW_WRITE_MEMORY_ADDR1 OW_FIRST_COMMAND+4\r
91 #define OW_WRITE_MEMORY1 OW_FIRST_COMMAND+5\r
92 #define OW_WRITE_MEMORY_CRC11 OW_FIRST_COMMAND+6\r
93 #define OW_WRITE_MEMORY_CRC21 OW_FIRST_COMMAND+7\r
94 #define OW_WRITE_MEMORY_READBACK1 OW_FIRST_COMMAND+8\r
95 #define OW_CONVERT1 OW_FIRST_COMMAND+9\r
96 #define OW_CONVERT_CRC11 OW_FIRST_COMMAND+10\r
97 #define OW_CONVERT_CRC21 OW_FIRST_COMMAND+11\r
98 #define OW_CONVERT_CONV1 OW_FIRST_COMMAND+12\r
99 \r
100 #define OW_WRITE_SCRATCHPAD2 OW_FIRST_COMMAND+13\r
101 #define OW_WRITE_SCRATCHPAD_CRC2 OW_FIRST_COMMAND+14\r
102 #define OW_READ_SCRATCHPAD2 OW_FIRST_COMMAND+15\r
103 #define OW_COPY_SCRATCHPAD2 OW_FIRST_COMMAND+16\r
104 #define OW_READ_MEMORY_ADDR2 OW_FIRST_COMMAND+17\r
105 #define OW_READ_MEMORY2 OW_FIRST_COMMAND+18\r
106 #define OW_READ_MEMORYCOUNTER_ADDR2 OW_FIRST_COMMAND+19\r
107 #define OW_READ_MEMORYCOUNTER2 OW_FIRST_COMMAND+20\r
108 #define OW_READ_MEMORYCOUNTER_EX2 OW_FIRST_COMMAND+21\r
109 \r
110 \r
111 \r
112 ;---------------------------------------------------\r
113 ;       READ COMMAND and start operation\r
114 ;---------------------------------------------------\r
115 \r
116 \r
117 h_readcommand1:\r
118         clr r_bytep\r
119 #ifndef _DIS_FLASH_\r
120         FLASH_COMMANDS ; muss zu erst sein....\r
121 #endif\r
122         cset 0xAA,OW_READ_MEMORY_ADDR1\r
123         cset 0x55,OW_WRITE_MEMORY_ADDR1\r
124         cset 0x3C,OW_CONVERT1\r
125         FW_CONFIG_INFO1\r
126 #ifdef _CHANGEABLE_ID_\r
127         CHANGE_ID_COMMANDS\r
128 #endif\r
129         ldi r_mode,OW_SLEEP\r
130         rjmp handle_end\r
131 \r
132 \r
133 h_readmemoryaddr1:\r
134         cpi r_bytep,0  ;erstes Adressbyte ?\r
135         brne h_readmemory_addr_byte11 ;nein dann weiter\r
136         andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen\r
137         sts addr,r_rwbyte  ;speichern des ersten bytes\r
138         rjmp handle_end_inc\r
139 h_readmemory_addr_byte11:  ;zweiters Addressbyte wird nicht gespeichert!\r
140         ldi r_mode,OW_READ_MEMORY1 ;weiter zu read Memory\r
141         ;;ldi r_bcount,1 ;ist unten\r
142         ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
143         clr r_bytep\r
144         rjmp h_readmemory21\r
145 h_readmemory1:\r
146         lds r_bytep,addr\r
147         inc r_bytep\r
148         sts addr,r_bytep\r
149         andi r_bytep,0x07\r
150         breq h_readmemory_init_crc1\r
151 h_readmemory21:\r
152         lds r_bytep,addr\r
153         ;andi r_bytep,0x1F ist oben\r
154         configZ pack1,r_bytep\r
155         ld   r_rwbyte,Z\r
156         ;ldi r_bcount,1\r
157         rjmp handle_end ;sendet das Byte und geht zu h_readmemory\r
158 h_readmemory_init_crc1:; init erstes CRC byte\r
159         lds r_rwbyte,crc\r
160         com r_rwbyte\r
161         lds r_temp,crc+1\r
162         com r_temp\r
163         sts crcsave,r_temp\r
164         ldi r_mode,OW_READ_MEMORY_CRC11\r
165         ;ldi r_bcount,1\r
166         rjmp handle_end\r
167 h_readmemory_end1:\r
168         ldi  r_mode,OW_SLEEP\r
169         clr r_sendflag\r
170         rjmp handle_end\r
171 h_readmemorycrc11:;init zweites CRC Byte\r
172         lds r_rwbyte,crcsave\r
173         ;ldi r_bcount,1\r
174         ldi r_mode,OW_READ_MEMORY_CRC21\r
175         rjmp handle_end\r
176 h_readmemorycrc21:;weiteres senden..... nach zweitem Byte\r
177         lds r_temp,addr\r
178         andi r_temp,0xE0\r
179         brne h_readmemory_end1; ende des speichers\r
180         ldi r_mode,OW_READ_MEMORY1\r
181         CRCInit1 ;Start with new CRC\r
182         rjmp h_readmemory21\r
183 \r
184 h_writememoryaddr1:\r
185         cpi r_bytep,0  ;erstes Adressbyte ?\r
186         brne h_writememory_addr_byte11 ;nein dann weiter\r
187         andi r_rwbyte,0x1F  ; nur Adressen zwischen 0 und 0x1F zulassen\r
188         sts addr,r_rwbyte  ;speichern des ersten bytes\r
189         inc r_bytep\r
190         ;ldi r_bcount,1\r
191         rjmp handle_end\r
192 h_writememory_addr_byte11:  ;zweiters Addressbyte wird nicht gespeichert!\r
193         ldi r_mode,OW_WRITE_MEMORY1 ;weiter zu read Memory\r
194         ;ldi r_bcount,1 ;; _________________________________________________in handle_end integrieren.....\r
195         lds r_bytep,addr\r
196         rjmp handle_end ;read Memory Byte\r
197 h_writememory1:\r
198         lds r_bytep,addr\r
199         configZ pack1,r_bytep\r
200         st Z,r_rwbyte\r
201         ;ldi r_bcount,1\r
202         ldi r_mode,OW_WRITE_MEMORY_CRC11\r
203         ldi r_sendflag,1 ;jetzt sendet der Slave zum Master\r
204         lds r_rwbyte,crc\r
205         com r_rwbyte\r
206         lds r_temp,crc+1\r
207         com r_temp\r
208         sts crcsave,r_temp\r
209         rjmp handle_end\r
210 h_writememorycrc11:\r
211         lds r_rwbyte,crcsave\r
212         ;ldi r_bcount,1\r
213         ldi r_mode,OW_WRITE_MEMORY_CRC21\r
214         rjmp handle_end\r
215 h_writememorycrc21:\r
216         lds r_temp,addr\r
217         configZ pack1,r_temp\r
218         ld r_rwbyte,Z\r
219         ;ldi r_bcount,1\r
220         ldi r_mode,OW_WRITE_MEMORY_READBACK1\r
221         rjmp handle_end\r
222 h_writememoryreadback1:\r
223         ldi r_temp,0x00\r
224         sts crc+1,r_temp\r
225         lds r_temp,addr\r
226         inc r_temp\r
227         sts addr,r_temp\r
228         sts crc,r_temp\r
229         ldi r_sendflag,0\r
230         ;ldi r_bcount,1\r
231         ldi r_mode,OW_WRITE_MEMORY1\r
232         rjmp handle_end\r
233 \r
234 h_convert1:\r
235         cpi r_bytep,0  ;erstes Adressbyte ?\r
236         brne h_convert_byte11 ;nein dann weiter\r
237         inc r_bytep\r
238         sts pack1+0x20,r_rwbyte\r
239         ;ldi r_bcount,1\r
240         rjmp handle_end\r
241 h_convert_byte11: ;zweies byte glesen go crc#\r
242         sts pack1+0x21,r_rwbyte\r
243         lds r_rwbyte,crc\r
244         com r_rwbyte\r
245         lds r_temp,crc+1\r
246         com r_temp\r
247         sts crcsave,r_temp\r
248         ldi r_mode,OW_CONVERT_CRC11\r
249         ;ldi r_bcount,1\r
250         ldi r_sendflag,1\r
251         rjmp handle_end \r
252 h_convertcrc11:\r
253         lds r_rwbyte,crcsave\r
254         ;ldi r_bcount,1\r
255         ldi r_mode,OW_CONVERT_CRC21\r
256         rjmp handle_end\r
257 h_convertcrc21:\r
258         ldi r_temp,1\r
259         sts gcontrol1,r_temp\r
260         ;ldi r_bcount,1\r
261         ldi r_mode,OW_CONVERT_CONV1\r
262         ;clr r_sendflag\r
263         ldi r_sendflag,3 ;set bit 0 and 1 for no zero polling\r
264 h_convert_conv1:\r
265         ldi r_bcount,0\r
266         ldi r_rwbyte,0\r
267         rjmp handle_end_no_bcount\r
268 \r
269 /////////////////////////////////////////////////////////////////////\r
270 \r
271 \r
272 \r
273 ;*****************************************************************************************************************************************************************************************\r
274 ;*****************************************************************************************************************************************************************************************\r
275 ;*****************************************************************************************************************************************************************************************\r
276 ;*****************************************************************************************************************************************************************************************\r
277 ;*****************************************************************************************************************************************************************************************\r
278 \r
279 \r
280 \r
281 \r
282 h_readcommand2:\r
283         clr r_bytep\r
284 #ifndef _DIS_FLASH_\r
285         FLASH_COMMANDS ; muss zu erst sein....\r
286 #endif\r
287         cset 0x0F,OW_WRITE_SCRATCHPAD2\r
288         cjmp 0xAA,hrc_set_readscratchpad2\r
289         cset 0x5A,OW_COPY_SCRATCHPAD2\r
290         cset 0xF0,OW_READ_MEMORY_ADDR2\r
291         cset 0xA5,OW_READ_MEMORYCOUNTER_ADDR2\r
292         FW_CONFIG_INFO2\r
293 #ifdef _CHANGEABLE_ID_\r
294         CHANGE_ID_COMMANDS\r
295 #endif\r
296         ldi r_mode,OW_SLEEP\r
297         rjmp handle_end\r
298 \r
299 hrc_set_readscratchpad2:\r
300         ldi r_mode,OW_READ_SCRATCHPAD2\r
301         ldi r_sendflag,1\r
302         rjmp h_readscratchpad2\r
303 \r
304 h_writescratchpad2:\r
305         configZ pack2,r_bytep\r
306         inc  r_bytep\r
307         st   Z,r_rwbyte\r
308         cpi  r_bytep,2\r
309         breq h_writescratchpad_block2\r
310         brsh h_writescratchpad_set_eoffset2 ;;33\r
311         rjmp handle_end  ;handle_end zu weit entfernt fuer br...\r
312 h_writescratchpad_set_eoffset2:\r
313         cpi  r_bytep,35\r
314         breq h_writescratchpad_setcrc2\r
315         mov r_temp,r_bytep\r
316         subi r_temp,4\r
317         sts pack2+2,r_temp ;AA und PF cleared\r
318         rjmp handle_end\r
319 ;Start writeing to 32 Byte Block ; skip status byte     \r
320 h_writescratchpad_block2:\r
321         lds r_temp,pack2 ; Adresse low byte\r
322         andi r_temp,0x1F ;32 byte\r
323         add r_bytep,r_temp ;Zur angegebenen Startadresse springen\r
324         ;ori r_temp,0x20 ; Set PF flag\r
325         sts pack2+2,r_temp  ;E4:E0 vorher setzen\r
326         ; Byte 3 ueberspringen\r
327         rjmp handle_end_inc\r
328 \r
329 h_writescratchpad_setcrc2:\r
330         ;copy crc to pack2\r
331         lds r_temp,crc\r
332         com r_temp\r
333         sts pack2+43,r_temp\r
334         lds r_temp,crc+1\r
335         com r_temp ; invertieren , komischer name.....\r
336         sts pack2+44,r_temp\r
337         ldi  r_mode,OW_WRITE_SCRATCHPAD_CRC2\r
338         ldi r_sendflag,1\r
339         ldi r_bytep,43\r
340 h_writescratchpad_crc2:\r
341         cpi r_bytep,45\r
342         breq h_writescratchpad_crc_end2\r
343         configZ pack2,r_bytep\r
344         ld r_rwbyte,Z\r
345         rjmp handle_end_inc\r
346 h_writescratchpad_crc_end2:\r
347         rjmp handle_end_sleep\r
348         \r
349         \r
350 h_readscratchpad2:\r
351         cpi r_bytep,35\r
352         breq h_readscratchpad_end2\r
353         cpi r_bytep,3\r
354         brne h_readscratchpad_read_byte2\r
355 h_readscratchpad_set_offset2:\r
356         lds r_temp,pack2\r
357         andi r_temp,0x1F\r
358         ldi r_temp2,3\r
359         add r_temp,r_temp2\r
360         mov r_bytep,r_temp\r
361 h_readscratchpad_read_byte2:\r
362         configZ pack2,r_bytep\r
363         ld r_rwbyte,Z\r
364         rjmp handle_end_inc\r
365 h_readscratchpad_end2:\r
366         rjmp handle_end_sleep\r
367 \r
368 \r
369 \r
370 h_copyscratchpad2:\r
371         cpi  r_bytep,3\r
372         brsh h_copyscratchpad_ok2\r
373         configZ pack2,r_bytep\r
374         inc  r_bytep\r
375         ld   r_temp,Z\r
376         cp r_temp,r_rwbyte\r
377         brne h_copyscratchpad_nok2\r
378         cpi  r_bytep,3\r
379         breq h_copyscratchpad_ok2\r
380         ldi  r_bcount,1 \r
381         rjmp handle_end\r
382 h_copyscratchpad_ok2:\r
383         ldi r_rwbyte,0xAA\r
384         ldi r_sendflag,1\r
385         ldi r_temp,1\r
386         sts gcontrol2,r_temp\r
387         rjmp handle_end\r
388 h_copyscratchpad_nok2:\r
389         lds r_temp,pack2+3\r
390         andi r_temp,~0x80\r
391         sts pack2+3,r_temp\r
392         rjmp handle_end_sleep\r
393 \r
394 \r
395 h_readmemory_addr2:\r
396         cpi r_bytep,0\r
397         brne h_readmrmory_addr_byte12\r
398         sts pack2,r_rwbyte\r
399         rjmp handle_end_inc\r
400 h_readmrmory_addr_byte12:\r
401         sts pack2+1,r_rwbyte\r
402         ldi r_mode,OW_READ_MEMORY2\r
403         ldi r_sendflag,1\r
404         clr r_bytep\r
405         rjmp h_readmemory22\r
406 h_readmemory2:\r
407         lds r_bytep,pack2\r
408         lds r_temp2,pack2+1\r
409         inc r_bytep\r
410         clr r_temp\r
411         adc r_temp2,r_temp\r
412         sbrc r_temp2,1\r
413         rjmp h_readmemory_end2\r
414         sts pack2+1,r_temp2\r
415         sts pack2,r_bytep\r
416 h_readmemory22:\r
417         ldi  zl,lo8(pack2+45)       \r
418     ldi  zh,hi8(pack2+45)\r
419         lds r_bytep,pack2\r
420         add  zl,r_bytep\r
421         lds r_bytep,pack2+1\r
422         adc zh,r_bytep\r
423         //configZ pack2+3,r_bytep\r
424         ld   r_rwbyte,Z\r
425         rjmp handle_end\r
426 h_readmemory_end2:\r
427         rjmp handle_end_sleep\r
428 \r
429 \r
430 \r
431 \r
432 \r
433 \r
434 \r
435 \r
436 h_readmemorycounter_addr2:\r
437         cpi r_bytep,0\r
438         brne h_readmrmorycounter_addr_byte12\r
439         sts pack2,r_rwbyte\r
440         inc r_bytep\r
441         ;ldi r_bcount,1\r
442         rjmp handle_end\r
443 h_readmrmorycounter_addr_byte12:\r
444         sts pack2+1,r_rwbyte\r
445         ldi r_mode,OW_READ_MEMORYCOUNTER2\r
446         ;ldi r_bcount,1 \r
447         ldi r_sendflag,1\r
448         clr r_bytep\r
449         rjmp h_readmemorycounter22\r
450 h_readmemorycounter2:\r
451         lds r_bytep,pack2\r
452         lds r_temp2,pack2+1\r
453         ldi r_temp,1  ;inc leider kein c flag\r
454         add r_bytep,r_temp\r
455         clr r_temp\r
456         adc r_temp2,r_temp\r
457         mov r_temp,r_bytep\r
458         andi r_temp,0x1F\r
459         breq h_readmemorycounter_next2\r
460         sts pack2+1,r_temp2\r
461         sts pack2,r_bytep\r
462 h_readmemorycounter22:  ;Lesen von dem worauf die erstenzwei bytes zeigen\r
463         lds r_bytep,pack2\r
464         andi r_bytep,0x1F\r
465         configZ pack2+3,r_bytep\r
466         ld   r_rwbyte,Z\r
467         ;ldi r_bcount,1\r
468         rjmp handle_end\r
469 //h_readmemorycounter_end:\r
470 //      ldi  r_mode,OW_SLEEP\r
471 //      clr r_sendflag\r
472 //      rjmp handle_end\r
473 h_readmemorycounter_next2:  ; rest lesen\r
474         ldi  r_mode,OW_READ_MEMORYCOUNTER_EX2\r
475         ldi r_bytep,34\r
476         lds r_temp2,pack2\r
477         lds r_temp,pack2+1\r
478         //lsr r_temp\r
479         //ror r_temp2\r
480 \r
481         lsl r_temp2\r
482         rol r_temp\r
483         cpi r_temp,3\r
484         brne h_readmemorycounter_cFF2\r
485         andi r_temp2,0xC0\r
486         swap r_temp2\r
487 \r
488         ;cpi r_temp,0xE0\r
489 \r
490         configZ counters2,r_temp2\r
491         ld r_temp,Z+\r
492         sts pack2+35,r_temp     \r
493         ld r_temp,Z+\r
494         sts pack2+36,r_temp     \r
495         ld r_temp,Z+\r
496         sts pack2+37,r_temp     \r
497         ld r_temp,Z+\r
498         sts pack2+38,r_temp     \r
499         rjmp h_readmemorycounter_ex2\r
500 h_readmemorycounter_cFF2:\r
501         ldi r_temp,0xFF\r
502         sts pack2+35,r_temp     \r
503         sts pack2+36,r_temp     \r
504         sts pack2+37,r_temp     \r
505         sts pack2+38,r_temp     \r
506 \r
507 h_readmemorycounter_ex2:\r
508         inc r_bytep\r
509         cpi r_bytep,45\r
510         breq h_readmemorycounter_ex_end2\r
511         cpi r_bytep,43\r
512         brne h_readmemorycounter_ex22\r
513         lds r_temp,crc\r
514         com r_temp\r
515         sts pack2+43,r_temp\r
516         lds r_temp,crc+1\r
517         com r_temp\r
518         sts pack2+44,r_temp\r
519 h_readmemorycounter_ex22:\r
520         ;ldi r_bcount,1\r
521         configZ pack2,r_bytep\r
522         ld   r_rwbyte,Z\r
523         rjmp handle_end\r
524 h_readmemorycounter_ex_end2:\r
525         lds r_bytep,pack2\r
526         lds r_temp2,pack2+1\r
527         ldi r_temp,1  ;inc leider kein c flag\r
528         add r_bytep,r_temp\r
529         clr r_temp\r
530         adc r_temp2,r_temp\r
531         sbrc r_temp2,1 ;am ene von allem \r
532         rjmp h_readmemorycounter_ex_sleep2\r
533         CRCInit1\r
534         ldi  r_mode,OW_READ_MEMORYCOUNTER2\r
535         sts pack2+1,r_temp2\r
536         sts pack2,r_bytep\r
537         rjmp h_readmemorycounter22\r
538 h_readmemorycounter_ex_sleep2:\r
539         ldi r_mode,OW_SLEEP\r
540         clr r_sendflag\r
541         rjmp handle_end\r
542 \r
543 \r
544 \r
545 \r
546 \r
547 #include "../common/OWPinInterrupt.s"\r
548 .end