Ir ao conteúdo
  • Cadastre-se

PIC Flag de interrupção PIC 16f877a


Posts recomendados

Bom estou numa aplicação que necessito usar os 2 tipos de interrupçoes do PIC 16f877a, a interrupção externa do RB0 e a interrupção permitida para as portas de RB4 ate RB7.

Mas tem um problema que eu não sei de onde vem, aparentemente a flag de interrupção destes pinos, RB4 a RB7, que esta no registrador INTCON no bit RBIF está chamando a interrupção no inicio do programa, como visto na imagem, simulei no proteus com um pisca led para debugar, assim que inicio a simulação, o led que deveria ligar apenas quando eu chamasse a interrupção atraves do input em algum dos 5 botões, está sendo ligado, como se a flag estivesse com o bit setado, fico grato se alguem me dizer o que esta errado. Segue o codigo...

void interrupt()
{
  
if(INTCON.RBIF == 1){
 PORTB.RB3 = 1;
 delay_ms(2000);
 PORTB.RB3 = 0;
 INTCON.RBIF =0; //Reiniciando a Flag para interrupção RBIE
}

if(INTCON.INTF == 1){
 PORTB.RB3 = 1;
 delay_ms(500);
 PORTB.RB3 = 0;
 INTCON.INTF =0; //Reiniciando a Flag para interrupção INTE
}

}

void main() {

   TRISB=0b11110001;
   PORTB=0X00;
   INTCON.GIE = 1;
   INTCON.PEIE = 1;
   INTCON.RBIE = 1;
   INTCON.f4 = 1;
   OPTION_REG.INTEDG = 0;

  while(1)
  {
   PORTB.RB1 = 1;
   delay_ms(500);
   PORTB.RB1 = 0;
   delay_ms(500);
   PORTB.RB2 = 1;
   delay_ms(500);
   PORTB.RB2 = 0;
   delay_ms(500);
  }
}

 

 

 

 

 

 

 

image.thumb.png.dbb359970236c9d6484beb674e70025a.png

 

 

 

Link para o comentário
Compartilhar em outros sites

Olá amigo!

 

Reparei duas coisas:

 

1) seu msclr está flutuando (interessante deixar ele com nível lógico high)

 

2) o datasheet do PIC informa que essa flag é inicializada com valor indeterminado (pg 26 do PDF do datasheet), logo, antes de inicializar a habilitação de interrupção é interessante forçar a flag para zero no início do código.

 

Abraço

 

____________________________

Inscreva-se no meu canal sobre Eletrônica e ative as notificações!

 

YouTube.com/delpitec

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Eu (eu) prefiro botões no gnd e resistores pullup. E também gosto de colocar capacitor em paralelo com botão pra evitar coisas de "outro mundo". Detalhe: não libere as interrupts até o momento certo. Algo como dá um tempinho no início pro sistema se "aclimatar".

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz entendo... eu tb uso capacitores pra dar um atraso na leitura do botao e evitar as flutuações mecanicas, esse codigo, foi so uma especie de "debugger", acho q o problema é o estado indefinido da flag na inicialização  que o @DELPITEC citou, vou tentar chamar as interupts com mais calma e ver no que da.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!