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
Ir a la versión completa