Autor Tema: Como puedo recibir datos por rs232?  (Leído 19938 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado aiwa_7

  • PIC10
  • *
  • Mensajes: 44
Re: Como puedo recibir datos por rs232?
« Respuesta #45 en: 18 de Febrero de 2010, 18:05:39 »
Hola... de nuevo por estos lados... estoy realizando comunicacion PC-PIC... utilizo el pic 18F4550 y ya he logrado enviar datos (lo envio mediante un programa realizado en delphi 7) de un digito (0-9) pero al enviar de 2 o mas digitos solo recibo el ultimo... estoy utilizando la int_RDA, con el getch(); y leyendo el tema vi la instruccion gets(string) y al intercambiar el getch por ésta, lo que hace mi programa es que a la hora de enviar el dato desde la PC el pic se inhibe. no muestra nada en la LCD y se queda congelada la imagen... no se si haya que incluir alguna libreria o algo... espero me puedan ayudar... gracias...

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Como puedo recibir datos por rs232?
« Respuesta #46 en: 18 de Febrero de 2010, 18:19:25 »
gets necesita un carácter de salto de linea si mal no recuerdo para dar finalizada la recepción, eso está indicado en la ayuda de CCS. Si quieres manejarlo con getc e interrupciones coloca el código para ver donde puede estar el inconveniente.


Saludos!
« Última modificación: 18 de Febrero de 2010, 18:21:52 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado aiwa_7

  • PIC10
  • *
  • Mensajes: 44
Re: Como puedo recibir datos por rs232?
« Respuesta #47 en: 18 de Febrero de 2010, 18:51:26 »
gracias por la pronta respuesta... checare la ayuda para ver la lo comentado... cualquier cosa los mantengo al tanto...

Desconectado aiwa_7

  • PIC10
  • *
  • Mensajes: 44
Re: Como puedo recibir datos por rs232?
« Respuesta #48 en: 21 de Febrero de 2010, 19:23:27 »
Que tal... aqui de nuevo.. ya estuve intentando trabajar con la funcion gets(string) y no entiendo muy bien lo del salto de linea que requiere para funcionar... este es el codigo que realice:

#define LCD_DATA_PORT PORTD
#define LCD_TYPE 2
#include <lcd.c>



char a[8];

#int_RDA
void  RDA_isr(void)
{
   gets(a);
   
}


void main()
{
   lcd_init();



   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

while (true)
{   
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%s",a);
   delay_ms(3000);
   printf(lcd_putc,"\f");
   delay_ms(1000);
}

}

y el codigo con el que logro recibir datos de un solo digito es el siguiente:

#define LCD_DATA_PORT PORTD
#define LCD_TYPE 2
#include <lcd.c>


int a;

#int_RDA
void  RDA_isr(void)
{
   a=(getch()-48);
   delay_us(500);
}


void main()
{
   lcd_init();



   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

while (true)
{   
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%u",a);
   delay_ms(3000);
   printf(lcd_putc,"\f");
   delay_ms(1000);
}

}

el segundo codigo funciona bien solo por el detalle argumentado desde el primer mensaje... espero me puedan ayudar con cualquiera de los dos codigos.... gracias de antemano...

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Como puedo recibir datos por rs232?
« Respuesta #49 en: 21 de Febrero de 2010, 21:06:34 »
Cuando envies los datos desde el PC, asegurate que al final del envio esten '\r', '\n'

Saludos
El papel lo aguanta todo

Desconectado ELIMAY

  • PIC10
  • *
  • Mensajes: 1
Re: Como puedo recibir datos por rs232?
« Respuesta #50 en: 24 de Febrero de 2010, 17:44:30 »
Hola. Disculpen es la primera ves que escribo. Debo hacer mediante rs232 escribir un nombre y que me de su apellido. Anteriormente ya lo hice pero al escribir el nombre no se mostraba y cuando daba enter me daba el resultado. Ahora lo que debo hacer es lo mismo pero debe verse lo que estoy escribiendo, comparar letra a letra. Por favor ayuda!!!!
#include <parpa.h>
#include <stdio.h>

void main()
{
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF|ADC_TAD_MUL_0); 
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_16,255,1);
   setup_timer_4(T4_DISABLED,0,1);
   setup_psp(PSP_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
//!   fprintf(pc,"%s\n\r",cadena1);
//!   printf("%s\n\r",cadena2);
//!   fputs("hola3\r",pc);
//!   puts("hola4");
//!   printf("frase:%s:\n\r",frase);
//!   fputc(var, pc);
//!   fprintf(pc,"%u\n\r",vad);
//!   putc(0x33);
//!   sleep();
//!   delay_ms(1);
//!do  {
//!   delay_ms(100);
//!    }while(true);
//!
//!   do{
//!   delay_ms(1000);
//!   putc(0x30);
//!   delay_ms(1000);
//!   putc(0x31);
//!      }while(true);

do
   {
//!      fprintf(pc2,"\n\rPassword:\r\n ");
     do
     {
     if (kbhit());
       {a++;
        a=getc();
        putc(a);
       }
   }while(true);

      //fgets(string,pc2);
      for (x=1;x<30;x++)
      {
      putc(a);
      putc(13);
      if(strcmp(putc(a), password)==0)
       //Compara con el real con el ingresado
        { fprintf(pc2,"\n\rMaria Gonzales");
//!         break;
        }
      else
         fprintf(pc2,"\n\rError, intente de nuevo\r\n");
          {i++;
            if (i==4)
            {fprintf(pc2,"\n\rUSTED HA SIDO BLOQUEADO\r\n");
   //!            break;
            }
          }
        }
   } while(true);
}


 

anything