TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: juanez en 20 de Abril de 2008, 14:34:43

Título: recepcion rs232 en 18f2550
Publicado por: juanez en 20 de Abril de 2008, 14:34:43
Hola, estoy intentando mostrar en un lcd, lo que recibo por el puerto rs232, pero no se porque no me funciona, y no paro de darle vueltas, inserto los datos en el hyperterminal y es como si el 18f2550 no se enterase de que le llegan.

Aqui el codigo

--------------------------------------------------------------------------------------------------------------------------------------------------
#include <18F2550.h>
#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(CLOCK=8000000)
#use fast_io(A)
#use fast_io(B)
#define use_portb_lcd TRUE /*CONEXIONADO EN PORTB*/
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include <lcd.c>
char a;

#INT_RDA
void serial_isr()
{
a=fgetc();
printf(lcd_putc,"SII");
delay_ms(2000);
}

void main()
{
   enable_interrupts(int_rda);
   lcd_init();
   do
      {
         lcd_gotoxy(1,1);
         printf(LCD_PUTC, "RS232- %C",a);
      }
   while(TRUE);
}
---------------------------------------------------------------------------------------------------------------------------------------------

Saludos
Título: Re: recepcion rs232 en 18f2550
Publicado por: Modulay en 20 de Abril de 2008, 15:33:07
Configura los TRIS correspondientes del puerto C.

Usa una variable tipo flag en el bucle y deja la rutina de interrupción lo más escueta posible,nada de delays ni de dibujar en el lcd...Algo así:

Código: C++
  1. #include <18F2550.h>
  2. #fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
  3. #use delay(CLOCK=8000000)
  4. #use fast_io(A)
  5. #use fast_io(B)
  6. #define use_portb_lcd TRUE /*CONEXIONADO EN PORTB*/
  7. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  8. #include <lcd.c>
  9. char a;
  10. boolean flag;
  11.  
  12.  
  13. #INT_RDA
  14. void serial_isr()
  15. {
  16.   flag = true;
  17.   a = getc();
  18. }
  19.  
  20.  
  21. void main()
  22. {
  23.    flag = false;
  24.    set_tris_c(0b10111111);
  25.    lcd_init();
  26.    enable_interrupts(int_rda);
  27.    do
  28.       {
  29.          if(flag)
  30.          {
  31.            lcd_gotoxy(1,1);
  32.            printf(LCD_PUTC, "RS232- %C",a);
  33.            flag = false;
  34.          }
  35.       }
  36.    while(TRUE);
  37. }
Título: Re: recepcion rs232 en 18f2550
Publicado por: juanez en 21 de Abril de 2008, 11:00:35
Hola modulay, hay algo que falla en el codigo, he copiado tal cual lo que has puesto y no funciona, lo de dibujar en el lcd era para comprobar que llegaba algo.

Saludos
Título: Re: recepcion rs232 en 18f2550
Publicado por: Modulay en 21 de Abril de 2008, 11:10:48
Te falta esta línea:

enable_interrupts(GLOBAL);

Añádela y prueba a ver
Título: Re: recepcion rs232 en 18f2550
Publicado por: juanez en 21 de Abril de 2008, 14:11:17
Vale ahora si que funciona, la verdad es que no lo entiendo, por que antes haciendo prueba esa linea ya la habia añadido y con mi codigo no funcionaba por eso la quite, pero weno ya funciona.

Gracias modulay

Saludos
Título: Re: recepcion rs232 en 18f2550
Publicado por: Modulay en 21 de Abril de 2008, 14:45:25
Para hacer uso de las interrupciones,esa instrucción no puede faltar.Alguna otra cosilla tendrías mal y por eso no te funcionaba.

Saludo.