piccola aggiunta od alternativa a quanto suggerito da g.mosfet:
Il TMR0 deve essere settato in free-running con clock di 1...5us, (in modalità a 16 bit se possibile), a seconda della risoluzione che vuoi ottenere nel misurare la durata dell'impulso (da 250 a 1000 step).
L'ingresso degli impulsi va messo sulla porta RB0 e va abilitato l'interrupt sul fronte di salita della stessa.
Appena arriva un impulso, nella routine di interrupt della RB0 leggi il valore del timer e lo salvi in una variabile, poi inverti il fronte dell'interrupt.
Quando arriva il fronte di discesa sottrai al nuovo valore del timer il vecchio salvato e così hai direttamente la durata dell'impulso, poi ricommuti l'interrupt sul fronte di salita
Ora hai circa 18 ms liberi per far fare tutto quello che vuoi al PIC.
Usando sempre il TMR0 potresti creare impulsi in uscita a Ton variabile sincroni con quello di ingresso.
Un consiglio, le routine di interrupt scrivile in assembler o se il compilatore lo permette scrivendo direttamente nei registri del PIC senza usare librerie che talune volte sono di dubbia efficienza.