Ir ao conteúdo
  • Cadastre-se

JSM90

Membro Júnior
  • Posts

    2
  • Cadastrado em

  • Última visita

posts postados por JSM90

  1. 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!