Tempos de amostragem causando "delays"

Pessoal!
Tenho uma aplicação que utiliza o protocolo Modbus para transmitir seus dados para um concentrador de dados, até ai funcionando bem, consigo ler e escrever bobinas e variáveis . Contudo, meu concentrador está derrubando a comunicação com o escravo por time out e tenho certeza que é meu método de leitura do adc... Leio 4 sinais com o adc e depois os disponibilizo em um buffer, mas essas leituras estão me gerando "delay's" dentro da rotina de Modbus.....
Minha função de leitura.
Não seria possível fazer por interrupção? Por exemplo dou set em um bit para iniciar a a amostragem e quando concluída tenho uma interrupção com a resposta da conversão?
Tenho uma aplicação que utiliza o protocolo Modbus para transmitir seus dados para um concentrador de dados, até ai funcionando bem, consigo ler e escrever bobinas e variáveis . Contudo, meu concentrador está derrubando a comunicação com o escravo por time out e tenho certeza que é meu método de leitura do adc... Leio 4 sinais com o adc e depois os disponibilizo em um buffer, mas essas leituras estão me gerando "delay's" dentro da rotina de Modbus.....
Minha função de leitura.
- Código: Selecionar todos
ADCON1.F1 = 1; //Start sampling (SAMP=1)
Delay_ms(100); //Wait for 100ms (sampling ...)
ADCON1.F1 = 0; //Clear SAMP bit (trigger conversion)
while (ADCON1.F0 == 0)
return ADCBUF0;
Não seria possível fazer por interrupção? Por exemplo dou set em um bit para iniciar a a amostragem e quando concluída tenho uma interrupção com a resposta da conversão?