Página 1 de 1

Pograma não funciona !!!!

MensagemEnviado: 27 Ago 2008 10:39
por gilliard
Falae Galera !!!!

Estou criando um software, no compilador MikroC, onde desejo, que quando uma tecla conectada ao PORTO B no pino RB0, é exibido o numero 2, num display LCD 16x2. Mas não esta funcionando, será que falta algo ?!?!?
Estou disponibilizando a configuração dos pinos do LCD do meu projeto, para vocês entenderem o software.

Segue o codigo fonte do programa:

Código: Selecionar todos
//*********************************************************
// Este projeto tem por objetivo, exibir o numero 2,
// quando uma tecla, conectada ao portb, pino RB0,
// for pressionada, exibe o numero 2 no display LCD 16x2
// PIC: 18F4520 - Crystal: 8Mhz
//*********************************************************

void main () {

char numero;
char texto[10];

trisb = 1; // Define porto B como entrada //
trisd = 0; // Define porto D como saida //
trise = 0; // Define porto E como saida //
ADCON1 = 0x06;

// Inicio da configuração e inicialização do lcd em formato 8 bits //
lcd8_config(&porte, &portd,2,1,0,7,6,5,4,3,2,1,0); // Configura e inicializa o LCD
lcd8_cmd(lcd_clear); // Limpa o display
lcd8_cmd(lcd_cursor_off); // Desliga cursor piscante
// Fim da configuração e incialização do lcd em formato 8 bits //

// Exibe a palavra TESTE na primeira linha e primeira coluna //
lcd8_out(1,1,"Teste:");
delay_ms(10);

// Configura e exibe o numero 2, caso a condição for igual a zero.
while (1);
if(portb.rb0==0){ // Se portb.rb0, for igual a estado lógico 0
numero=2; // Exibe o numero 2
bytetostr(numero,texto); // Exibe sem sinal negativo
lcd8_out(1,7,texto); // Exibe o texto na primeira linha, setima coluna
delay_ms(10); // delay de 10 milisegundos
}
}


Segue configuração dos pinos do LCD !!!!

Imagem

Desde já, agradeço !!!!

Re: Pograma não funciona !!!!

MensagemEnviado: 27 Ago 2008 14:09
por dreher
gilliard escreveu:
//*********************************************************
// Este projeto tem por objetivo, exibir o numero 2,
// quando uma tecla, conectada ao portb, pino RB0,
// for pressionada, exibe o numero 2 no display LCD 16x2
// PIC: 18F4520 - Crystal: 8Mhz
//*********************************************************

void main () {

char numero;
char texto[10];

trisb = 1; // Define porto B como entrada // aqui até onde entendo voce está definindo apenas o bit 0 como 1
trisd = 0; // Define porto D como saida //
trise = 0; // Define porto E como saida //
ADCON1 = 0x06;

// Inicio da configuração e inicialização do lcd em formato 8 bits //
lcd8_config(&porte, &portd,2,1,0,7,6,5,4,3,2,1,0); // Configura e inicializa o LCD
lcd8_cmd(lcd_clear); // Limpa o display
lcd8_cmd(lcd_cursor_off); // Desliga cursor piscante
// Fim da configuração e incialização do lcd em formato 8 bits //

// Exibe a palavra TESTE na primeira linha e primeira coluna //
lcd8_out(1,1,"Teste:");
delay_ms(10);

// Configura e exibe o numero 2, caso a condição for igual a zero.
while (1)
{ // faltou!!!!
if(portb.rb0==0){ // Se portb.rb0, for igual a estado lógico 0
numero=2; // Exibe o numero 2
bytetostr(numero,texto); // Exibe sem sinal negativo
lcd8_out(1,7,texto); // Exibe o texto na primeira linha, setima coluna
delay_ms(10); // delay de 10 milisegundos
}
}
}

MensagemEnviado: 27 Ago 2008 14:23
por Sergio38br
ta no protoboard, ou vc comprou alguma placa da mikroelektronika??

Sergio

MensagemEnviado: 27 Ago 2008 15:27
por gilliard
Olá Sérgio38br e dreher !!!! Obrigado pela força !!!!

Eu comprei uma placa de experiência da Microgênios !!!!

:D Dreher, eu coloquei as chaves que faltaram, mas continua não funcionando !!!! :D

Desde já, muito obrigado galera, vocês são nota 1000 !!!!

MensagemEnviado: 27 Ago 2008 15:29
por dreher
A principio sim, coloca as chaves, para que o programa entenda que aquilo que está dentro das chaves é que é o laço de repetição

MensagemEnviado: 27 Ago 2008 15:41
por gilliard
Mas não funcionou, já coloquei !!!

MensagemEnviado: 27 Ago 2008 15:51
por fabim
NÃO CONHEÇO MUITO DE C
Mas no final do main, tem 3 chaves invertidas.
Não deveriam ser duas ?
1 pra main
1 pra while 1

E a definição de variaveis dentro do main, no mikroC pelos exemplos, ficam sempre acima do main e não dentro.

Se falei besteira, discurpa ieu, sou leigo em C.

Fabim

MensagemEnviado: 27 Ago 2008 15:53
por dreher
são 3 chaves, 1 pro main, 1 pro while (1), e uma pro if.

Resolvido pelo msn, tinha um ";" depois do while (1) que estava travando o programa ali.

MensagemEnviado: 27 Ago 2008 15:55
por fabim
nossa c´s me xingam.
Mais nada melhor do que um
Begin


End.

MensagemEnviado: 28 Ago 2008 13:47
por leoabubauru
Amigos:

É uma boa prática sempre colocar chaves "{}" para evidenciar o código dentro de uma estrutura IF/WHILE/etc. Entretanto, neste caso, as chaves sugeridas pelo dreher não são obrigatórias para a execução do IF, pois o C sempre executa a linha seguinte a um comando do tipo IF/WHILE/etc como sendo parte do comando.

While(condição)
comando1;
comando2;
comando3;


No exemplo acima, "comando1" é executado enquanto "condição" for não nulo, pois é a primeira linha após o "While". Já "comando2" e "comando3" serão executados somente após "condição" for igual a zero.

While(condição)
{
comando1;
comando2;
comando3;
}


Neste segundo exemplo, "comando1", "comando2" e "comando3" são executados enquanto "condição" for não nulo, pois todos estão dentro da chave.

O problema que vi no código do amigo é que ele colocou um ";" após o while, fazendo um loop infinito. O compilador entende que não se deve executar nada enquanto a condição for verdadeira (sempre, pois é 1). Experimente tirar a vírgula. E pode deixar apenas dois conjuntos de chaves como no código original. Depois poste o resultado, ok?

Abraços


Laercio

MensagemEnviado: 28 Ago 2008 14:13
por dreher
Foi isso mesmo que descobrimos. Aquele ; deixava o programa em loop infinito, e como o loop era pra ser feito com todos os comandos, era necessário a inclusão das chaves {} no programa.