Hola.
Soy nuevo en esto de la programacion en C para Pic, y aunque tengo algunas nociones muy basicas sobre C ando algo perdido.
Tengo una duda con un programa que estoy haciendo, basicamente es un programa que ejecuta una rutina simple de parpadeo de un led, esta rutina no es realmente funcional, solo la utilizo para ver que el programa en main() se ejectua siempre tras atender la interrupcion de la usart, si se activa interrupcion por recepcion de puerto serie para la ejecucion del programa principal, recoge los datos y los almcena en una cadena de char, tras esto se los pasa a una funcion que ha de identificar que le ha llegado y con esto ejecutar una funcion (de momento lo que hace es devolver por el puerto serie una cadena de texto).
Los datos que le llega por el puerto serie pueden ser los siguientes:
- :GS#
- :F+# , :F-# .... etc, los que se ven en el codigo que compara.
Con lo cual lo que hago en la funcion es primero comparar el bit a continuacion de los dos puntos, si es G devuelvo el mensaje, si no es G entonces en las siguientes comparo el siguiente caracter, ya que en ese caso el siguiente a los dos puntos s no es G siempre sera F, con lo cual comparamos el siguiente caracter para ver que nos ha devuelto, el terminador siempre es # .
El problema es que esta funcion no me compara bien los datos que le llegan, y sea lo que sea siempre ejecuta el primer "if" para ver si es :GS# y lo da como bueno, devolviendome la cadena de esa comparacion, aunque lo que le estoy enviando no sea eso.
A ver si me podeis ayudar un poco, ya que ando bastante perdido con esto, os pego el codigo y gracias por todo.
char output[10]; //Declaramos variables para almacenar datos serie
void ChequeoRecepcion(char *Cadena)
{
if (Cadena[1] = 'G') Uart1_Write_Text("Devuelve Hora");
else if (Cadena[0] = '+') Uart1_Write_Text("Foco adentro");
else if (Cadena[0] = '-') Uart1_Write_Text("Foco afuera");
else if (Cadena[0] = 'Q') Uart1_Write_Text("Paro enfoque");
else if (Cadena[0] = 'F') Uart1_Write_Text("Maxima Velocidad");
else if (Cadena[0] = 'S') Uart1_Write_Text("Minima velocidad");
else if (Cadena[0] = '1') Uart1_Write_Text("Velocidad 1");
else if (Cadena[0] = '2') Uart1_Write_Text("Velocidad 1");
else if (Cadena[0] = '3') Uart1_Write_Text("Velocidad 3");
else if (Cadena[0] = '4') Uart1_Write_Text("Velocidad 4");
}
void interrupt(){
if (UART1_Data_Ready() == 1) { //Comprobamos que hay datos en el buffer serie
UART1_Read_Text(output, "#", 10); //Lee texto hasta que encuentra "#"
//Delay_ms(2000); //Retardo para comprobar func.interrupcion
ChequeoRecepcion(output); //Devolvemos datos recibidos excepto terminador "#"
}
}
void main() {
UART1_Init(9600); //Inicializa el Uart seleccionado a 9600 baudios
Delay_ms(100); //Retardo para que de tiempo a inicializar el pto.serie
trisa = 0; //puerto a configurado como salida
PIE1.RCIE = 1; //Habilitamos interrupcion por recepcion serie
INTCON = 0XC0; //Habilitamos GIE=int.globales y PIE=int.perifericos
while(1){ //bucle para comprobar funcionamiento de interrupciones
PORTA.F0 = 1; //PORTA.0=1
Delay_ms(500); //Retardo de 500ms
PORTA.F0 = 0; //PORTA.0=0
Delay_ms(500); //Retardo de 500ms
}
//
}