TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kain589 en 12 de Junio de 2013, 06:52:52

Título: Problemas con recepcion uart en hexadecimal
Publicado 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:

Código: C
  1. #int_rda
  2. void serial_isr() {
  3.      if(kbhit()){
  4.          dato=getc();
  5.          putc(dato);
  6.          if(dato==0xFA){
  7.          modo++;
  8.          if (modo==3) modo = 0;
  9.          switch(modo){
  10.             case 0: printf("RC\r\n");
  11.                     break;
  12.             case 1: printf("Sigue\r\n");
  13.                     break;
  14.             case 2: printf("Sonar\r\n");
  15.                     break;
  16.             }
  17.          }
  18.          if(dato==0xA5){
  19.             if(modo==0){
  20.             printf("Alante\r\n");
  21.             }
  22.          }
  23.          if(dato==0xAA){
  24.             if(modo==0){
  25.             printf("Atras\r\n");
  26.             }
  27.          }
  28.          if(dato==0xA6){
  29.          if(modo==0){
  30.             printf("Derecha\r\n");
  31.             }
  32.          }
  33.          if(dato==0xA9){
  34.             if(modo==0){
  35.             printf("Izquierda\r\n");
  36.             }
  37.          }
  38.     }
  39. }

El envio lo hago asi

Código: C
  1. 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
Título: Re: Problemas con recepcion uart en hexadecimal
Publicado por: rivale en 12 de Junio de 2013, 10:38:27
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
Título: Re: Problemas con recepcion uart en hexadecimal
Publicado por: kain589 en 12 de Junio de 2013, 11:36:23
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
Título: Re: Problemas con recepcion uart en hexadecimal
Publicado por: jukinch en 17 de Junio de 2013, 12:50:39
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