Ir ao conteúdo

Posts recomendados

Postado

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

 

 

 

Postado

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
  • Membro VIP
Postado

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
Postado

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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!