# Pasar de hexadecimal a decimal en 8051(nº de 2 bytes)



## ondia69 (Jul 15, 2008)

muy buenas! el tema es que se realizar un programa que realice la conversion de hexadecima a decimal siempre que el numero no exceda de 64h. La cuestion es que me gustaria realizar uno q transformadorrme numeros como 1ED y similares. Estoy encajonado y no se me ocurre como hacerlo! Me podrian echar una mano? Gracias


----------



## Chico3001 (Jul 15, 2008)

Usa el algoritmo de corrimiento y suma, en esta pagina explican como funciona y te dan un ejemplo para PIC, solo tendrias que exportar el algoritmo a 8051

http://micropic.wordpress.com/2007/06/21/binario-a-bcd-recorre-y-suma3/


----------



## Gorkyte (Oct 16, 2008)

Estoy trabajando en un proyecto, y no me quiero entretener mucho con este tema. Les agradeceria si alguien me podria poner un ejemplo a ayudarme para realizar un programa para pasar un numero HEXADECIMAL a DECIMAL en C. 

Querria pasar por ejemplo  0x1F y que me dara resultado:  31 

De 0x10 en hexadecimal que me lea 16 en decimal, y asi con todos los numeros. 

Muchisimas gracias.


----------



## mono105 (Oct 20, 2008)

Esta funcion convierte de hexa a bcd. Con solo cambiar los tamaños de las variables se puede alcanzar mayor rango. Tengo varias rutinas de este tipo en asembler para el 8051. Espero q les sea util.


```
int conversion (int dato){               //dato = dato a convertir
unsigned char indice;
int resultado, entero, resto;
if (dato>=10){
	while (dato>=10){
		entero = dato / 10;
		resto=dato - (entero*10);
		resto=resto<<indice;
		resultado|=resto;
		indice+=4;
		dato=entero;
		}
	entero=entero<<indice;
	resultado|=entero;
	}
else resultado=dato;
return resultado;                        //resultado de conversion
}
```


----------



## IngAbraham (Mar 2, 2011)

Hola, andaba por aqui y me topé con el codigo. Lo corrí tal cual pero no funcionó, le hice unas pequeñas modificaciones y quedó perfecto. Quedó de la siguiente manera:

int conversion (int dato){               //dato = dato a convertir
unsigned char indice=0;
int resultado, entero, resto;
resultado=0;
if (dato>=10){
	while (dato>=10){
		entero = dato / 10;
		resto=dato - (entero*10);
		resto=resto<<indice;
		resultado|=resto;
		indice=4;
		dato=entero;
		}
	entero=entero<<4;
	resultado|=entero;
	}
else resultado=dato;
return resultado;                        //resultado de conversion
}

solo inicialice las variables en cero y modifiqué el corrimiento "indice"


----------



## czwienczek (Jun 6, 2013)

Primero busca cada nible, segun la posición de peso (unidad, decena, centena...) a cada una le corresponde un valor Dec, que luego procederas a sumar para ir configurando el numero definitivo...
ve este ejemplo: 
Convertir 5AFh a Dec usando tablas.
500h ---> 1280d
0A0 --->  160d
00F --->    15d
5AFh ---> 1455d

Fijate que tienes que escanear el nible o digito y saber su valor con posición incluido en una gran tabla, lo que procede luego es Sumar  en decimal todo el resultado almacenado en buffer.

Espero te sirva...
José Czwienczek


----------

