Autor Tema: Recibir un string por rs232  (Leído 7291 veces)

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

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Recibir un string por rs232
« en: 10 de Abril de 2010, 21:13:05 »
Disculpen pero me surgio la duda, como puedo recibir y mandar un String por Rs232 y tambien imprimirlo a una Lcd lo que estaba intentando era esto:
Código: C
  1. #include <18F2550.h>
  2. #FUSES HS,NOWDT,NOPROTECT,NOLVP
  3. #use delay (clock=20000000)
  4. #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
  5. #include <string.h>
  6. #include <input.c>
  7. #define use_portb_lcd TRUE
  8. #include <lcd.c>
  9. void main()
  10. {
  11. char tag[12];
  12. lcd_init();
  13. do
  14. {
  15. delay_ms(50);
  16. printf(lcd_putc,"\f  identificador tag= ");
  17. get_string(tag,12);
  18. printf(lcd_putc," %12C ",(tag,12));
  19. }
  20. while(1);
  21. }

Desconectado hectdiaf

  • PIC10
  • *
  • Mensajes: 18
Re: Recibir un string por rs232
« Respuesta #1 en: 11 de Abril de 2010, 00:48:40 »
hola darck_khronos

para enviar y recibir un string por rs232 te servirian varias instrucciones

para enviar
puts(string) o el printf(string)

para recibir una cadena de datos
valor=getc
valor=getch
valor=getchar
valor=gets  // este ultimo creo que necesita un enter al final del string

los datos los puedes esperar con interrupcion por serial o mas simple con un kbhit()
aqui te dejo un pequeño ejemplo de un libro  para que te guies

Código: CSS
  1. #include <18F2550.h>
  2. #FUSES HS,NOWDT,NOPROTECT,NOLVP
  3. #use delay (clock=20000000)
  4. #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
  5. #include <LCD.C>
  6.  
  7. char ch;
  8.  
  9. #int_rda
  10. void serial_isr() {
  11.     ch=getchar();
  12.     puts("Recibido"); // enviando string
  13. }
  14.  
  15. void main()
  16. {
  17. lcd_init();
  18.    enable_interrupts(global);
  19.    enable_interrupts(int_rda);
  20. while(true)  {
  21.    printf(lcd_putc, "\n\r Valor %c",ch);
  22.     }
  23. }
en este se utilizo gets y kbhit()

 
Código: CSS
  1. #include <18F2550.h>
  2. #FUSES HS,NOWDT,NOPROTECT,NOLVP
  3. #use delay (clock=20000000)
  4. #include <lcd.c>
  5. #include <stdlib.h>
  6. #byte port_c=7
  7. #byte port_a=5
  8.  
  9. int m=1;
  10. char c;
  11.  
  12. void menu()
  13. {
  14.    printf("\r\nd>> ELECTRONICA\r\n");
  15. }
  16.  
  17.  
  18. void main()
  19. {
  20. char gps;
  21. char dato;
  22. strcpy (gps, "pbl");
  23.  
  24. lcd_init();
  25. set_tris_a(0xff); //configura el pto a de entrada
  26.  
  27. lcd_putc("\fDato recibido:");
  28. menu();//procedimiento arriba en void menu
  29.  
  30. while(true)
  31. {
  32.  
  33.    while(kbhit() == 0 )//mientras no se envien datos
  34.    {
  35.       if(input(pin_a0)==0)
  36.       {
  37.          while(input(pin_a0)==0);//se queda hasta sulte A0
  38.          printf("%d",m);
  39.       }
  40.       if(input(pin_a1)==0)
  41.       {
  42.          while(input(pin_a1)==0);//se queda hasta sulte A1
  43.          m++;
  44.          printf("%d",m);
  45.       }
  46.  
  47.    }//
  48.    gets(dato);// recibo la cadena desde el pc
  49.    c=atof(dato);// conviere la varaible dato en numerica y la almacena en C
  50.    lcd_gotoxy(8,2);
  51.    printf(lcd_putc,"%d",c);

recuerda que es comunicacion UART y debes configurar tanto el pc como el pic con las mismas caracteristicas de comunicacion (baudios, bit de parada, paridad, bit de datos y control de flujo).

espero haberte ayudado un poco suerte :)