Pograma não funciona !!!!

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Pograma não funciona !!!!

Mensagempor gilliard » 27 Ago 2008 10:39

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 !!!!
Avatar do usuário
gilliard
Byte
 
Mensagens: 121
Registrado em: 26 Ago 2008 13:32

Re: Pograma não funciona !!!!

Mensagempor dreher » 27 Ago 2008 14:09

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
}
}
}
dreher
Byte
 
Mensagens: 489
Registrado em: 12 Out 2006 11:10
Localização: Blumenau - SC

Mensagempor Sergio38br » 27 Ago 2008 14:23

ta no protoboard, ou vc comprou alguma placa da mikroelektronika??

Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor gilliard » 27 Ago 2008 15:27

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 !!!!
Editado pela última vez por gilliard em 27 Ago 2008 15:31, em um total de 1 vez.
Avatar do usuário
gilliard
Byte
 
Mensagens: 121
Registrado em: 26 Ago 2008 13:32

Mensagempor dreher » 27 Ago 2008 15:29

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
dreher
Byte
 
Mensagens: 489
Registrado em: 12 Out 2006 11:10
Localização: Blumenau - SC

Mensagempor gilliard » 27 Ago 2008 15:41

Mas não funcionou, já coloquei !!!
Avatar do usuário
gilliard
Byte
 
Mensagens: 121
Registrado em: 26 Ago 2008 13:32

Mensagempor fabim » 27 Ago 2008 15:51

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
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor dreher » 27 Ago 2008 15:53

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.
dreher
Byte
 
Mensagens: 489
Registrado em: 12 Out 2006 11:10
Localização: Blumenau - SC

Mensagempor fabim » 27 Ago 2008 15:55

nossa c´s me xingam.
Mais nada melhor do que um
Begin


End.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor leoabubauru » 28 Ago 2008 13:47

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
Tento, tento e tento...
Me arrebento!
Também bato!
Ô negocim bunitim essa tal eletrônica de barco!
leoabubauru
Byte
 
Mensagens: 227
Registrado em: 21 Nov 2006 19:08
Localização: São Paulo

Mensagempor dreher » 28 Ago 2008 14:13

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.
dreher
Byte
 
Mensagens: 489
Registrado em: 12 Out 2006 11:10
Localização: Blumenau - SC


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x