TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kain589 en 12 de Junio de 2013, 06:52:52
-
Tengo un problema con la recepcion de un dato. Lo mando a traves de la usart en hexadecimal, pero en la recepcion creo que el dato debe leerlo como caracter porque no me funciona la rutina:
#int_rda
void serial_isr() {
if(kbhit()){
if(dato==0xFA){
modo++;
if (modo==3) modo = 0;
switch(modo){
break;
break;
break;
}
}
if(dato==0xA5){
if(modo==0){
}
}
if(dato==0xAA){
if(modo==0){
}
}
if(dato==0xA6){
if(modo==0){
}
}
if(dato==0xA9){
if(modo==0){
}
}
}
}
El envio lo hago asi
printf("%X",orden
);// %x envie en hexadecimal
La instruccion putc(dato) si me muestra por el puerto el mismo dato que mando y en hexadecimal, si mando FA,AA...me sale igual en pantalla no hay ninguna conversion a su correspondiente en caracter, pero despues los distintos if para la toma de decisiones no funcionan ninguno. Creo que el problema debe venir porque la recepcion del dato no se realiza en hexadecimal, aunque la funcion putc si me lo exprese como tal. He estado mirando pero no encuentro como recibir si no es asi el dato en hexadecimal
-
No necesitas convertir el dato a otro formato, realmente para el micro todo está en binario, lo único que puedes cambiar es la forma de expresarlo, es decir, si quieres imprimir su equivalente en ascci solo pones %c, o si lo quieres expresar como entero pones %i, en este caso estas usando %x y te lo muestra en en hexadecimal
-
El problema es que aunque el dato que me reenvia el micro si esta en hexadecimal no entra en ninguno de los if() como si no fueran los mismos datos. He probado a hacerlo con caracteres ('a''m'...) y no me da ningun problema, pero no sé porque de esta manera no funciona
-
los caracteres que esperás en los ifs son estos que pongo en los comentarios?
dato==0xA5 // ¥ decimal 165 hex A5
dato==0xAA // ª decimal 170 hex AA
dato==0xA6 // ¦ decimal 166 hex A6
dato==0xA9 // © decimal 169 hex A9