Boa noite!!
Estou desenvolvendo um projeto no MikroC em que a entrada é lida pela função ADC_Read, conforme a variação, a saída se comporta de uma maneira diferente. Porém, em um dos casos eu necessito inserir um delay para que haja um atraso na execução da função. Mas inserindo a função "delay_ms(200)" o meu programa acaba ficando bloqueado durante o período e eu necessito que dependendo da minha leitura, execute a próxima função ignorando esse delay.
Ou seja, alguém pode me ajudar em alguma outra função para que eu consiga retardar a execução??
Caso não, estou colando abaixo o que eu fiz utilizando o Timer0, que deveria ter prioridade sobre o delay, mas não está funcionado.
Alguém pode me ajudar??
#define solenoide GPIO.F1
int pedal = 0;
void interrupt() // vetor de interrupção
{
if(T0IF_bit) //Houve estouro do Timer0?
{
T0IF_bit = 0x00; //Limpa a flag
TMR0 = 0x00; //Reinicia o timer0
if(pedal >= 280)
{
solenoide = 1; // solenoide desce para a costura
}
}
} // fim interrupt
void main()
{
ANS0_bit = 1; // seleciona analógico
ANS1_bit = 0; // seleciona digital
ANS2_bit = 0; // seleciona digital
ADCON0 = 1; // seleciona a entrada AN0
CMCON = 7; // desabilita os comparadores
TRISIO0_bit = 1; // GPIO.F0 seja uma entrada
TRISIO1_bit = 0; // GPIO.F1 seja uma saída
TRISIO2_bit = 1; // GPIO.F2 seja uma entrada
GPIO = 0; // inicia tudo em low
WPU = 0; // desabilita pull ups
OSCCAL = 0XFF; // configura o oscilador interno para frequencia maxima(4mhz)
INTCON = 0XE0; // habilita interrupção do timer 0 e interrupção global e de perifericos
OPTION_REG = 0x81; // configura o prescaler para 1:4
TMR0 = 0; // inicia a contagem em zero
while(1)
{
pedal = ADC_Read(0);
if((GPIO.F2 == 0)&&(pedal < 5))
{
solenoide = 1; // utilizei para atrasar a execução que preciso, porém se tiver outra opção, me ajudaria bem mais
delay_ms(200);
solenoide = 0; // sobe o solenoide quando agulha estiver em cima
delay_ms(10000); // nesse momento eu gostaria que esse delay pudesse ser interrompido quando alterasse o valor de entrada // não somente após terminar o tempo
}
if((pedal >= 5)&&(pedal < 120))
{
solenoide = 1; // solenoide desce para o corta fio
}
if((pedal >= 120)&&(pedal < 280))
{
solenoide = 0; // solenoide sobe
}
delay_ms(100); // taxa de atualização do ADC
} // fim while
} // fim main