De los problemas usuales en la programación está el convertir un número hexadecimal representado en 8 bits a dos carácteres ASCII los cuales sean la representación de dicho número para permitir la visualización en terminales de datos tales como Monitores de video o Impresoras entre otras.
Ejemplo:
Se quiere representar el número hexadecimal 70h cuya
representación en binario es 01110000b como los dos carácteres
ASCII "7" y "0", gráficamente:
7
|
0 en hexadecimal (8 bits) |
¯
|
¯ |
"7"
|
"0" en ascii (16 bits) |
¯
|
¯ |
37h
|
30h ascii en hexadecimal (16 bits) |
NumHex equ
0Ch
; posición donde se almacena el número a convertir
AsciiH equ
0Dh
; posición donde se almacena el resultado parte alta
AsciiL equ
0Eh
; posición donde se almacena el resultado
parte baja
.......................
.......................
movlw 0Fh
; dato para enmascarar parte alta
andwf NumHex,0
; se enmascara la parte alta del número hexa
y pasa a W
iorlw 30h
; convierte el número en ascii
movwf AsciiL
; el número queda salvado en la variable de
salida
movlw 0F0h
; dato para enmascarar parte baja
andwf NumHex,1
; se enmascara la parte baja del número hexa
y queda allí
swapf NumHex,0
; se invierten parte alta y baja
iorlw 30h
; convierte el número en ascii
movwf AsciiL
; el número queda salvado en la variable de
salida.
.....................
.....................
Se debe tener en cuenta que el ejemplo anterior funciona en forma correcta siempre y cuando lo nibbles del número hxadecimal a convertir, estén en el rango de 0 a 9, debe realizarse un tratamiento adicional a estos si se encuentran en el rango de Ah a Fh. Realice en un programa esta condición.