Una pregunta.
¿Qué significan exactametne estos warning?
if(c='H'){ Assignament inside relational expression...... ¿no es correcta la expresión?
Después em salen 3 warning mas que dicen
Interrupts disabled during call to prevent re-entrancy: (@I2C_WRITE_1)
Interrupts disabled during call to prevent re-entrancy: (@delay_ms1)
Interrupts disabled during call to prevent re-entrancy: (@PUTCHAR_BIU_1)
Estos 3 warning me señalan la llave que cierra el programa
Creo que por eso no me funciona mi programa, o quizas puede ser un motivo.
He comprobado el hardware y creo que esta correcto.
Cuando la patilla C5 esta a nivel bajo las patillas de habilitacion del max485 están a nivel bajo las 2, es decir las patillas 2 y 3 del max485 estan a nivel bajo. EN este estado el PIC tiene la patilla de transmisión (C6) a nivel alto y la patilla de recepción (C7) a nivel bajo. En este estado entonces el max485 su patilla 1(recepción) se pone a nivel bajo, y la patilla 4 (ransmisión) se pone a nivel alto.
Estoy usando rs485, y esta consigna
#use rs232(baud=9600,parity=N,bits=8,stop=1,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C5)
hace que por defecto el pin C5 esté a un nivel bajo. Es decir estamos en el caso que he puesto anteriormente, quizas como el PIC está en este estado no deja que le lleguen datos, y tengo que modificar el software. Estoy un poco perdido. el programa en cuestión es el siguiente. Si alguien me puede ayudar se lo agradezco enormemente.
#include <16F877.h> // Se añade la libreria del PIC a utilizar
#FUSES NOWDT,HS,NOPUT,PROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG
#use delay(clock=20000000) //Velocidad del reloj
#use rs232(baud=9600,parity=N,bits=8,stop=1,xmit=PIN_C6,rcv=PIN_C7,enable=PIN_C5) //enable=PIN_C5 hace que el C maneje el pin de habilitación
#define EEPROM_SDA PIN_C4
#define EEPROM_SCL PIN_C3
#include <24512.c> // Se añade la libreria de la EEPROM 24LC512
#include <external_eeprom.c> // Se añade la libreria para controlar una EPROM externa
//Interrupción probocada por el PC para volcar datos
#int_rda
void serial_isr(){
///////////////////////////////////////////////////////////////////////////////////
/// ///
/// LECTURA DE DATOS EN LA EEPROM Y ENVIAR AL PC ///
/// ///
///////////////////////////////////////////////////////////////////////////////////
int dato=0,dir2=0,i=0,f=0,g=0,h=0,j=0,k=0;
float dato2=0;
char c;
disable_interrupts(int_rda);//Aqui deshabilito la interrupción
if (kbhit())
//wait until a character has been received
c = getc();
//read character from UART
if(c='H'){
printf(" Interrupcion ");
dato=read_ext_eeprom(dir2); // Leemos la hora en la EEPROM
dir2=dir2+1; // Incrementamos el puntero de la EEPROM
printf("%u",dato);// Enviamos dato a ordenador
delay_ms(200);
dato=read_ext_eeprom(dir2); // Leemos los minutos en la EEPROM
dir2=dir2+1; // Incrementamos el puntero de la EEPROM
printf("%u",dato);// Enviamos dato a ordenador
delay_ms(200);
dato=read_ext_eeprom(dir2); // Leemos los segundos en la EEPROM
dir2=dir2+1; // Incrementamos el puntero de la EEPROM
printf("%u",dato);// Enviamos dato a ordenador
delay_ms(200);
delay_ms(200);
for (f=0; f<4; f++){ // Leemos las irradiancias de la EEPROM EXTERNA
dato2= read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
printf("%f",dato2);// Enviamos dato a ordenador
}
for (g=0; g<4; g++){// Leemos las temperaturas ambientes en la EEPROM EXTERNA
dato2= read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
printf("%f",dato2);// Enviamos dato a ordenador
}
for (h=0; h<4; h++){// Leemos las temperaturas en la placa de la EEPROM EXTERNA
dato2= read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
printf("%f",dato2);// Enviamos dato a ordenador
}
for (i=0; i<4; i++){// Leemos las velocidades del viento de la EEPROM EXTERNA
dato2= read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
printf("%f",dato2);// Enviamos dato a ordenador
}
for (j=0;j<4;j++){// Leemos los voltios de la EEPROM EXTERNA
dato2= read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
printf("%f",dato2);// Enviamos dato a ordenador
}
for (k=0;k<4;k++){// Leemos las intensidades de la EEPROM EXTERNA
dato2= read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
printf("%f",dato2);// Enviamos dato a ordenador
}
}
}
////////////////////////////////////////////////////////////////////////////////////
/// ///
/// ///
/// PROGRAMA PRINCIPAL ///
/// ///
/// ///
////////////////////////////////////////////////////////////////////////////////////
void main(void) // Inicio del programa principal
{
///////////////////////////////////////////////////////////////////////////////////
/// ///
/// DECLARACIÓN DE LAS VARIABLES E INICIALIZACION DE ÉSTAS ///
/// ///
///////////////////////////////////////////////////////////////////////////////////
//Variables float que contienen datos de las tablas
float irra[] = {1, 2, 3, 6};
float tempa[] = {6, 3, 2, 1};
float tempm[] = {2, 4, 5, 6};
float vel[] = {2, 4, 5, 6};
float volt[] = {2, 4, 5, 6};
float inte[] = {2, 4, 5, 6};
//Variables int que contienten el valor de la fecha
int min,sec,hr;
//Inicialización de las variables necesarias para movernos por la EEPROM
int dir=0;
//Iniciaización variables para necesarias para moverse dentro de los datos
int f=0,g=0,h=0,i=0,j=0,k=0;
min=0;
sec=0;
hr=0;
////////////////////////////////////////////////////////////////////////////////////
/// ///
/// GUARDAR DATOS EN EEPROM EXTERNA Y INICIALIZAR CONTAJE RELOJ ///
/// ///
////////////////////////////////////////////////////////////////////////////////////
init_ext_eeprom(); // Inicializamos EEPROM EXTERNA
delay_ms(200);// retraso 200 milisegundos para no colapsar PIC
//rtc_get_time(hr,min,sec); //Guardamos la hora, minuto y segundo que nos da el RTC
write_ext_eeprom(dir,hr); // Escribimos la hora en la EEPROM
dir=dir+1; // Incrementamos el puntero de la EEPROM
write_ext_eeprom(dir,min); // Escribimos los minutos en la EEPROM
dir=dir+1; // Incrementamos el puntero de la EEPROM
write_ext_eeprom(dir,sec); // Escribimos los segundos en la EEPROM
dir=dir+1; // Incrementamos el puntero de la EEPROM
delay_ms(200);
for (f=0; f<4; f++){ // Escribimos las irradiancias en la EEPROM EXTERNA
write_float_ext_eeprom(dir, irra[f]);
delay_ms(200);
dir=dir+4;
}
f=0;
for (g=0; g<4; g++){// Escribimos las temperaturas ambientes en la EEPROM EXTERNA
write_float_ext_eeprom(dir, tempa[g]);
delay_ms(200);
dir=dir+4;
}
g=0;
for (h=0; h<4; h++){// Escribimos las temperaturas en la placa en la EEPROM EXTERNA
write_float_ext_eeprom(dir, tempm[h]);
delay_ms(200);
dir=dir+4;
}
h=0;
for (i=0; i<4; i++){// Escribimos las velocidades del viento en la EEPROM EXTERNA
write_float_ext_eeprom(dir, vel[i]);
delay_ms(200);
dir=dir+4;
}
i=0;
for (j=0;j<4;j++){// Escribimos los voltios en la EEPROM EXTERNA
write_float_ext_eeprom(dir, volt[j]);
delay_ms(200);
dir=dir+4;
}
j=0;
for (k=0;k<4;k++){// Escribimos las intensidades en la EEPROM EXTERNA
write_float_ext_eeprom(dir, inte[k]);
delay_ms(200);
dir=dir+4;
}
k=0;
printf(" ariburri ");
delay_ms(500); // espera por ejemplo 0,5 seg para enviar nuevamente el dato,
output_HIGH(PIN_B1); // por ejemplo conectas un led entre el pin B1 y masa y este debe prender
delay_ms(250); // espera por ejemplo 0,25 seg
output_LOW(PIN_B1); // se apaga el led
delay_ms(250); // esperas otros 0,25 seg para enviar nuevamente el dato,
do{
enable_interrupts(global);
enable_interrupts(int_rda);
}while(TRUE);
}
Cualquier error que creeis que estoy cometiendo y no lo veo por favor diganmelo, no se que hacer.
Gracias y siento las molestias y mi pesadez