Primero que nada, gracias por responder..
Segundo, lo lei entero, no nombras los SRF 04/05.
De todos modos, creo que ya se como hacerlo, hice algo parecido a:
Habilito interrupcion por desbordamiento del TMR0.
El tmr0 hago que desborde en X tiempo, depende la distancia de medicion, por ejemplo:
Si quiero que el rango maximo sea de 1 metro y medio, debe desbordar aproximadamente a los 10 mS.
Por ende, hice algo parecido a esto(son 4 sensores q uso):
;Una vez enviado el disparo, al ponerse a 1 los 4 sensores, hago lo siguiente:
movlw b'00000111'
movwf OPTION,REG ; Habilito el PREESCALER 256 para el TMR0.
movlw b'1010000' ; Habilito INT Global y por Desbordmaiento del T0.
movwf TMR0
;Aqui irian las instruccions que cargan al TMR0 con los 10ms, las obvie porque no vienen al caso.
ESPERA
btfss SRF_1 ;Esta en 1, Es decir, aun no detecto?
goto detecto_1 ;Es 0, por ende, detecot antes de 10 ms, ergo, hay algo delante de el.
btfss SRF_2
goto detecto_2
btfss SRF_3
goto detecto_3
btfss SRF_4
goto detecto_4
goto ESPERA
;Supongamos que siempre sigue en ese bucle, entonces ninguno detecto, porque todos siguen en estado Alto. AL pasar los 10 ms,
;el TMR0 desborda, ocasinando asi la interrupcion que tiene este codigo:
ServicioInterrupcion
bcf INTCON,5 ;Desactiva interrupcionn por TImer 0
retfie
;Notese que NO limpie el flag T0IF, por el siguiente motivo: AL regresar, seguira sensando los SRF, porque seguramente se interrumpio en medio
;Entonces, lo que hago es, al volover, eguramente el primero que analiza, lo manda al: detecto_x, y la primer instruccion en cada uno de estos, sera
;la que analize si este flag esta activo. De ser asi, interpretara que el programa esta ahi, pese a que NO detecto nada el SRF, y lo enviara a la siguiente parte del programa, evitando asi una reaccion antes un objeto inexistente. Luego, se limpia el flag T0IF.
Espero que se haya entendido mi planteo, de no ser asi, preguntar y lo aclaro.