Autor Tema: Conversor a decimal  (Leído 4707 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Conversor a decimal
« en: 02 de Diciembre de 2007, 13:45:09 »
Me han comentado que existe una libreria que transforma hexadecimalen decimal o binario en decimal, alguien me podrá decir como se llama y ponerme un pequeño ejemplo para saber como funciona?? Muchas gracias

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Conversor a decimal
« Respuesta #1 en: 02 de Diciembre de 2007, 15:18:34 »
Podrías especificar, ¿en qué lenguaje programas?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Conversor a decimal
« Respuesta #2 en: 03 de Diciembre de 2007, 10:15:11 »
Estoy programando en ensamblador.
Lo que que  explicas no me queda muy claro JCC40, podrias hacer un ejempo, asi seguro que lo entiendo mejor. Gracias

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Conversor a decimal
« Respuesta #3 en: 03 de Diciembre de 2007, 10:42:18 »
Estan seguros que no hay rutinas de conversion a decimal en este foro?? :shock: :shock:
Hay que buscar.... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: Conversor a decimal
« Respuesta #4 en: 03 de Diciembre de 2007, 17:18:10 »
Bueno MGLSOFT, creo haber visto en el Almacen de Assembler una rutina, pero no la ubico. Entonces aprovechando que tengo a la mano un ejemplo de este tipo lo colocare, esperando que sea de utilidad. Esta hecho en asm, el autor no soy yo, por lo tanto lo pongo tal como lo hizo el autor. Espero no infringir ningun copyright  :D y si e asi me avizan para borrarlo  :mrgreen:

Código: ASM
  1. ;************************************ BCD_01.asm ****************************************
  2. ;
  3. ;       ===================================================================
  4. ;         Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  5. ;         E. Palacios, F. Remiro y L. Lopez.                    www.pic16f84a.com
  6. ;         Editorial Ra-Ma.  www.ra-ma.es
  7. ;       ===================================================================
  8. ;
  9. ; Un numero binario de 8 bits es convertido a BCD. El resultado se guarda en tres posiciones
  10. ; de memorias llamadas Centenas, Decenas y Unidades. Ademas al final las unidades estaran en el
  11. ; nibble bajo del registro W y las decenas en el nibble alto. En los diodos LEDs conectados al
  12. ; puerto de salida se visualizaran las decenas y las unidades.
  13. ;
  14. ; El maximo numero a convertir sera el 255 que es el maximo valor que puede adquirir el
  15. ; numero binario de entrada de 8 bits.
  16. ;
  17. ; El procedimiento utilizado es mediante restas de 10 tal como se explica en el siguiente
  18. ; ejemplo que trata de la conversión del numero 124 a BCD:
  19. ;
  20. ; (Centenas)    (Decenas)       (Unidades)       (Unidades)<10? (Decenas)=10?
  21. ; ----------    ---------       ----------      --------------  -------------------------
  22. ;
  23. ;    0                0            124          NO, resta 10    Incrementa (Decenas).
  24. ;    0                1            114          NO, resta 10    NO. Incrementa (Decenas).
  25. ;    0                2            104          NO, resta 10    NO. Incrementa (Decenas).
  26. ;    0                3             94          NO, resta 10    NO. Incrementa (Decenas).
  27. ;    0                4             84          NO, resta 10    NO. Incrementa (Decenas).
  28. ;    0                5             74          NO, resta 10    NO. Incrementa (Decenas).
  29. ;    0                6             64          NO, resta 10    NO. Incrementa (Decenas).
  30. ;    0                7             54          NO, resta 10    NO. Incrementa (Decenas).
  31. ;    0                8             44          NO, resta 10    NO. Incrementa (Decenas).
  32. ;    0                9             34          NO, resta 10    NO. Incrementa (Decenas).
  33. ;    1                0             24          NO, resta 10    Sí. (Decenas)=0, y ademas
  34. ;                                                               incrementa (Centenas)
  35. ;    1                1             14          NO, resta 10    NO. Incrementa (Decenas)
  36. ;    1                2              4          Si, se acabo.
  37. ;
  38. ; El numero a convertir sera la constante NUMERO.
  39. ;
  40. ; ZONA DE DATOS **********************************************************************
  41.  
  42.         LIST            P=16F84A
  43.         INCLUDE         <P16F84A.INC>
  44.         __CONFIG        _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
  45.  
  46.         CBLOCK  0x0C                              ; La zona de memoria de usuario comienza en esta
  47.         Centenas                                  ; dirección de memoria RAM de datos.
  48.         Decenas                                   ; Posicion 0x0D de RAM.
  49.         Unidades                                  ; Posicion 0x0E de RAM.      
  50.         ENDC
  51.  
  52. NUMERO  EQU     .124                              ; Por ejemplo.
  53.  
  54. ; ZONA DE CÓDIGOS ********************************************************************
  55.  
  56.         ORG     0                               ; El programa comienza en la dirección 0.
  57. Inicio
  58.         bsf     STATUS,RP0                      ; Acceso al Banco 1.
  59.         clrf    TRISB                           ; Las líneas del Puerto B se configuran como salida.
  60.         bcf     STATUS,RP0                      ; Acceso al Banco 0.
  61. Principal
  62.         clrf    Centenas                        ; Carga los registros con el resultado inicial.
  63.         clrf    Decenas                         ; En principio (Centenas)=0 y (Decenas)=0.
  64.         movlw   NUMERO
  65.         movwf   Unidades                        ; Se carga el número binario a convertir.
  66. BCD_Resta10
  67.         movlw   .10                             ; A las unidades se les va restando 10 en cada
  68.         subwf   Unidades,W                      ; pasada. (W)=(Unidades)-10.
  69.         btfss   STATUS,C                        ; (C)=1?, (W) positivo?, (Unidades)>=10?.
  70.         goto    BIN_BCD_Fin                     ; No, es menor de 10. Se acabo.
  71. BCD_IncrementaDecenas
  72.         movwf   Unidades                        ; Recupera lo que queda por restar.
  73.         incf    Decenas,F                       ; Incrementa las decenas y comprueba si llega a
  74.         movlw   .10                             ; 10. Lo hace mediante una resta.
  75.         subwf   Decenas,W                       ; (W)= (Decenas)-10.
  76.         btfss   STATUS,C                        ; (C)=1?, (W) positivo?, (Decenas)>=10?.
  77.         goto    BCD_Resta10                     ; No. Vuelve a dar otra pasada, restandole 10.
  78. BCD_IncrementaCentenas
  79.         clrf    Decenas                         ; Pone a cero las decenas
  80.         incf    Centenas,F                      ; e incrementa las centenas.
  81.         goto    BCD_Resta10                     ; Otra pasada, resta 10 al numero a convertir.
  82. BIN_BCD_Fin
  83.         swapf   Decenas,W                       ; En el nibble alto de W tambien las decenas.
  84.         addwf   Unidades,W                      ; Las unidades están en el nibble bajo de W.
  85.         movwf   PORTB                           ; Se visualiza por el puerto de salida.
  86.         sleep                                   ; Queda permanentemente en reposo.
  87.  
  88.         END                                     ; Fin del programa.
  89.  
  90. ;       ===================================================================
  91. ;         Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
  92. ;         E. Palacios, F. Remiro y L. Lopez.                    www.pic16f84a.com
  93. ;         Editorial Ra-Ma.  www.ra-ma.es
  94. ;       ===================================================================

P.D: tube que editar las tildes ya que sino salia un codigo raro,  :D :D.

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Conversor a decimal
« Respuesta #5 en: 05 de Diciembre de 2007, 13:45:48 »
Muchas gracias por el codigo. una vez entendido el "pequeño" problema pasemos al gran problema q tengo yo. Mi intencion es transfomar el numero y ponerlo en el lcd, pero no un numero cualquiera, me explico. Llevo un contador de personas que como mucho llega a 210.000, algunos os preguntareis, como puede tener ese valor si el maximo permitido es de 255, pero yo encadeno bytes, es decir, si 01010000=80, 00110100=52 y 00000011=3, pero juntos 00000011 00110100 01010000 =210000. espero que se entienda porque es a partir de aqui donde viene mis problemas. Como consigo convertir esa mostruosidad de numero y por supuesto como consigo pasarlo al LCD. Espero que alguien sepa responderme por que creo que esto debe ser dificil, pese a ello confio en la gente de este foro que siempre contesta. Saludos a todos y gracias

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Conversor a decimal
« Respuesta #6 en: 06 de Diciembre de 2007, 13:01:44 »
Gracias por la ayuda. Entiendo lo que me dices de restar y utilizar el mismo procedimiento pero a partir de aqui me lio porque no se que quieres decir "ara ello tendrás forzosamente (ya que estás trabajando en ensamblador) utilizar operaciones de suma/resta en binario puro de 24 bits. El código ya existe en forma de macros pero lo puedes convertir a código descendente muy fácilmente. Está en la nota de aplicación de Microchip AN617. Ahí también encontrarás rutinas para dividir, lo que puede facilitarte el proceso ya que entonces simplemente dividirías entre 100000 para obtener tus centenas de millar, etc."
No se que es la aplicacion AN617, tpc entiendo como puedo restar 100000 si el valor maximo que alcanza un byte es 255 o por que hay que dividir, ademas que no se qye es una suma/resta en binario puro de 24bits. Perdonar mi ignorancia. Espero que podais aclararme esto, mientras yo seguire investigando para hacer el codigo correcto.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Conversor a decimal
« Respuesta #7 en: 06 de Diciembre de 2007, 19:03:46 »
yo utilizo mi propio enredo para codificar esos numeros mira si te da un idea este ejemplo.

saludos




Código: ASM
  1. MOVLW   .10
  2.         MOVWF   DIEZ
  3.        
  4.         MOVLW   .100
  5.         MOVWF   CIEN_L
  6.  
  7.         MOVLW   B'11101000'     ;UNIDADES DE 1.000 PARTE BAJA
  8.         MOVWF   MIL_L
  9.         MOVLW   B'00000011' ;UNIDADES DE 1.000 PARTE ALTA
  10.         MOVWF   MIL_H
  11.  
  12.                                
  13.         MOVLW   B'00010000';UNIDADES DE 10.000 PARTE BAJA
  14.         MOVWF   DIEZMIL_L
  15.         MOVLW   B'00100111';UNIDADES DE 10.000 PARTE BAJA
  16.         MOVWF   DIEZMIL_H
  17.                                                 ;RESULTADO DE LA CONVERSION
  18.         ;MOVLW  B'10010011'
  19.         ;MOVWF  RESULT_L
  20.         ;MOVLW  B'00101011'
  21.         ;MOVWF  RESULT_H
  22.  
  23. II  MOVF        DIEZMIL_L,0       ;PARTE BAJA DE 10.000
  24.         SUBWF   RESULT_L
  25.         BTFSS   STATUS,0                ;SI LA OPERACION ES NEGATIVA
  26.         GOTO    AA                              ;VOY A AA
  27.         MOVF    DIEZMIL_H,0             ;PARTE ALTA DE 10.000
  28.         SUBWF   RESULT_H
  29.         BTFSS   STATUS,0
  30.         GOTO    FF
  31.         INCF    DIEZ_MIL,1    ;UNIDADES DE DIEZ_MIL
  32.         GOTO    II
  33.                                                 ;SI LA OPARACION ES NEGATIVA EN LA
  34. AA      MOVLW   .1                      ;PARTE BAJA DEBO
  35.         SUBWF   RESULT_H        ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L 
  36.         BTFSS   STATUS,0
  37.         GOTO    YY
  38.         MOVF    DIEZMIL_H,0
  39.         SUBWF   RESULT_H
  40.         BTFSS   STATUS,0
  41.         GOTO    GG
  42.     INCF        DIEZ_MIL,1   ;UNIDADES DE DIEZ_MIL
  43.         GOTO    II
  44.  
  45. YY      INCF    RESULT_H,1      ;SI AL RESTARLE 1 A LA PARTE ALTA DEL RESULTADO
  46.         GOTO    EE                      ;EL RESULATDO ES NEGATIVO SE DEBE TENER EN CUENTA
  47.                                                 ;DE RESTABLECER EL RESULT_H Y SEGUIR CON LAS MIL
  48.  
  49.                                                 ;ACONDICIONO EL RESULTADO Y SIGO CON LAS UNIDADES DE MIL
  50. GG      INCF    RESULT_H,1
  51. FF  MOVF        DIEZMIL_H,0
  52.         ADDWF   RESULT_H
  53. EE      MOVF    DIEZMIL_L,0
  54.         ADDWF   RESULT_L
  55.  
  56. ;SIGO CON LAS UNIDADESS DE 1.000
  57.        
  58. HH      MOVF    MIL_L,0        ;PARTE BAJA DE 1.000
  59.         SUBWF   RESULT_L
  60.         BTFSS   STATUS,0
  61.         GOTO    JJ
  62.         MOVF    MIL_H,0         ;PARTE ALTA DE 1.000
  63.         SUBWF   RESULT_H
  64.         BTFSS   STATUS,0
  65.         GOTO    KK
  66.         INCF    MIL,1           ;UNIDADES DE MIL
  67.         GOTO    HH
  68.        
  69.  
  70.  
  71.  
  72.  
  73.  
  74. JJ  MOVLW       .1                      ;SI LA OPARACION ES NEGATIVA EN LA
  75.         SUBWF   RESULT_H        ;PARTE BAJA DEBO
  76.         BTFSS   STATUS,0        ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L
  77.         GOTO    LL
  78.         MOVF    MIL_H,0
  79.         SUBWF   RESULT_H
  80.         BTFSS   STATUS,0
  81.         GOTO    MM
  82.     INCF        MIL,1           ;UNIDADES DE MIL
  83.         GOTO    HH
  84.  
  85.  
  86. LL      INCF    RESULT_H,1      ;SI AL RESTARLE 1 A LA PARTE ALTA DEL RESULTADO
  87.         GOTO    NN                      ;EL RESULATDO ES NEGATIVO SE DEBE TENER EN CUENTA
  88.                                                 ;DE RESTABLECER EL RESULT_H Y SEGUIR CON LAS CIEN
  89.        
  90. MM      INCF    RESULT_H,1
  91. KK      MOVF    MIL_H,0
  92.         ADDWF   RESULT_H
  93. NN      MOVF    MIL_L,0
  94.         ADDWF   RESULT_L
  95.  
  96.  
  97.  
  98. ;SIGO CON LAS UNIDADESS DE 100
  99. OO
  100.         MOVF    CIEN_L,0      
  101.         SUBWF   RESULT_L
  102.         BTFSS   STATUS,0
  103.         GOTO    RR
  104.         INCF    CENTENAS,1     ;UNIDADES DE CIEN
  105.         GOTO    OO
  106.  
  107.  
  108. RR  MOVLW       .1                     
  109.         SUBWF   RESULT_H               
  110.         BTFSS   STATUS,0
  111.         GOTO    PP
  112.     INCF        CENTENAS,1  ;UNIDADES DE CIEN
  113.         GOTO    OO
  114.  
  115.                                                
  116. PP      INCF    RESULT_H,1      ;SI AL RESTARLE 1 A LA PARTE ALTA DEL RESULTADO
  117.         MOVF    CIEN_L,0        ;EL RESULATDO ES NEGATIVO SE DEBE TENER EN CUENTA
  118.         ADDWF   RESULT_L        ;DE RESTABLECER EL RESULT_H Y SEGUIR CON LAS DIEZ
  119.        
  120.        
  121.  
  122. ;SIGO CON LAS UNIDADES DE 10
  123.  
  124. TT      MOVF    DIEZ,0
  125.         SUBWF   RESULT_L
  126.         BTFSS   STATUS,0
  127.         GOTO    UU
  128.         INCF    DECENAS,1
  129.         GOTO    TT
  130. UU      MOVF    DIEZ,0
  131.         ADDWF   RESULT_L,0    ;LAS UNIDADES
  132.         MOVWF   UNIDADES
  133. RETURN

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Conversor a decimal
« Respuesta #8 en: 06 de Diciembre de 2007, 19:09:18 »
ejemplo 500.000 tienes que dividirlo entre 100.000 para poder sacar las 5 centenas de mil .

saludos

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Conversor a decimal
« Respuesta #9 en: 06 de Diciembre de 2007, 19:15:58 »
ten en cuenta que tendras que anexarle el valor de 100.000 ya que esta decodificacion BCD esta hasta 99.999

saludos

Desconectado janmego

  • PIC10
  • *
  • Mensajes: 15
Re: Conversor a decimal
« Respuesta #10 en: 07 de Diciembre de 2007, 01:25:59 »
Pues compañero huntergti yo te puedo colaborar con este código que hice para un proyecto hace un tiempo. Haber te explico: tenia que visualizar un numero de hasta 16bits (dos registros) que estaba almacenado en RESULTADOH y RESULTADOL, entonces lo que hice fue dividir por 100 luego por 10 y por ultimo quedaban las unidades, el proceso de división es mas o menos como lo menciona JCC40 pues se hace complemento a dos y se suma normalmente hasta que el resultado de 0 o menor que 0 encaso de menor que 0 se vuelve al valor anterior y se retorna.

Código: [Seleccionar]
VISUALIZACION
MOVF RESULTADOH,0 ;Cargo DIVIDENDOH con RESULTADOH
MOVWF DIVIDENDOH ;
MOVF RESULTADOL,0 ;cargo DIVIDENDOL con RESULTADOL
MOVWF DIVIDENDOL ;
CLRF DIVISORH ;clareamos DIVISIORH
MOVLW 64 ;cargamos w con 100
MOVWF DIVISORL ;
CALL DIVISION ;divide por 100 para saber las centanas del numero a mostrar
MOVF RESULTADOL,0 ;movemos RESULTADOL a PORTB
MOVWF PORTB ;
CLRF DIVISORH ;clareamos DIVISIORH
MOVLW 0A ;cargo DIVISORL 10
MOVWF DIVISORL ;
CALL DIVISION ;divide por 10 para saber las decenas del numero a mostrar
MOVF RESULTADOL,0 ;muestro RESULTADOL por PORTC
MOVWF PORTC ;
MOVF DIVIDENDOL,0 ;
MOVWF PORTD     ;lo que sobra son las unidades
RETURN ;

time_adq
    movlw 20 ;Rutina de retardo para tiempo de adquicicion para el conversor ADC
    movwf CONTA ;
aqui
    decfsz CONTA ;
    goto aqui ;
    return ;


DIVISION

CLRF RESULTADOH ;clareamos RESULTADOH y RESULTADOL
CLRF RESULTADOL ;
;COMPLEMENTO A 2 DE DIVISOR
COMF DIVISORL,1       ;complemento a uno DIVISORL
COMF DIVISORH,1 ;complemento a uno DIVISORH
MOVLW 01 ;cargo w con 1
ADDWF DIVISORL,1 ;sumamos uno para el complemento a dos
BTFSC STATUS,C ;si hay acarreo suma 1 a DIVISORH
ADDWF DIVISORH,1 ;
DIVISION1
MOVF DIVISORL,0 ;carga w con DIVISORL
ADDWF DIVIDENDOL,1 ;suma DIVISORL y DIVIDENDOL
BTFSC STATUS,C ;SI HAY ACARREO incremento DIVIDENDOH
INCF DIVIDENDOH,1 ;
MOVF DIVISORH,0 ;si no hay acarreo suma DIVISORH y DIVIDENDIH
ADDWF DIVIDENDOH,1 ;

BTFSC STATUS,C ;si hay acarreo va a MENORCERO
GOTO MAYORCERO ;si no hay acarreo va a MAYORCERO
GOTO MENORCERO ;

MAYORCERO ;El resultado lleva la cuenta de las veses que se resta y este valor es el coeficiente de la divicion
MOVLW 01 ;cargo w con 01
ADDWF RESULTADOL,1 ;incremento RESULTADO
BTFSC STATUS,C ;si hay acarreo incrementa RESULTADOL
INCF RESULTADOH,1 ;
GOTO DIVISION1 ;si no hay acarreo va a DIVISION1

MENORCERO ;Esta rutina es para volver el valor del dividendo al su resultado inmediatamente anterior
;COMPLEMENTO A 2 DE DIVISOR
COMF DIVISORL,1 ;
COMF DIVISORH,1 ;
MOVLW 01 ;
ADDWF DIVISORL,1 ;
BTFSC STATUS,C ;
ADDWF DIVISORH,1 ;

MOVF DIVISORL,0 ;
ADDWF DIVIDENDOL,1 ;
BTFSC STATUS,C ;
INCF DIVIDENDOH,1 ;
MOVF DIVISORH,0 ;
ADDWF DIVIDENDOH,1 ;

RETURN ;

Espero que te sirva, lo que tendrías que hacer es ampliar el numero a dividir ya que serian de tres registros (24 bits) y aumentar los llamados a la división colocando antes los numeros por los que necesitas dividir. En este código se visualiza por diferentes puertos para utilizar displays (BCD) pero ya teniendo el valor convertido puedes visualizarlo con LCD.

Suerte

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Conversor a decimal
« Respuesta #11 en: 12 de Diciembre de 2007, 17:27:50 »
Solo queria agradecer una vez mas vuestras respuestas las cuales me han inspirado ax escribir el codigo. Me he basado en el codigo de microcom ya que el otro me liaba mucho. cuando lo tenga terminado lo subire por si le hiciera falta a alguien.  :-)

Desconectado huntergti

  • PIC12
  • **
  • Mensajes: 62
Re: Conversor a decimal
« Respuesta #12 en: 10 de Enero de 2008, 17:01:44 »
Como lo prometido es deuda aqui esta mi codigo conversor que llega hasta centenas de millar. Espero que os sirva 8)
   DIEZ   EQU   0X10
   CIEN_L   EQU   0X30
   MIL_L   EQU   0X35
   MIL_H   EQU   0X31
   DIEZMIL_L   EQU   0X17
   DIEZMIL_H   EQU   0X32
   CIENMIL_L   EQU   0X15
   CIENMIL_M   EQU   0X27
   CIENMIL_H   EQU   0X28
   CENTENAS   EQU   0X19
   DECENAS      EQU   0X20
   UNIDADES   EQU   0X13
   MIL      EQU   0X21
   DIEZ_MIL   EQU   0X22
   CIENMIL      EQU   0X23
   aux      EQU   0X24
   aux2      EQU   0X25
   aux3      EQU   0X26

; ZONA DE CÓDIGOS ********************************************************************

   ORG   0
Inicio   
   CLRF   CIENMIL
   CLRF   DIEZ_MIL
   CLRF   MIL
   CLRF   CENTENAS
   CLRF   DECENAS
   CLRF   UNIDADES
         MOVLW    B'10011111'
         MOVWF    aux
         MOVLW    B'00000000'
         MOVWF    aux2
   MOVLW   B'00000011'
   MOVWF   aux3
        MOVLW .10
         MOVWF DIEZ
         MOVLW .100
        MOVWF CIEN_L
         MOVLW .232 ;UNIDADES DE 1.000 PARTE BAJA
        MOVWF MIL_L
        MOVLW B'00000011' ;UNIDADES DE 1.000 PARTE ALTA
        MOVWF MIL_H

        MOVLW B'00010000';UNIDADES DE 10.000 PARTE BAJA
        MOVWF DIEZMIL_L
         MOVLW B'00100111';UNIDADES DE 10.000 PARTE BAJA
         MOVWF DIEZMIL_H
   movlw   .1
   movwf   CIENMIL_H
   movlw   .134
   movwf   CIENMIL_M
   movlw   b'10100000'
   movwf   CIENMIL_L
         ;RESULTADO DE LA CONVERSION


cien_mil
   
   movf   CIENMIL_L,0
   subwf   aux,1
   BTFSS   STATUS,0
   goto   acarreo_cienmil
   movf   CIENMIL_M,0
   subwf   aux2,1
   btfss   STATUS,0
   goto   acarreo_cienmill3
   movf   CIENMIL_H,0
   subwf   aux3,1
   btfss   STATUS,0
   goto   sumar_cienmil1
   
   incf   CIENMIL,1
   goto   cien_mil
   
acarreo_cienmil

   MOVLW .1       ;PARTE BAJA DEBO
         SUBWF aux2,1       ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L
         BTFSS STATUS,0
         GOTO  acarreo_cienmil11

         MOVF CIENMIL_M,0
         SUBWF aux2,1
         BTFSS STATUS,0
   GOTO   acarreo_cienmil14
         MOVF   CIENMIL_H,0
   SUBWF   aux3,1
   BTFSS   STATUS,0
   GOTO   acarreo_cienmil10

          INCF CIENMIL,1   ;UNIDADES DE DIEZ_MIL
         GOTO cien_mil

acarreo_cienmil14

   MOVLW .1       ;PARTE BAJA DEBO
         SUBWF aux3,1       ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L
         BTFSS STATUS,0
         GOTO  fin2
   movf   CIENMIL_H,0
   subwf   aux3,1
   btfss   STATUS,0
   goto   fin3
   incf   CIENMIL
   goto   cien_mil
acarreo_cienmil11
   
   MOVLW    .1       ;PARTE BAJA DEBO
         SUBWF    aux3,1
   btfss   STATUS,0
   goto   fin1
   movf   CIENMIL_M,0
   SUBWF   aux2,1   
   movf   CIENMIL_H,0
   SUBWF   aux3,1
   btfss   STATUS,0
   goto   acarreo_cienmill3
   incf   CIENMIL
   goto   cien_mil
acarreo_cienmil10

   incf   aux2
   goto   sumar_cienmil1

acarreo_cienmil4
 
   INCF aux3,1    ;SI AL RESTARLE 1 A LA PARTE ALTA DEL RESULTADO
         GOTO sumar_diezmil2

acarreo_cienmill3

   MOVLW .1       ;PARTE BAJA DEBO
         SUBWF aux3,1       ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L
         BTFSS STATUS,0
         GOTO  acarreo_cienmil4

         MOVF CIENMIL_H,0
         SUBWF aux3,1
         BTFSS STATUS,0
         GOTO   acarreo_cienmil6

          INCF CIENMIL,1   ;UNIDADES DE DIEZ_MIL
         GOTO cien_mil

acarreo_cienmil12
   
   incf   aux3
   incf   aux3
   incf   aux2
   goto   sumar_cienmil2

acarreo_cienml13

   incf   aux3
   incf   aux2
   goto   sumar_cienmil1
fin1

   incf   aux2
   incf   aux3
   goto   sumar_cienmil3

fin2

   incf   aux3
   incf   aux2
   goto   sumar_cienmil2

fin3

   incf   aux3
   incf   aux2
   goto   sumar_cienmil1

acarreo_cienmil6

   incf   aux3

sumar_cienmil1

   MOVF CIENMIL_H,0
         ADDWF aux3,1

sumar_cienmil2

   MOVF CIENMIL_M,0
         ADDWF aux2,1

sumar_cienmil3

   MOVF CIENMIL_L,0
         ADDWF aux,1
   

diez_mil
   
   movf   DIEZMIL_L,0
   subwf   aux,1
   BTFSS   STATUS,0
   goto   acarreo_diezmil
   movf   DIEZMIL_H,0
   subwf   aux2,1
   btfss   STATUS,0
   goto   acarreo_diezmil2
   incf   DIEZ_MIL,1
   goto   diez_mil
   
acarreo_diezmil

   MOVLW    .1       ;PARTE BAJA DEBO
         SUBWF    aux2,1       ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L
         BTFSS    STATUS,0
         GOTO     acarreo_diezmil5
         MOVF    DIEZMIL_H,0
         SUBWF    aux2,1
         BTFSS    STATUS,0
   GOTO   acarreo_diezmil4
          INCF    DIEZ_MIL,1   ;UNIDADES DE DIEZ_MIL
         GOTO    diez_mil

acarreo_diezmil4

   movlw   .1
   subwf   aux3,1
   btfss   STATUS,0
   goto   fin_diezmil1
   incf   DIEZ_MIL
   goto   diez_mil

acarreo_diezmil2

   MOVLW    .1       ;PARTE BAJA DEBO
         SUBWF    aux3,1       ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L
         BTFSS    STATUS,0
         GOTO     fin_diezmil3
          INCF    DIEZ_MIL,1   ;UNIDADES DE DIEZ_MIL
         GOTO    diez_mil

acarreo_diezmil5
   
   MOVLW    .1       ;PARTE BAJA DEBO
         SUBWF    aux3,1       ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L
         BTFSS    STATUS,0
         GOTO     fin_diezmil2
          INCF    DIEZ_MIL,1   ;UNIDADES DE DIEZ_MIL
         GOTO    diez_mil
   

fin_diezmil1

   incf   aux2
   incf   aux3
   goto   sumar_diezmil1

fin_diezmil2

   incf   aux3
   incf   aux2
   goto   sumar_diezmil2

fin_diezmil3
 
   INCF    aux3,1       ;SI AL RESTARLE 1 A LA PARTE ALTA DEL RESULTADO
         GOTO    sumar_diezmil1


sumar_diezmil1

   MOVF    DIEZMIL_H,0
         ADDWF    aux2,1

sumar_diezmil2

   MOVF    DIEZMIL_L,0
         ADDWF    aux,1

mil
   movf   MIL_L,0
   subwf   aux,1
   BTFSS   STATUS,0
   goto   acarreo_mil
   movf   MIL_H,0
   subwf   aux2,1
   btfss   STATUS,0
   goto   sumar_mil1
   incf   MIL,1
   goto   mil
   
acarreo_mil

   MOVLW    .1       ;PARTE BAJA DEBO
         SUBWF    aux2,1       ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L
         BTFSS    STATUS,0
         GOTO     fin_mil1
         MOVF    MIL_H,0
         SUBWF    aux2,1
         BTFSS    STATUS,0
   GOTO   fin_mil2
          INCF    MIL,1   ;UNIDADES DE DIEZ_MIL
         GOTO    mil

fin_mil1

   incf   aux2
   goto   sumar_mil2

fin_mil2

   incf   aux2
   goto   sumar_diezmil1


sumar_mil1

   MOVF    MIL_H,0
         ADDWF    aux2,1

sumar_mil2

   MOVF    MIL_L,0
         ADDWF    aux,1

cien
   movf   CIEN_L,0
   subwf   aux,1
   BTFSS   STATUS,0
   goto   acarreo_cien
   incf   CENTENAS,1
   goto   cien
   
acarreo_cien

   MOVLW    .1       ;PARTE BAJA DEBO
         SUBWF    aux2,1       ;RESTARLE 1 A LA PARTE ALTA DE RESUL_L
         BTFSS    STATUS,0
         GOTO     fin_cien1
          INCF    CENTENAS,1   ;UNIDADES DE DIEZ_MIL
         GOTO    cien

fin_cien1
   
   incf   aux2
   goto   sumar_cien1

sumar_cien1

   MOVF    CIEN_L,0
         ADDWF    aux,1

diez   
   movf   DIEZ,0
   subwf   aux,1
   BTFSS   STATUS,0
   goto   sumar_diez1
   incf   DECENAS,1
   goto   diez

sumar_diez1

   MOVF    DIEZ,0
         ADDWF    aux,1

unidades

   movf   aux,0
   movwf   UNIDADES
   goto   Inicio
END