TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: markos4live en 31 de Mayo de 2005, 14:23:00

Título: error en el programa
Publicado por: markos4live en 31 de Mayo de 2005, 14:23:00
Hola, el problema que tengo es que me da error el programa cuando le doy a build en el MPLAB, me da error en el if(PORTD_RD2==0), y no se porque.
el programa que tengo es el siguiente:


#include<16f877.h>
#include<reg.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP
#use delay(clock=20000000)
#define ON 1;
#define OFF 0;



unsigned int contador=0;
void init_SEMAFORO(void);      //declaramos la variable semaforo
void init_tmr1(void);         //declaramos la variable reloj
void cambiar_semaforo(void);      //declaramos la variable cambio de semaforo

main()
{
   TRISB=0b00000100;      
   init_SEMAFORO();               //inicializamos semaforo
   INTCON_GIE=1;                  //permitimos interrupciones
   INTCON_PEIE=1;
   while(1){
         if(PORTB_RB2==0)         //si vale 0 habilitar interrupciones
            {
               init_tmr0();      //inicialimos temporizador
            }
   }
void init_SEMAFORO(void)   //subprograma inicial del semaforo
{
   TRISD=0b00000000;   // Puerto D salidas
   PORTD=0b00000000;   // Puerto D Salidas
   PORTD_RD2=ON;      //Lo enciendo (rojo)
   PORTD_RD5=ON;      //Lo enciendo (verde)

}

void init_tmr1 (void)
{
   INTCON_T0IE=1;      //permitimos interrupciones en el reloj
   contador=1;      //ponemos a 1 el contador

   OPTION_REG_T0CS=0;   //ponemos el postcaler a 1
   OPTION_REG_T0SE=0;
   OPTION_REG_PSA=0;
   OPTION_REG_PS2=1;   //configuramos el prescaler a 256
   OPTION_REG_PS1=1;
   OPTION_REG_PS0=1;

}

void cambiar_semaforo(void)      //subprograma para cambiar el semaforo de estado
{
   
   if(PORTD_RD2==ON){      //condicion de cumplimiento, si...
      PORTD_RD2=OFF;      //apagamos este led
      PORTD_RD3=ON;      //encendemos este led
   }
   else{            //sino...
      PORTD_RD2=ON;      //encendemos este led
      PORTD_RD3=OFF;      //apagamos este led
   }
   if(PORTD_RD4==ON){      //condicion de cumplimiento, si...
      PORTD_RD4=OFF;      //apagamos este led
      PORTD_RD5=ON;      //encendemos este led
   }
   else{            //sino...
      PORTD_RD4=ON;      //apagamos este led
      PORTD_RD5=OFF;      //encendemos este led
   }
}

#INT_TIMER1
void interr_TMR0(void)      //se produce cada 0.0131
{
   if (contador<750)         //750*0.0131 =9.8 segundos
   {
      contador++;
   }
   else{
      cambiar_semaforo();            
      contador=1;
   }
   INTCON_T0IF=0;
}
Título: RE: error en el programa
Publicado por: El_Coach en 31 de Mayo de 2005, 16:42:00
El compilador que utilizas es el CCS ?
Título: RE: error en el programa
Publicado por: roc364 en 31 de Mayo de 2005, 18:12:00
Que error te da exactamente??
Título: RE: error en el programa
Publicado por: roc364 en 31 de Mayo de 2005, 18:15:00
aparte no encuentro en ningun lado del codigo que diga "if (PORTD_RD2==0)"
 
Título: RE: error en el programa
Publicado por: markos4live en 01 de Junio de 2005, 10:34:00
la función if (PORTB_RB2==0) esta dentro del subprograma cambiar semaforo:

void cambiar_semaforo(void) //subprograma para cambiar el semaforo de estado
{

if(PORTD_RD2==ON){ //condicion de cumplimiento, si...
PORTD_RD2=OFF; //apagamos este led
PORTD_RD3=ON; //encendemos este led
}
else{ //sino...
PORTD_RD2=ON; //encendemos este led
PORTD_RD3=OFF; //apagamos este led
}
if(PORTD_RD4==ON){ //condicion de cumplimiento, si...
PORTD_RD4=OFF; //apagamos este led
PORTD_RD5=ON; //encendemos este led
}
else{ //sino...
PORTD_RD4=ON; //apagamos este led
PORTD_RD5=OFF; //encendemos este led
}
}

y el error que me da es el siguiente:
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:Archivos de programaPICCCcsc.exe" semaf.c
Error[58]   T:PAEEESB02PROGRA~1SEMAF.C 53 : Expecting a close paren
Halting build on first failed translation as user preferences indicate.
BUILD FAILED: Wed Jun 01 17:36:17 2005
no entiendo pq dice que esta esperando a cerrar un parentesis.
Y si, el compilador que uso es el CCS
Título: RE: error en el programa
Publicado por: roc364 en 01 de Junio de 2005, 19:59:00
markoboy: yo lo unico que encuentro, es que te estaria faltando una llave } en el final de la funcion main...  proba con eso a ver que pasa!!!
vos estas usando el compilador CCS desde el MPLAB no???
probaste de compilarlo directamente con el CCS?
Título: RE: error en el programa
Publicado por: pocher en 01 de Junio de 2005, 23:41:00
La función if (PORTB_RB2==0) no es tal, es if (PORTB_RD2==1)

De todas formas el error es que le falta cerrar la llave del main

Compilar desde MPLAB o desde CCS es lo mismo (en el MPLAB solo se dan los paths de los compiladores)

Un saludo