Mostrar temperatura en un LCD

Hola!
Estoy realizando un proyecto que entre otras cosas mide temperatura. Utilizando un micro 8052, un LM35, un ADC0804 y un display LCD16x2 necesito mostrar en el display la temperatura que ingresa por uno de los puertos.
El problema es que la temperatura la ingreso al microprocesador como un 'char' de 8 bits, pero para poder imprimirla en el display necesito el valor ASCII por separado de cada numero que compone la cifra. Es decir, si estoy midiendo 27ºC, el valor que ingresa al puerto sera 00011011, pero para mostrarlo en el display necesito mediante este numero binario obtener el valor ASCII del '2' y del '7'. ¿Como puedo hacer un algoritmo que a partir del numero binario me entregue los valores ASCII de cada cifra?
Gracias!
 
Saludos rampage:

Lo que puedes usar es cambiar de formato binario a formato bcd. Te explico...

como tus mediciones son en números decimales puedes escribir el número 27 en 2 nibbles (nibble es un dato de 4 bits): 0010 para el 2 y 0111 para el 7. Así puedes escribir el número 27 en formato BCD como un sólo byte 00100111 (obviamente que no es lo mismo que en binario, ya que este número es 39).

para mandar los números en ASCII al LCD lo único que debes es sumarle 0x30 (o lo que es lo mismo 48 en decimal) ya que si te fijas en la tabla ASCII, los números del 0 al 9 ocupan las posiciones 0x30 al 0x39 en hexadecimal.

Para mandar el 27, puedes usar una pequeña rutina de ands y corrimientos rrf del dato.

supongamos que tienes el dato en una variable llamada "dato" y tienes una variable temporal de ayuda, sería algo así


movf dato,W
movwf temporal ;para no perder el dato
rrf temporal,F ;para dejar el primer las decenas en formato bcd
rrf temporal,F ;para el ejemplo de 27
rrf temporal,F ;de 00100111
rrf temporal,F ;pasaras a tener 00000010
addlw 0x30 ;para pasar a ASCII
call Funcion_que_escriba_numero_en_LCD ;nada que comentar aquí
movf dato,W
andlw 0x0F ;para tener nibble bajo
addlw 0x30 ;para pasar a ASCII
call Funcion_que_escriba_numero_en_LCD ;nada que comentar aquí

espero esto te sirva de algo
saludos!
 
Atrás
Arriba