TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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;
}
-
El compilador que utilizas es el CCS ?
-
Que error te da exactamente??
-
aparte no encuentro en ningun lado del codigo que diga "if (PORTD_RD2==0)"
-
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
-
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?
-
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