muchas gracias por la idea. ya lo termine y puedo concatenar haasta 3 bytes (3 digitos), desde labview envio un@ para identificar la trama y otro@ para finalizarla y leo lo que hay entre ellos y lo guardo en un vector y ahi si se cual es unidades decenas o centenas.
aca dejo el codigo muchas gracias.
while(1)
{
__delay_ms(800);
if(BufferIn[1]==49){ // longitud 1byte
printf("\r%d %d %d %d \n",BufferIn[0],BufferIn[1]-48,BufferIn[2]-48,BufferIn[3]);// trama por separado
b=(BufferIn[2]-48) ;
printf("\r%d \n",b);
}
if(BufferIn[1]==50){//longitud 2 byte
printf("\r%d %d %d %d %d \n",BufferIn[0],BufferIn[1]-48,BufferIn[2]-48,BufferIn[3]-48,BufferIn[4]);// trama por separado
b=(((BufferIn[2]-48)*10) +BufferIn[3]-48);
printf("\r%d \n",b);
}
if(BufferIn[1]==51){ longitud 3byte
printf("\r%d %d %d %d %d %d \n",BufferIn[0],BufferIn[1]-48,BufferIn[2]-48,BufferIn[3]-48,BufferIn[4]-48,BufferIn[5] ); // trama por separado
b=(((BufferIn[2]-48)*100) +((BufferIn[3]-48)*10)+((BufferIn[4]-48)) ); //unidades decennas*10 centenas *100 3 bytes separados asi los concateno
printf("\r%d \n",b);
}
//----------------------------------------------------------
if(RCIF){
/*El registro "RCREG" tiene el byte recibido*/
bytein=RCREG;
bytein=RCREG;
BufferIn[pos]=bytein;
pos++; //vario posicion vector
if(BufferIn[0]==64 && BufferIn[1]==49){ // si el primera posicion del vector[0] es el identificador de la trama [1]==49 es # bytes 1 (1 digito)
if(pos>3) pos=0; // colocarlo e dos bytes vector 4 posiciones
}
if(BufferIn[0]==64 && BufferIn[1]==50){// si el primera posicion del vector[0] es el identificador de la trama [1]==49 es # bytes 2 (2 digito)
if(pos>4) pos=0; // colocarlo e dos bytes vector 5 posiciones
}
if(BufferIn[0]==64 && BufferIn[1]==51){// si el primera posicion del vector[0] es el identificador de la trama [1]==49 es # bytes 3 (3 digito)
if(pos>5) pos=0; // colocarlo e dos bytes vector 6 posiciones
}
RCIF=0; //Limpia bandera de interrupcion
}