suky he probado los distintos formatos para el printf y nada.
E_Blue no estoy debuggeando La verdad soy novato en el manejo de pic pero bueno lo intentare.
por el momento he ido a proteus para realizar simulación. y parece que funciona de 2 maneras
Posteo el código para simulación pic18f4550 los dsPIC serie 30f no estan incluidos en proteus
//configuración de fuses
#include <18F4550.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES XTPLL //Crystal/Resonator with PLL enabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES BORV28 //Brownout reset at 2.8V
#FUSES NOPUT //No Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES MCLR //Master Clear pin enabled
#FUSES LPT1OSC //Timer1 configured for low-power operation
#FUSES NOXINST //Extended set extension and Indexed Addressing mode
#FUSES PLL1 //No PLL PreScaler
#FUSES CPUDIV1 //No System Clock Postscaler
#FUSES USBDIV //USB clock source comes from PLL divide by 2
#FUSES VREGEN //USB voltage regulator enabled
#FUSES ICPRT //ICPRT enabled
#use delay(clock=48000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,bits=8,parity=N)
#define LCD_ENABLE_PIN PIN_B4
#define LCD_RS_PIN PIN_B2
#define LCD_RW_PIN PIN_B3
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
#include <stdlib.h>
int16 dato;
int8 mayores=0;
int8 menores=0;
void EnviarSerial()
{
// mayores=dato>>8;
// menores=dato;
mayores=make8(dato,0);
menores=make8(dato,1);
putchar('*');
putc(mayores);
putc(menores);
}
void main()
{
dato=4095;
lcd_init();
while(true)
{
EnviarSerial();
lcd_gotoxy(0,1);
printf(lcd_putc,"\f menores1=%u",menores);
lcd_gotoxy(0,2);
printf(lcd_putc," mayores1=%u",mayores);
delay_ms(200);
}
}
Bueno sencillo como para buscar errores

.
La función que nos interesa.
mayores=dato>>8;
menores=dato;
mayores=make8(dato,0);
menores=make8(dato,1);
He probado y efectivamente como lo comente la primera vez Funciona.
dato=4095
mayores=dato>>8; mayores =15 printf(lcd_putc," mayores1=%u",mayores);
menores=dato; menores =225 printf(lcd_putc,"\f menores1=%u",menores);
ahora realice la siguiente prueba
dato=4095
mayores=make8(dato,0); mayores=15 printf(lcd_putc," mayores1=%u",mayores);
menores=make8(dato,1); menores=225 printf(lcd_putc,"\f menores1=%u",menores);
Como lo pueden ver de las 2 formas obtengo el mismo resultado la simulación la he realizado en proteus 7.9 SP1.
Ahora Señores no he realizado la prueba en protoboard la realizare mañana y posteare los resultados obtenidos, pero sigo con mi duda por que en el dsPIC obtengo otros resultados sera por el compilador del CCS ?