Autor Tema: Problemas con recepcion uart en hexadecimal  (Leído 1540 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Problemas con recepcion uart en hexadecimal
« 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
Saludos desde Córdoba, españa

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problemas con recepcion uart en hexadecimal
« Respuesta #1 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
"Nada es imposible, no si puedes imaginarlo"

Desconectado kain589

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 324
Re: Problemas con recepcion uart en hexadecimal
« Respuesta #2 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
Saludos desde Córdoba, españa

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Problemas con recepcion uart en hexadecimal
« Respuesta #3 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
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes


 

anything