Lo primero que se me ocurre es que preguntes siempre por el valor del conversor AD, lo comparas con 0x0000 y de esta forma si no hay pulso la conversión será 0x0000, y si existe un pulso entonces lo tratas en el caso contrario. Ejemplo:
if(read_adc() == 0x0000) // ojo , sintaxis de ejemplo no necesariamente correcta
{
asm("nop");
}
else
tratamiento_pulso();
debido a que las conversiones son tan rapidas, no creo que llegue el pulso y el micro este haciendo otra cosa.... todo depende de con que rapidez o frecuencia llegue un pulso acústico.