hola, bueno lo solucione con tu funcion que pasa de ascii a int(hex) y quedo asi:
int16 perimetro;
int aschex2int(char d);
...
int aschex2int(char d){ // Convierte un caracter ascii hex a int
int r=0; // Declaro e inicializo a cero el resultado
if(isxdigit(d)){ // Si es un digito hexadecimal ...
if(isdigit(d)){ // si es un digito decimal ...
r=d-'0'; // devuelvo su diferencia con el valor ascii del caracter "0"
}
if(isalpha(d)){ // si es alfanumerico ...
d=toupper(d); // lo paso a mayusculas y ...
r=10+(d-'A'); // devuelvo 10 mas su diferencia con el valor ascii de la letra "A"
}
}
return(r);
}
....
if((cbuff[0]=='E')&&(cbuff[1]=='P')){ // Comparo inicio del buffer con comando "EP"
int plow, phigh;
// printf("P%4lu %lX\n\r",perimetro,perimetro);
phigh =(16*aschex2int(cbuff[2])); // Convierto el dígito mas significativo
phigh+=(aschex2int(cbuff[3]));
plow=(16*aschex2int(cbuff[4])); // Convierto el dígito mas significativo
plow+=(aschex2int(cbuff[5]));
printf("var %X %X\r\n",phigh,plow);
perimetro=0;
perimetro=Make16(phigh,plow);
printf("P %4Lu %LX\n\r",perimetro,perimetro);
// printf("Leyendo ... "); // Aqui lo que deseemos hacer con comando "\r"
}
saludos y gracias
Osvaldo