Exactamente no entendi cual era tu duda.
Desde la UART solo podes recibir un byte, asi que es de 0x00 a 0xFF el valor recibido y a guardar.
Ahora el tamaño del "buffer", array que creas, eso depende un poco de la memoria del micro. Y tambien de los compiladores, por ejemplo XC8 cuando pasa una cierta cantidad te pide que modifiques un poco demasiado a mi gusto el archivo del linker.
Es decir podes hacer
char buffer1[9999999999] si es que tu compilador lo soporta y tenes espacio en el micro, por razones obvias uno no posee tal cantidad de memoria y como dije por ahi los compiladores tiran la bronca
tambien xbuff1 si llega a 255 deberia ocurrir un overlfow y quedar en 0 al incrementarse nuevamente, con lo cual:
buffer1[xbuff1++]=c;
bastaria...
me baso todo en supuestos, ya que no se si el compilador agregara algo mas (que uno no sabe) podria ocurrir algo disinto. Si hace lo que se le dice entonces deberia ser asi.
Todavia no entiendo por que un buffer TAN grande
Otra pregunta que se me cruza respecto al codigo (aunque lo estes usando de ejemplo) es por que usarlo asi?...
int const lenbuff=255;
Esto significa que esa constante se guarde en la flash, y cada ves que se necesite comparar con algo tenga que leerse de la misma.
Si haces
#define LENBUFF 255
Es distinto ya que se reemplazaria directamente en el codigo, la mayuscula es solo una convencion de las constantes.