Autor Tema: recepcion rs232 en 18f2550  (Leído 3708 veces)

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

Desconectado juanez

  • PIC12
  • **
  • Mensajes: 90
recepcion rs232 en 18f2550
« 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

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: recepcion rs232 en 18f2550
« Respuesta #1 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. }
« Última modificación: 20 de Abril de 2008, 15:35:42 por Modulay »

Desconectado juanez

  • PIC12
  • **
  • Mensajes: 90
Re: recepcion rs232 en 18f2550
« Respuesta #2 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

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: recepcion rs232 en 18f2550
« Respuesta #3 en: 21 de Abril de 2008, 11:10:48 »
Te falta esta línea:

enable_interrupts(GLOBAL);

Añádela y prueba a ver

Desconectado juanez

  • PIC12
  • **
  • Mensajes: 90
Re: recepcion rs232 en 18f2550
« Respuesta #4 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

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
Re: recepcion rs232 en 18f2550
« Respuesta #5 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.


 

anything