Programación Específica > Programación en C

 Problemas Con El Serial

(1/1)

picmaniaco:
:huh: EStoy haciendo comunicacion serial en la Pc con Visual y en el microcontrolador (Pic16f877) en C(css) y todo va bien pero en cierto momento el micro deja de recibir datos no hay interrupciones de puerto serial no se que pasa alguien me pusiese ayudar

lalo_soft:
Lo ideal es crearte un buffer de recepcion de unos 50 byte tipo char bufferRdx[50];  y luego asignar la recepcion de datos a la interrupcion de recepcion  dentro de esta interrupcion vas guardando los datos recibidos en el buffer e incrementando un contador con tope hasta  el tamaño del buffer .
Fuera de la funcion de recepcion lees el contador si es distinto de cero sacas datos del buffer y restas el numero de datos sacados al contador.

En codigo serial algo asi:


--- Código: Text ---  //Variables Globales char rdxUartbuffer[50];char rdxUartcounter;char *prdxUartpointer;  //Prototipos #separate void UartResetBuffer(void);#separate char UartLenBuffer(void);#separate signed char UartReadChar(void);  //Funciones //Reset Buffer Rdx #separate void UartResetBuffer(void){ rdxUartbuffer[0] = 0; prdxUartpointer = rdxUartbuffer; rdxUartcounter = 0;} //Informa cuantos datos estan esperando en el buffer USO OPCIONAL #separate char UartLenBuffer(void){ return rdxUartcounter;} //Lee datos del buffer #separate signed char UartReadChar(void){ signed char temp;  if(rdxUartcounter)   {    temp = (signed char) rdxUartbuffer[0];    memcpy(rdxUartbuffer,rdxUartbuffer+1,sizeof(rdxUartbuffer));    prdxUartpointer--;    rdxUartcounter--;   } else      {        UartResetBuffer();        return -1; // no hay mas datos      } return temp;}  // Control Interrupcion RDX#INT_RDAvoid UartRdxHandle(void){ char temp;  temp = getc(); if(rdxUartcounter < sizeof(rdxUartbuffer))   {     *prdxUartpointer = temp;     prdxUartpointer++;     rdxUartcounter++;   }}   //Principal void main (void){  UartResetBuffer();  enable_interrupts(INT_RDA);  enable_interrupts(GLOBAL);   //bla..blabla resto de tu codigo }    

Navegación

[0] Índice de Mensajes

Ir a la versión completa