Autor Tema: Problema reconociendo valor devuelto por RS232  (Leído 1249 veces)

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

Desconectado samshiel_pic

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 777
    • Electrónica·Ingenia
Problema reconociendo valor devuelto por RS232
« en: 30 de Abril de 2012, 17:37:35 »
Hola chicos que tal!! estoy con un programa en el que tengo un atasco  :x
Bueno el programa obtiene una cadena enviada por rs232 que va de 0-255, el problema es que viene en este formato con un decimal y lo he tenido que suprimir, después lo manda de nuevo por 232 al PC para poder saber cual es valor del trama, esto lo reconozco bien! pero tambien me llega por el mismo canal otras tramas: A, B, C, D, .... y si llega, por ejemplo A encienda un led y si llega B lo apague.
Tal y como está el programa me aparece esto tal cual por el terminal rs232:
la cosa es que si cambio dentro del printf el %s (de y)por %u o %c me entrega solo 50 o 1F por el terminal, entre el valor que sea por rs232 (A-F). Lo suyo es poder transformar la variable y o string en el código ascii de A,B,C,D,.... para asi poder compararlo dentro del if pero no se como hacerlo!!! :x
Aquí dejo el programa completo:

Código: C
  1. #include <18F25K20.h>
  2. #include <stdlib.h>
  3. //////////////////////////////////////////////////////////////////////
  4. //                       CONFIGURACION DEL PIC                      //
  5. //////////////////////////////////////////////////////////////////////
  6. #FUSES hs             // High speed Osc (> 4mhz for PCM/PCH) (>10mhz
  7.                        // for PCD)
  8. #FUSES MCLR            // Master Clear pin enabled
  9. #FUSES NOBROWNOUT      // No brownout reset
  10. #FUSES NOCPD           // No EE protection
  11. #FUSES NOPUT           // No Power Up Timer
  12. #FUSES NOPROTECT       // Code not protected from reading
  13. #FUSES NOWDT           // No Watch Dog Timer
  14. #USE delay(clock=16000000)     // Frecuencia de 4Mhz
  15. #USE standard_io(B)
  16. #USE standard_io(C)            // Configuramos el PORTB
  17. #DEFINE Retardo  500           // Definimos 500 como "Retardo"
  18. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  19. //////////////////////////////////////////////////////////////////////
  20. //                     CUERPO PRINCIAPAL FIRMWARE                   //
  21. //////////////////////////////////////////////////////////////////////
  22. int string;
  23. int x,y;
  24. #int_rda
  25. void serial_isr(){
  26.     gets(string);
  27.     x=atoi(string);
  28.     y=string;
  29.     printf("\f%u %s",x,y);
  30.     }
  31.  
  32. void main(){
  33.     enable_interrupts(INT_RDA);
  34.     enable_interrupts(GLOBAL);
  35.     while(1){
  36.         if(y=='A'){
  37.             output_high(PIN_B0);
  38.             }
  39.         if(y=='B'){
  40.             output_low(PIN_B0);
  41.             }
  42.                 }               //...infinito
  43. }

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Problema reconociendo valor devuelto por RS232
« Respuesta #1 en: 30 de Abril de 2012, 19:19:36 »
no se si entendi bien lo que quieres hacer, pero veo que tanto tu Y como tu string los tienes declarados como int, y deberian ser unsigned int o char por si quieres expresarlos en ascii
"Nada es imposible, no si puedes imaginarlo"


 

anything