Autor Tema: division 32/32 bits para pic 16XXX  (Leído 2664 veces)

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

Desconectado claudio_gaite

  • PIC10
  • *
  • Mensajes: 2
division 32/32 bits para pic 16XXX
« en: 29 de Julio de 2007, 18:03:59 »
estoy buscando sin exito una rutina para realizar esta division en microchip esta en forma de macro que no lo domino bien si alguien tiene el codigo favor de pasarmelo desde ya muchas gracias Claudio Gaite

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: division 32/32 bits para pic 16XXX
« Respuesta #1 en: 30 de Julio de 2007, 16:23:12 »
Hola claudio_gaite, aquí te dejo una rutina, espero te sea de ayuda.

Código: ASM
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ;                       Divicion de 32 bit / 32 bit
  4. ;                       Son necesarios un maximo de 3267 ciclos de reloj
  5. ;                       Ocupa una capacidad total de memoria de 227 pocisiones con la resta
  6. ;                       Necesita de la resta
  7. ;
  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9.  
  10. CARRY   EQU     .32
  11.  
  12. DATO1   EQU     .33
  13. DATO2   EQU     .34
  14. DATO3   EQU     .35
  15. DATO4   EQU     .36
  16. FUNC1   EQU     .37
  17. FUNC2   EQU     .38
  18. FUNC3   EQU     .39
  19. FUNC4   EQU     .40
  20.  
  21. RES1    EQU     .41             ; RESULTADO
  22. RES2    EQU     .42             ; RESULTADO
  23. RES3    EQU     .43             ; RESULTADO
  24. RES4    EQU     .44             ; RESULTADO
  25.  
  26. DI1     EQU     .45             ; NUMERO A DIVIDIR MAS SIGNIFICATIVO
  27. DI2     EQU     .46             ; NUMERO A DIVIDIR
  28. DI3     EQU     .47             ; NUMERO A DIVIDIR
  29. DI4     EQU     .48             ; NUMERO A DIVIDIR MENOS SIGNIFICATIVO         
  30. DIV1    EQU     .49             ; NUMERO DIVISOR MAS SIGNIFICATIVO
  31. DIV2    EQU     .50             ; NUMERO DIVISOR
  32. DIV3    EQU     .51             ; NUMERO DIVISOR
  33. DIV4    EQU     .52             ; NUMERO DIVISOR MENOS SIGNIFICATIVO
  34.  
  35. MULT1   EQU     .53
  36. MULT2   EQU     .54
  37. MULT3   EQU     .55
  38. MULT4   EQU     .56
  39. CONTA   EQU     .57
  40. CONTA1  EQU     .58
  41. CONTA2  EQU     .59
  42. DATO    EQU     .60
  43.  
  44. ;................................................................................................
  45.  
  46. DIVIDE                          ;32 / 32
  47.         clrf    CONTA
  48.         clrf    CONTA1
  49.         clrf    CONTA2
  50.         clrf    DATO
  51.         clrf    FUNC1
  52.         clrf    FUNC2
  53.         clrf    FUNC3
  54.         clrf    FUNC4
  55.         clrf    MULT1
  56.         clrf    MULT2
  57.         clrf    MULT3
  58.         clrf    MULT4
  59.  
  60.         movlw   .0
  61.         subwf   DI1,W
  62.         btfss   STATUS,Z
  63.         goto    GFD
  64.         movlw   .0
  65.         subwf   DI2,W
  66.         btfss   STATUS,Z
  67.         goto    GFD
  68.         movlw   .0
  69.         subwf   DI3,W
  70.         btfss   STATUS,Z
  71.         goto    GFD
  72.         movlw   .0
  73.         subwf   DI4,W
  74.         btfss   STATUS,Z
  75.         goto    GFD
  76.         goto    DIV_SAL
  77. GFD
  78.         movf    DIV1,W
  79.         movwf   DATO
  80.         call    VER1
  81.         btfsc   CONTA2,0
  82.         goto    DIVFIN
  83.  
  84.         movf    DIV2,W
  85.         movwf   DATO
  86.         call    VER1
  87.         btfsc   CONTA2,0
  88.         goto    DIVFIN
  89.  
  90.         movf    DIV3,W
  91.         movwf   DATO
  92.         call    VER1
  93.         btfsc   CONTA2,0
  94.         goto    DIVFIN
  95.  
  96.         movf    DIV4,W
  97.         movwf   DATO
  98.         call    VER1
  99. DIVFIN
  100.         clrf    CONTA2
  101.         movf    DI1,W
  102.         movwf   DATO
  103.         call    VER
  104.         btfsc   CONTA2,0
  105.         goto    DIFIN
  106.  
  107.         movf    DI2,W
  108.         movwf   DATO
  109.         call    VER
  110.         btfsc   CONTA2,0
  111.         goto    DIFIN
  112.  
  113.         movf    DI3,W
  114.         movwf   DATO
  115.         call    VER
  116.         btfsc   CONTA2,0
  117.         goto    DIFIN
  118.  
  119.         movf    DI4,W
  120.         movwf   DATO
  121.         call    VER
  122. DIFIN
  123.         incf    CONTA1,F
  124.         movf    CONTA1,W
  125.         movwf   CONTA2
  126.         decfsz  CONTA1,F
  127.         goto    SAL1
  128.         goto    SAL2
  129. SAL1
  130.         bcf     STATUS,C
  131.         rlf     DIV4,F
  132.         rlf     DIV3,F
  133.         rlf     DIV2,F
  134.         rlf     DIV1,F
  135.         decfsz  CONTA1,F
  136.         goto    SAL1
  137. SAL2
  138.         movf    DI1,W
  139.         movwf   DATO1
  140.         movf    DI2,W
  141.         movwf   DATO2
  142.         movf    DI3,W
  143.         movwf   DATO3
  144.         movf    DI4,W
  145.         movwf   DATO4
  146. RE
  147.         movf    DIV1,W
  148.         subwf   DATO1,W
  149.         btfss   STATUS,C
  150.         goto    ARRASTRE
  151.         btfss   STATUS,Z
  152.         goto    BIEN
  153.  
  154.         movf    DIV2,W
  155.         subwf   DATO2,W
  156.         btfss   STATUS,C
  157.         goto    ARRASTRE
  158.         btfss   STATUS,Z
  159.         goto    BIEN
  160.  
  161.         movf    DIV3,W
  162.         subwf   DATO3,W
  163.         btfss   STATUS,C
  164.         goto    ARRASTRE
  165.         btfss   STATUS,Z
  166.         goto    BIEN
  167.  
  168.         movf    DIV4,W
  169.         subwf   DATO4,W
  170.         btfss   STATUS,C
  171.         goto    ARRASTRE
  172.         goto    BIEN
  173. ARRASTRE
  174.         bcf     STATUS,C
  175.         rrf     DIV1,F
  176.         rrf     DIV2,F
  177.         rrf     DIV3,F
  178.         rrf     DIV4,F
  179.         bcf     STATUS,C
  180.         rlf     MULT4,F
  181.         rlf     MULT3,F
  182.         rlf     MULT2,F
  183.         rlf     MULT1,F
  184.         bcf     MULT4,0
  185.         decfsz  CONTA2,F
  186.         goto    RE
  187.         goto    DIV_SAL
  188. BIEN
  189.         movf    DIV1,W
  190.         movwf   FUNC1
  191.         movf    DIV2,W
  192.         movwf   FUNC2
  193.         movf    DIV3,W
  194.         movwf   FUNC3
  195.         movf    DIV4,W
  196.         movwf   FUNC4
  197.  
  198.         call    RESTA
  199.        
  200.         movf    RES1,W
  201.         movwf   DATO1
  202.         movf    RES2,W
  203.         movwf   DATO2
  204.         movf    RES3,W
  205.         movwf   DATO3
  206.         movf    RES4,W
  207.         movwf   DATO4
  208.  
  209.         bcf     STATUS,C
  210.         rrf     DIV1,F
  211.         rrf     DIV2,F
  212.         rrf     DIV3,F
  213.         rrf     DIV4,F
  214.         bcf     STATUS,C
  215.         rlf     MULT4,F
  216.         rlf     MULT3,F
  217.         rlf     MULT2,F
  218.         rlf     MULT1,F
  219.         bsf     MULT4,0
  220.        
  221.         decfsz  CONTA2,F
  222.         goto    RE
  223.         goto    DIV_SAL
  224. ;.....................
  225. VER
  226.         bcf             STATUS,C
  227.         movlw   .8
  228.         movwf   CONTA
  229. QWE
  230.         btfsc   DATO,7
  231.         goto    ZXC
  232.         decf    CONTA1,F
  233.         rlf             DATO,F
  234.         decfsz  CONTA,F
  235.         goto    QWE
  236.         return
  237. ;.....................
  238. VER1
  239.         bcf             STATUS,C
  240.         movlw   .8
  241.         movwf   CONTA
  242. ASD
  243.         btfsc   DATO,7
  244.         goto    ZXC
  245.         incf    CONTA1,F
  246.         rlf             DATO,F
  247.         decfsz  CONTA,F
  248.         goto    ASD
  249.         return
  250. ;.....................
  251. ZXC
  252.         movlw   .1
  253.         movwf   CONTA2
  254.         return
  255. DIV_SAL
  256.         movf    MULT1,W
  257.         movwf   RES1
  258.         movf    MULT2,W
  259.         movwf   RES2
  260.         movf    MULT3,W
  261.         movwf   RES3
  262.         movf    MULT4,W
  263.         movwf   RES4
  264.         return
  265.  
  266. ;................................................................................................

Y acá la resta necesaria para la rutina anterior:

Código: ASM
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;
  3. ;              Resta de 32 bit - 32 bit con CARRY
  4. ;
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6.  
  7. CARRY           EQU             .32
  8.  
  9. DATO1           EQU             .33
  10. DATO2           EQU             .34
  11. DATO3           EQU             .35
  12. DATO4           EQU             .36
  13. FUNC1           EQU             .37
  14. FUNC2           EQU             .38
  15. FUNC3           EQU             .39
  16. FUNC4           EQU             .40
  17.  
  18. RES1            EQU             .41
  19. RES2            EQU             .42
  20. RES3            EQU             .43
  21. RES4            EQU             .44
  22.  
  23. ;................................................................................................
  24.  
  25. RESTA                           ;32 - 32
  26.         clrf    CARRY
  27.  
  28.         comf    DATO4,W
  29.         addwf   FUNC4,W
  30.         movwf   RES4
  31.         btfsc   STATUS,C
  32.         incfsz  FUNC3,F
  33.         goto    IOP1
  34.         incfsz  FUNC2,F
  35.         goto    IOP1
  36.         incfsz  FUNC1,F
  37.         goto    IOP1
  38.         bsf     CARRY,0
  39. IOP1   
  40.         comf    DATO3,W
  41.         addwf   FUNC3,W
  42.         movwf   RES3
  43.         btfsc   STATUS,C
  44.         incfsz  FUNC2,F
  45.         goto    IOP2
  46.         incfsz  FUNC1,F
  47.         goto    IOP2
  48.         bsf     CARRY,0
  49. IOP2
  50.         comf    DATO2,W
  51.         addwf   FUNC2,W
  52.         movwf   RES2
  53.         btfsc   STATUS,C
  54.         incfsz  FUNC1,F
  55.         goto    IOP3
  56.         bsf     CARRY,0
  57. IOP3
  58.         comf    DATO1,W
  59.         addwf   FUNC1,W
  60.         movwf   RES1
  61.         btfsc   STATUS,C
  62.         bsf     CARRY,0
  63.  
  64.         bcf     STATUS,C
  65.         btfss   CARRY,0
  66.         bsf     STATUS,C       
  67.         comf    RES4,F
  68.         comf    RES3,F
  69.         comf    RES2,F
  70.         comf    RES1,F
  71.         return
  72.  
  73. ;................................................................................................


Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado claudio_gaite

  • PIC10
  • *
  • Mensajes: 2
Re: division 32/32 bits para pic 16XXX
« Respuesta #2 en: 31 de Julio de 2007, 06:14:27 »
Muchas gracias Carlos ya mismo lo ensamblo
Claudio Gaite