Erro em código como eu resolvo.

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Erro em código como eu resolvo.

Mensagempor rosiley » 13 Out 2011 15:57

Boa tarde, estou realizando alguns testes aqui com uma lógica que peguei no site da rogercom e o mesmo está apresentando o seguinte erro:( ';' expected but CHEGOU_COMANDO found ) e ( Internal error ) como segue abaixo, então peço a ajuda de voces. Estou usando o mikroc para compilar e gerar o hex.

Segue parte do código.

Código: Selecionar todos
//------------------------------------------------------------------
#include <16F877.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#use delay(clock=4000000)
#fuses XT, PUT, NOWDT, NOBROWNOUT, NOLVP
#use rs232(BAUD=9600, parity=N, BITS=8, XMIT=pin_c6, RCV=pin_c7)

#define MAX_BUFFER 15
char BufferRX[MAX_BUFFER+1];
boolean CHEGOU_COMANDO = false;

//--------------------------------------------------------------------------
//Interrupção de recebimento de caracter pela UART.
//---------------------------------------------------------------------------
#int_rda
void Serial_Recebe_Car()
{
   static unsigned char ch;
   static int IndexBuf=0;

   ch = getc(); //Pega o caracter no registrador da UART.

   BufferRX[IndexBuf] = ch; //Guarda o caracter no buffer.

   if( BufferRX[IndexBuf] == '*' ) //Se é o fim da string de comando.
   {
      BufferRX[IndexBuf+1] = '\0'; //Finaliza sting.
      IndexBuf = 0;
      CHEGOU_COMANDO = true; //Avisa que chegou uma string de comando.
   }else{
      IndexBuf++;
   }
   if( (BufferRX[0] != '>' ) || (IndexBuf >= MAX_BUFFER) )
   {
      IndexBuf = 0;
   }

}
//--------------------------------------------------------------
//Para fazer o LED piscar.
#int_timer0
void MeuTimer()
{
   static boolean led;
   static int conta;
   set_timer0(131-get_timer0());
   conta++;
   if(conta == 125)
   {
      conta=0;
      led = !led;
      output_bit(pin_c0, led); //pisca o LED1
   }
}
//--------------------------------------------------------------
//Programa Principal.
void main(void)
{
   char COMANDO[15];
   set_timer0(131);
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_64);
   enable_interrupts(int_rda); //Habilita interrupção de recebimento.
   enable_interrupts(int_timer0);
   enable_interrupts(GLOBAL); //Habilita registrador de interrupção.

   set_tris_d(0b00000000); //Todos os pinos da porta D como saídas.
   set_tris_c(0b00000000); //Todos os pinos da porta C como saídas.
   set_tris_b(0b00000000); //Todos os pinos da porta B como saídas.

   //output_b(0b00000000); //Desliga todos os pinos da porta B.

while( true ) //Loop infinito.
{

   if(CHEGOU_COMANDO == true)
   {
      CHEGOU_COMANDO = false;
//--------------------------------------------------------------
strcpy(COMANDO,">CMD#01#ON*");
if( strcmp(BufferRX,COMANDO) == 0)
{
output_high(pin_b0); //Liga Relé 1.
printf("Relê #1 LIGADO\r\n");
continue; //volta para o início do loop while().
}
strcpy(COMANDO,">CMD#01#OFF*");
if(strcmp(BufferRX,COMANDO) == 0)
{
output_low(pin_b0); //Desliga Relé 1.
printf("Relê #1 DESLIGADO\r\n");
continue;
}
//---------------------------------------------------------
rosiley
Nibble
 
Mensagens: 51
Registrado em: 01 Jul 2008 19:38
Localização: rio das ostras

Re: Erro em código como eu resolvo.

Mensagempor jvanderleym » 14 Out 2011 15:15

Caro colega.
O código apresentado pelo rogercom é para ser utilizado no CCS, por este motivo não esta funcionando no mikroC, estou com tempo limitado, mais dependendo da sua aplicação ou função, quem sabe posso ajuda-lo
jvanderleym
Bit
 
Mensagens: 43
Registrado em: 15 Mai 2007 20:51

Mensagempor RobL » 14 Out 2011 18:48

Veja se o erro ocorre na declaração do tipo " boolean CHEGOU_COMANDO = false;" . Este não é um tipo padrão em C.
Este tipo tem que estar definido em algum lugar, para ser usado em C.
Tire ele fora e compile. Se não der erro, defina um tipo 'typedef" e use no lugar dele ou uma macro na qual CHEGOU_COMENDO possa valer zero ou um.
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Mensagempor vtrx » 14 Out 2011 20:26

Como ja mencionado,este código é para o compilador CCS.
Não se esqueça que os compiladores C para PIC,não se entendem...

Altere o final do código para;
Código: Selecionar todos
strcpy(COMANDO,">CMD#01#ON*");
if( strcmp(BufferRX,COMANDO) == 0)
{
output_high(pin_b0); //Liga Relé 1.
printf("Relê #1 LIGADO\r\n");
continue; //volta para o início do loop while().
}
strcpy(COMANDO,">CMD#01#OFF*");
if(strcmp(BufferRX,COMANDO) == 0)
{
output_low(pin_b0); //Desliga Relé 1.
printf("Relê #1 DESLIGADO\r\n");
continue;
}
   }
}
}
//---------------------------------------------------------

Compile no CCS.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Mensagempor rosiley » 15 Out 2011 18:41

Valeu rapaziada, compilei pelo ccs e funfou direitinho, agora eu só tenho acertar algumas coisinhas pois nem todas as saidas estão funcionando, isto simulando no proteus.
Agora outra pergunta, eu consigo simular o proteus junto com o meu programa que é feito em c++ builder.
rosiley
Nibble
 
Mensagens: 51
Registrado em: 01 Jul 2008 19:38
Localização: rio das ostras


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 1 visitante

x