gracias por las respuestas
pues he intentado hacer pruebas con interrupciones pero no las entiendo.
investigare acerca de estas y veré si hacen lo que necesito.
se me ocurre algo como esto.
i=0;
// Repetir el ciclo mientras no hayan pasado 4 mili segundos
for(i=0;i<=4000;i++)) //repetimos hasta completar 4000*1us=4ms
{ delay_us(1);
tu_codigo();
}
analizando el código miro que el ciclo puede funcionar, pero me tocaría contar el tiempo en que ejecuta las instrucciones dentro del ciclo para descontársela al "i<=4000" y que quede para 4ms, obviamente no tiene que ser preciso con una tolerancia del 10% me bastaría.
pero detodas formar lo ensayare talvez la solucion sea asi de sensilla.