Muy bien AngelGris probe como me dijiste:
char valor[10]= "1024";
int16 duty;
despues viene la conversión:
duty=atol(valor);
printf(lcd_putc,"%Lu",duty);
En la pantalla display 16x2 me sale el valor convertido a una int16 solo me funciona con atol, probe con atoi y me salian puros ceros.
Por el momento se que atol funciona para int16, ahora como lo convierto y recibo ya con la UART
char caract = 'Z';
int16 Num;
Num = (int16)caract;
printf("%lu ",Num);
Bien, pues buscando y hallando otras maneras para resolver este problema, en alguna página y en algún codigo encontre que para trasformarla simplemente hacia una operacion de una variable tipo char y una entera, ¿Quien sabe porque?, simplemente no lo sé, solo se que funciona, pueden probarlo. Mas o menos quedaría así:
char valor;
int16 duty;
#INT_RDA
void serial_isr()
{
valor=getchar();
delay_ms(50);
duty=(valor-48);
printf(lcd_putc,"%Lu",duty);
Asi mismo Angelgris, solo que el necesita, segun el codigo que coloco mas arriba, el resultado en un long asi que usando el casting mata dos pajaros de un solo tiro :D