Ir ao conteúdo
  • Cadastre-se

JSM90

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

Reputação

0
  1. O problema é que nesse 0,1s fica bloqueado para outra função e no meu caso teria que interromper a qualquer momento.
  2. 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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...