Autor Tema: division 80bits / 40bits=80 bits  (Leído 1600 veces)

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

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
division 80bits / 40bits=80 bits
« en: 15 de Julio de 2005, 12:48:00 »
Hola, ya consegui hacer una rutina de division, que os dejo a continuación. Creo que es muy lenta, y ocupa muchos recursos, a ver si alguien la puede mejorar.
==========================================================
NOTA: En el dividendo no tienen el mismo nombre todas las variables, por el origen del programa donde lo he usado.
==========================================================
         LIST p=16F84A
         #INCLUDE "p16f84a.inc"
         RADIX HEX

;esta rutina divide MQ_1...A_5, entre TEMP1...TEMP5
;resultado en MQ_1...A_5
TEMPORAL   EQU H"16"
TEMPORAL2   EQU H"17"
MQ_1      EQU H"18" ;menos peso
MQ_2      EQU H"19" ;
MQ_3      EQU H"1A" ;
MQ_4      EQU H"1B" ;
MQ_5      EQU H"1C" ;
A_1       EQU H"1D" ;
A_2       EQU H"1E" ;
A_3       EQU H"1F" ;
A_4       EQU H"20" ;
A_5       EQU H"21" ;mas peso
AUX_1      EQU H"22"
AUX_2      EQU H"23"
AUX_3      EQU H"24"
AUX_4      EQU H"25"
AUX_5      EQU H"26"
AUX_6      EQU H"27"
AUX_7      EQU H"28"
AUX_8      EQU H"29"
AUX_9      EQU H"2A"
AUX_10      EQU H"2B"
CONT      EQU H"2C"
;CONT2      EQU H"2D"
TEMP1       EQU H"2E" ;menos peso
TEMP2       EQU H"2F" ;
TEMP3       EQU H"30" ;
TEMP4       EQU H"31" ;
TEMP5       EQU H"32" ;mas peso


         ORG      0
         goto   INICIO
         ORG      5

INICIO

DIV         clrf   AUX_1
         clrf   AUX_2
         clrf   AUX_3
         clrf   AUX_4
         clrf   AUX_5
         clrf   AUX_6
         clrf   AUX_7
         clrf   AUX_8
         clrf   AUX_9
         clrf   AUX_10
         movlw   .80
         movwf   CONT      ;se carga numero de bits
LOOP_DIV   bcf      STATUS, C   ;BORRA EL CARRI
         
         RLF      MQ_1
         RLF      MQ_2      
         RLF      MQ_3      
         RLF      MQ_4      
         RLF      MQ_5      
         RLF      A_1          
         RLF      A_2          
         RLF      A_3          
         RLF      A_4          
         RLF      A_5          
         RLF      AUX_1      
         RLF      AUX_2      
         RLF      AUX_3      
         RLF      AUX_4      
         RLF      AUX_5      
         RLF      AUX_6      
         RLF      AUX_7      
         RLF      AUX_8      
         RLF      AUX_9      
         RLF      AUX_10
;===comprobar si AUX_ es menor de TEMP===========
         movf   TEMP1, W
         subwf   AUX_1, W
         btfss   STATUS, C
         goto   CARRI1
         movf   TEMP2, W
C_1         subwf   AUX_2, W
         btfss   STATUS, C
         goto   CARRI2
         movf   TEMP3, W
C_2         subwf   AUX_3, W
         btfss   STATUS, C
         goto   CARRI3
         movf   TEMP4, W
C_3         subwf   AUX_4, W
         btfss   STATUS, C
         goto   CARRI4
         movf   TEMP5, W
C_4         subwf   AUX_5, W
         btfsc   STATUS, C
         goto   NO_C
         movlw   0x01
         subwf   AUX_6, W
         btfsc   STATUS, C
         goto   NO_C
         movlw   0x01
         subwf   AUX_7, W
         btfsc   STATUS, C
         goto   NO_C
         movlw   0x01
         subwf   AUX_8, W
         btfsc   STATUS, C
         goto   NO_C
         movlw   0x01
         subwf   AUX_9, W
         btfsc   STATUS, C
         goto   NO_C
         movlw   0x01
         subwf   AUX_10, W
         btfsc   STATUS, C   
         goto   NO_C   
         goto   DEC      ;HAY ACARREO. (AUX<TEMP)
NO_C      call   RESTA_DIV
         bsf      MQ_1, 0
DEC         decfsz   CONT
         goto   LOOP_DIV
         return
;==========================================         
CARRI1      incf   TEMP2, W
         goto   C_1
CARRI2      incf   TEMP3, W
         goto   C_2
CARRI3      incf   TEMP4, W
         goto   C_3
CARRI4      incf   TEMP5, W
         goto   C_4
;============================================
RESTA_DIV   movf   TEMP2, W
         movwf   TEMPORAL
         movf   TEMP1, W
         subwf   AUX_1, F
         btfss   STATUS, C
         incf   TEMPORAL, F
         movf   TEMP3, W
         movwf   TEMPORAL2
         movf   TEMPORAL, W
         subwf   AUX_2, F
         btfss   STATUS, C
         incf   TEMPORAL2, F
         movf   TEMP4, W
         movwf   TEMPORAL
         movf   TEMPORAL2, W
         subwf   AUX_3, F
         btfss   STATUS, C
         incf   TEMPORAL, F
         movf   TEMP5, W
         movwf   TEMPORAL2
         movf   TEMPORAL, W
         subwf   AUX_4, F
         btfss   STATUS, C
         incf   TEMPORAL2, F
         clrf   TEMPORAL
         movf   TEMPORAL2, W
         subwf   AUX_5, F
         btfss   STATUS, C
         incf   TEMPORAL, F
         clrf   TEMPORAL2
         movf   TEMPORAL, W
         subwf   AUX_6, F
         btfss   STATUS, C
         incf   TEMPORAL2, F
         clrf   TEMPORAL
         movf   TEMPORAL2, W
         subwf   AUX_7, F
         btfss   STATUS, C
         incf   TEMPORAL, F
         clrf   TEMPORAL2
         movf   TEMPORAL, W
         subwf   AUX_8, F
         btfss   STATUS, C
         incf   TEMPORAL2, F
         clrf   TEMPORAL
         movf   TEMPORAL2, W
         subwf   AUX_9, F
         btfss   STATUS, C
         incf   TEMPORAL, F
         clrf   TEMPORAL2
         movf   TEMPORAL, W
         subwf   AUX_10, F
         return
;======================================================

         END
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡


 

anything