24 bit konstante/16bit variable fehler ab best. variabler

Gast #1679334
Lesenswert?

Hallo µC Gemeinde,

hab in nem controller ne dividier routine laufen sie soll eine 24 bit 
konstante (3 000 000) durch eine variable teilen, das problem ist das 
sie ab einer variablen um 47 000 mist berechnet...
die routine ist eine atmel apnote, nur auf 24 bit verändert durch das 
hinzufügen von rol dd16uM.

kennt jemand solch ein verhalten?

lg flo

div16u:
  clr  drem16uL      ;clear remainder Low byte
  sub  drem16uH,drem16uH    ;clear remainder High byte and carry
  ldi  dcnt16u,25      ;init loop counter

d16u_1:
  rol  dd16uL        ;shift left dividend
  rol  dd16uM
  rol     dd16uH
  dec  dcnt16u        ;decrement counter
  brne  d16u_2        ;if done
  ret          ;return

d16u_2:
  rol  drem16uL    ;shift dividend into remainder
  rol  drem16uH
  sub  drem16uL,countl    ;remainder = remainder - divisor
  sbc  drem16uH,counth    ;
  brcc  d16u_3      ;if result negative
  add  drem16uL,countl    ;restore remainder
  adc  drem16uH,counth
  clc        ;clear carry to be shifted into result
  rjmp  d16u_1      ;else

d16u_3:
  sec        ;set carry to be shifted into result
  rjmp  d16u_1
#1679408
Lesenswert?

flo schrieb:
> und an welcher stelle wenn ich fragen darf?
1
;                               Division 24 / 16 bit
2
;-------------------------------------------------------------------------
3
;input:  a2..0: Dividend
4
;        b1..0; Divisor
5
;
6
;output: a2..0: Quotient
7
;        t1..0: Remainder
8
;        T = 1: Quotient > 0
9
;
10
div24:  clt
11
        clr     t0
12
        clr     t1
13
        ldi     i0, 24
14
_div1:  lsl     a0
15
        rol     a1
16
        rol     a2
17
        rol     t0
18
        rol     t1
19
        brcs    _div2           ;17bit: subtract always !
20
        cp      t0, b0
21
        cpc     t1, b1
22
        brcs    _div3
23
_div2:  sub     t0, b0
24
        sbc     t1, b1
25
        inc     a0
26
        set                     ;Quotient not zero
27
_div3:  dec     i0
28
        brne    _div1
29
        ret
30
;------------------------------------------------------------------------


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren