Ir ao conteúdo
  • Cadastre-se

Temporizador + interrupção externa pic18f4550


Posts recomendados

olá pessoal

Eu estou com um problema, sou iniciante e estou tentando resolver o seguinte problema:

- O programa inverte o estado de RD0 a cada 500ms.
- A porta RD1 deve ter seu estado invertido de acordo uma variável global "tempo".
- Quando houver uma interrupção externa em INT1, que é de alta prioridade, RD2 recebe 1 e a variável "tempo" recebe um valor que reverte RD1 a cada 200ms.
- Quando houver uma interrupção externa em INT2, que é de baixa prioridade, RD2 recebe 0 e a variável "tempo" recebe um valor que reverte RD1 a cada 1s.

Segue meu código

 

unsigned tempo;
short conta = 1;


void interrupt(){
     if(TMR0IF_bit){
                    TMR0IF_bit = 0;
                    TMR0L = 0x2C;
                    TMR0H = 0Xcf;
                    conta++;
                    
                     if(INT1IF_bit){
                     INT1IF_bit = 0;
                     RD2_bit = 1;
                     tempo = 0;
                     if ((!tempo)&&(conta == 40)){
                         RD1_bit = ~RD1_bit;
                         conta = 0;
                   }
     }


     }
     


}

void interrupt_low(){

     if (INT2IF_bit){
        INT2IF_bit = 0;
        RD2_bit = 0;
        tempo = 1;

        if ((tempo) && (conta == 200)){
                         RD1_bit = ~RD1_bit;
        }

     }
}


void main() {
TRISB = 0xff;
TRISD = 0x00;
PORTB = 0xff;
PORTD = 0xff;
RBPU_bit = 0;
ADCON1 = 0x0f;
IPEN_bit = 1;
GIE_bit = 1;
PEIE_bit = 1;
INT1IE_bit = 1;
INT2IE_bit = 1;
INT1IP_bit = 1;
INT2IP_bit = 0;
TMR0IP_bit = 1;
INTEDG1_bit = 0;
INTEDG2_bit = 0;
T0CON = 0x80;
TMR0IE_bit = 1;
TMR0L = 0x2C;
TMR0H = 0Xcf;

         while(1){
                  RD0_bit = ~RD0_bit;
                  delay_ms(500);
         }
}

 

Alguém poderia me dar uma ajuda?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

eu prefiro ficar fora quando o meliante não retorna em menos de 24H. Os supostos motivos são:

-não entende naaada do trem.

-não menciona a origem-destino do projeto. Pra que serve, pra que vai ser útil

-quer pronto

-é trabalho escolar

-deu crtl-c ctrl-v na pergunta do professor

-só quer ficar livre da matéria

-já resolveu de outra forma

-desistiu. caminho mais fácil

 

Com isso em mente, caro leitor, se quiser uma ajuda mais efetiva fale algo como projeto filantrópico, pra melhorar a vida duns velhinhos num asilo, pra uma creche de crianças abandonadas, pra pessoas com deficiência qualquer e afins. Sendo verdade ou não, sabe-lo-emos

kk

abç

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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