Ir ao conteúdo
  • Cadastre-se
joseca

RESOLVIDO Rotina com if,else

Recommended Posts

Por que não funciona essa rotina?

#include <16f877a.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay (clock=20000000)

void main(){

int input;

while(true){

if((input(pin_a0))==1)

output_high(pin_b0);

else

output_low(pin_b0);

}

{

if((input(pin_a1))==1)

output_high(pin_b1);

else

output_low(pin_b1);

}

{

if((input(pin_a2))==1)

output_high(pin_b2);

else

output_low(pin_b2);

}

}

o esquema

pic16f877.bmp

Compartilhar este post


Link para o post
Compartilhar em outros sites

talvez porque você criou uma variável input e o compilador está confuso com função input(xxx). Outra coisa: não vejo inicialização do hw tipo definir direção TRIS, etc. Mais uma: no circuito não esqueça de colocar pullups.

Compartilhar este post


Link para o post
Compartilhar em outros sites

configurei os TRISA e TRISB,mas não adiantou

#include <16f877a.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay (clock=20000000)

void main(){

int input;

set_tris_a(0b11111111);

set_tris_b(0b00000000);

while(true){

if((input(pin_a0))==1)

output_high(pin_b0);

else

output_low(pin_b0);

}

{

if((input(pin_a1))==1)

output_high(pin_b1);

else

output_low(pin_b1);

}

{

if((input(pin_a2))==1)

output_high(pin_b2);

else

output_low(pin_b2);

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de saber se a sequencia das instruções "if" e "else" estão corretas.

Na simulação no proteus somente acende o led rb0

Compartilhar este post


Link para o post
Compartilhar em outros sites

então acho que era isso desde o começo. sexta super abre nossa mente. e você deveria ter  especificado isso no tal de "não funciona"!

o loop está fechado aqui

while(true){ //<<<<
if((input(pin_a0))==1)
output_high(pin_b0);
else
output_low(pin_b0);
}  //<<<<

a parte de baixo nunca vai ocorrer

{
if((input(pin_a1))==1)
output_high(pin_b1);
else
output_low(pin_b1);
}

o compilador deve ter avisado. bom...deveria

e de novo... de nada!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

tirei o while(true)

tirei as chaves para sair desse loop,deixei somente as duas

mas não roda a parte debaixo,o que esta ocorrendo?

Obrigado pelos retornos

Resolvido o problema,eram as chaves mesmo,veja como ficou

#include <16f877a.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP

#use delay (clock=20000000)

void main(){

while(true){

if((input(pin_a0))==1)

output_high(pin_b0);

else

output_low(pin_b0);

if((input(pin_a1))==1)

output_high(pin_b1);

else

output_low(pin_b1);

if((input(pin_a2))==1)

output_high(pin_b2);

else

output_low(pin_b2);

}

}

Obrigado Isadora pelas dicas,codigo rodando muito bem!

Moderador poder fechar o topico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×