Hola de nuevo desde colombia

Ahora tengo nuevos problemas.
Quiero enviar el valor del adc leído por el dsPIC30f4013 a un pic18f4550 vía Serial USART.
el problema es que solo puedo enviar 8 bits por lo tanto he tratado de realizar operaciones de corrimiento de bits en CCS no lo he logrado. anexo el código del maestro para que me ayuden a solucionar el error.

//código Maestro
#include <30F4013.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS2_PLL16 //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for
#FUSES PR_PLL //Primary Oscillator
#FUSES NOCKSFSM //Clock Switching is disabled, fail Safe clock monitor is disabled
#FUSES WPSB16 //Watch Dog Timer PreScalar B 1:16
#FUSES WPSA512 //Watch Dog Timer PreScalar A 1:512
#FUSES PUT64 //Power On Reset Timer value 64ms
#FUSES NOBROWNOUT //No brownout reset
#FUSES BORV47 //Brownout reset at 4.7V
#FUSES LPOL_HIGH //Low-Side Transistors Polarity is Active-High (PWM 0,2,4
#FUSES HPOL_HIGH //High-Side Transistors Polarity is Active-High (PWM 1,3,5
#FUSES NOPWMPIN //PWM outputs drive active state upon Reset
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOCOE //Device will reset into operational mode
#FUSES ICSP1 //ICD uses PGC1/PGD1 pins
#FUSES RESERVED //Used to set the reserved FUSE bits
#device adc=12 //ADC 12 bits
#use delay(clock=120000000)
#use rs232(baud=9600,bits=8,parity=N,UART1) //xmit=PIN_F3 = TX ,rcv=PIN_F2 = RX
#define LCD_ENABLE_PIN PIN_F4 ////
#define LCD_RS_PIN PIN_F6 ////
#define LCD_RW_PIN PIN_F5 ////
#define LCD_DATA4 PIN_D2 ////
#define LCD_DATA5 PIN_D8 ////
#define LCD_DATA6 PIN_D1 ////
#define LCD_DATA7 PIN_D0
#include <lcd.c>
#include <math.h>
float voltaje;
int16 Lect_adc;
int8 mayores;
int8 menores;
//función que calcula el voltaje
void CalcularVoltaje()
{
float adc=0;
adc= (float)Lect_adc;
voltaje=((5.0*adc)/4095);
}
//funcion enviar serial
void EnviarSerial()
{
mayores=Lect_adc>>8;
menores=Lect_adc;
putchar('*');
putc(mayores);
putc(menores);
}
//funcion leer adc
void LeerAdc()
{
set_adc_channel(2);
Lect_adc = read_adc();
delay_ms(20);
}
void main()
{
voltaje=0;
Lect_adc=0;
mayores=0;
menores=0;
lcd_init();
setup_adc_ports (sAN2|VREF_VREF);
setup_adc(ADC_CLOCK_DIV_32|ADC_TAD_MUL_2);
while(true)
{
LeerAdc();
EnviarSerial();
CalcularVoltaje();
lcd_putc("\f");
lcd_gotoxy(0,1);
printf(lcd_putc,"mayor= %u %Lu",mayores,Lect_adc);
lcd_gotoxy(0,2);
printf(lcd_putc,"men %u %f",menores,voltaje);
delay_ms(1000);
}
}
El problema lo tengo en la función EnviarSerial().
por ejemplo para las pruebas que he realizado la variable Lect_adc=4095.
mi idea sobre lo que considero que almacena esta variable es (ni idea si estoy equivocado)
Lect_adc=4095=0000111111111111 los 12bits del adc y como la variable es de 16 bits considero que se rellena con ceros

.
entonces la instrucción mayores=Lect_adc>>8; me realiza un corrimiento de 8 bits a la derecha. por lo tanto mayores=00001111 que en decimal es igual a 15. es correcto esto?
bueno me funciona

.
el problema lo tengo en menores=Lect_adc; yo pensaría que la variable se trunca es decir se guardan los primeros 8 bits de la izquierda es decir menores=11111111 lo cual en decimal es 255. Pero no

.
Ni idea necesito su ayuda por que me muestra es menores=1111111111111111 decimal 65535.
Ni idea señores agradezco cualquier sugerencia o solución para el error.