unsigned char lee_cad_usart(char *buf, char longitud)
{
char i;
for(i=0;i<longitud;i++)
*buf++ = lee_usart();
// Incrementa el puntero, si no lo que estas haciendo es leer la usart 20 veces y cargarlo siempre en la dirección
// del primer carácter de buff solapando uno encima del otro.
// aparte, cuando quieras acceder al contenido de memoria de un puntero tanto para leerlo
// como para modificarlo tienes que ponerle el *delante.
} // <<---- No encuentro la llave de cierre de esta función en tu código.