;Weitere Register sichern
push r_temp2
push r_temp
+ sdb
; Wegen Power Down Mode Widerherstellen der fallenden Flanke und disable von POWER DONW
SET_FALLING_RESET_SLEEP
push r_bcount
rjmp zeropolling
rjmp no_zerromaker
zeropolling:
+ sbrc r_sendflag,1 ; sendflag bit 1 -> switch off zeropolling in software eg for asking convert is donne (DS2450, DS18B20 and others)
+ rjmp no_zerromaker
+zeropolling_h_loop:
sbic OW_PIN,OW_PINN ;warten bis leitung wieder h
rjmp zeropolling_wait ;leitung ist low ->Schleie
in r_temp,TCNT_REG
- cpi r_temp,(~OWT_MIN_RESET)+50;aller zwei us zaehlt der timer
+ cpi r_temp,(~OWT_MIN_RESET)+OWT_ZP_WAIT_LOW_TO;aller zwei us zaehlt der timer
brsh zeropolling_timeout ;Timeout Reset?
- rjmp zeropolling
+ rjmp zeropolling_h_loop
zeropolling_wait:
sbis OW_PIN,OW_PINN ;warten bis leitung wieder l
rjmp zeropolling_low_imp ;Leitung ist low raus aus schleufe
in r_temp,TCNT_REG
- cpi r_temp,(~OWT_MIN_RESET)+70 ;aller zwei us zaehlt der timer
- brsh zeropolling_timeout ;Timeout
- rjmp zeropolling_wait
+ cpi r_temp,(~OWT_MIN_RESET)+OWT_ZP_WAIT_HIGH_TO ;aller zwei us zaehlt der timer
+ sbis OW_PIN,OW_PINN ;noch eine Abfrage, da sonst schleife zu lang (sbis aendert keine flags)
+ rjmp zeropolling_low_imp ;Leitung ist low raus aus schleufe
+ brlo zeropolling_wait
+ rjmp zeropolling_timeout
zeropolling_low_imp:
sbi OW_DDR,OW_PINN
RESETZEROMARKER
sts sendflag,r_sendflag
sts bcount,r_bcount
sts rwbyte,r_rwbyte
- //cdb
pop r_sendflag
pop r_rwbyte
pop r_bcount
pop r_temp
+ cdb
cbi OW_DDR,OW_PINN ;vorsichtsmassname Nicht dauerhaft auf low
pop r_temp2 //; die benutzten Register wiederherstellen
out _SFR_IO_ADDR(SREG),r_temp2