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