Hallo
Also mein Problem ist wiefolgt des Dividieren, aber die Routine funktioniert bei kleinen Zahlen 8bit durch 8 bit beschraenkt(so lange die Zahl nicht zu gross wird) aber die Routine ist eigentlich fuer 16/8 Bit gedacht.
Und ich muss mit grossen Zahlen Rechnen.
Muss ich irgendwas Wichtiges beachten beim Dividieren??
Meine Routine ist wie folgt:
Code:
list p=16f873 ; list directive to define processor
#include <p16f873.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_ON & _BODEN_ON & _PWRTE_ON & _RC_OSC & _WRT_ENABLE_ON & _LVP_ON & _CPD_OFF
SDIV1608L macro AARGB0,AARGB1, BARGB0
MOVF BARGB0,W
SUBWF REMB0, F
RLF AARGB0, F
RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
ADDWF REMB0, F
RLF AARGB0, F
MOVLW 6
MOVWF LOOPCOUNT
LOOPS1608A RLF AARGB0,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,0
SUBWF REMB0, F
BTFSS AARGB0,0
ADDWF REMB0, F
RLF AARGB0, F
DECFSZ LOOPCOUNT, F
GOTO LOOPS1608A
RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB0,0
SUBWF REMB0, F
BTFSS AARGB0,0
ADDWF REMB0, F
RLF AARGB1, F
MOVLW 7
MOVWF LOOPCOUNT
LOOPS1608B RLF AARGB1,W
RLF REMB0, F
MOVF BARGB0,W
BTFSC AARGB1,0
SUBWF REMB0, F
BTFSS AARGB1,0
ADDWF REMB0, F
RLF AARGB1, F
DECFSZ LOOPCOUNT, F
GOTO LOOPS1608B
BTFSS AARGB1,0
ADDWF REMB0, F
endm
;***** VARIABLE DEFINITIONS
w_temp EQU 0x20 ; variable used for context saving
status_temp EQU 0x21 ; variable used for context saving
AARGB0 EQU 0x22
AARGB1 EQU 0x23
;geteil durch
BARG EQU 0x24
BARGB0 EQU 0x25
BARGB1 EQU 0x26
;Ergebnis
REMB0 EQU 0x27
REMB1 EQU 0x28
LOOPCOUNT EQU 0x29
Nenner EQU 0x30
Zaehler EQU 0x31
TEMP EQU 0x32
AARGB5 EQU 0x33
Nenner1 EQU 0x34
;**********************************************************************
ORG 0x000 ; processor reset vector
clrf PCLATH ; ensure page bits are cleared
goto main ; go to beginning of program
;Initialisierung
ini
movlw 0x96
movwf Nenner
movlw 0x00
movwf Nenner1
movlw d'3'
movwf Zaehler
return
main
call ini
SDIV0808L Nenner,Nenner1,Zaehler
nop
nop
nop
END ; directive 'end of program'
Lesezeichen