como recibo una cadena(string) desde microcontrolador pic

bueno mi duda es que no puedo recibir una cadena de caracteres desde el pic utilizando un programa en C#, cuando envio la cadena desde el terminal, el pic solo me reconoce 3 caracteres de esta,que posteriormente la guardo en al eeprom.
A continuacion les muestro lo que tengo realizado.

El Codigo en el PIC utilizando CCS

Código:
#include "E:\Ejercicios ISIS\PIC\rs232\transmite.h"
int i;
#int_RDA
void  RDA_isr(void) 
{
    char ch;
   

     ch=getc();
     putc(ch);
     write_eeprom(i++,ch);
     if(i>255) i=0;

     
}



void main()
{
   i=0;
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   port_b_pullups(true);
   
   set_tris_b(0x00);
   set_tris_c(0x80);
   output_b(0xFF);
   delay_ms(2000);
   output_b(0x00);
   printf("Espera Cadena\n\r");
   while(1){}

}


y aqui las 2 funciones en C# encargadas de transmitir de Visual studio 2010
Código:
        private void sendChar(char c)
        {
            char[] data = new Char[1];
            data[0] = c;
            try
            {
                ps.Write(data, 0,1);
            }
            catch
            {
                MessageBox.Show("Error: sendByte - failed to send.\nIs the port open?");
            }
        }


        private void bntEnviar_Click(object sender, EventArgs e)
        {
            String cadena = txtEnviar.Text;
            sendChar(cadena[0]);
            sendChar(cadena[1]);
            sendChar(cadena[2]);
            sendChar(cadena[3]);
            sendChar(cadena[4]);
        }

mi intencion es poder guardar datos en las 256 pociciones de la eeprom utilizado el evento bntEnviar y no a traves de un evento keypress(de esta foma logro guardar todos los datos) .

de ante mano gracias.
 
Tengo entendido que el buffer del pic es de 3 caracteres, no recuerdo pero figura en el datasheet.

¿Quiza por ahi venga la cosa? aunque tal vez el buffer de la pc se encargue de ello.
 
si creo que tienes razon, porque la funcion getc() que provee CCS dice algo al respecto.por lo que he estado leyendo creo que tendre que crear una funcion de buffer para el pic,vere si esa posibilidad me funciona.
 
bueno de hecho es de un buffer de 2 bytes, lo que tienes que hacer es crear un buffer mas grande de recepcion y de ahi cuando tengas los datos que necesitas, guardarlos en la memoria, ademas veo que despues de recibir un dato lo envias, esto no es correcto por que mientras envias el dato, otro se debe de estar recibiendo y como sucede al mismo tiempo se pierde ó al reves, mientras recibes se pierde el que está por enviarse. por eso no te llegan los caracteres competos, pueba con mas caracteres y solo imprimelos despues de recibir, asi veras que se va a perder uno y el siguiente no.


pero la solucion es recibir los caracteres completos y posteriormente manipularlos.

saludos
 
Atrás
Arriba