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;
}