Olha, sem querer ser chato, mas essas dúvidas são referentes a linguagem C e não a microcontroladores pic...
Outrora, como além de chato gosto de ficar ostentando que eu sei um pouco mais do que a média que acessa o fórum, responderei aqui e logo em seguida ficarei me achando o cara:
Assim ó:
-Supondo que tu quer juntar duas variaveis de 8 bits numa de 16...
(Embora só os 12 bits sejam significativos...O compilador não tem tipo de 12 bits....)
...
unsigned char cont1,cont2;
unsigned int total;
cont1 = getPortA(); //abstração de algo que Lê um port genérico
cont2 = getPortB() && 0xFF;
total = cont1<<8 | cont2;
Olha:
Agora pra pegar algo que vem seriado é só ir shiftando conforme vai lendo...
Cara, eu sou muito metido, tá loco!
