www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16 bit / 10


Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.
Ich muss mit meinem ATMega 8515 in Assembler eine 16 bit Zahl durch 10
teilen.
Die Rechenroutinen vom Hersteller sind aber alle 16/16 Routinen was für
mich ja überdimensioniert wäre.

Wie würdet Ihr diese Rechunung denn realisieren?

Vielen Dank schonmal für Eure Hilfe!

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wäre es z.B. mit einer sukzessiven Subtraktion? Immer 10 abziehen,
bis weniger als 10 übrig bleibt, und dabei immer die Anzahl der
Subtraktionsschritte zählen. Das ist dann das Ergebnis, das was übrig
bleibt der Rest...

Autor: Karl vom Kanal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Die Rechenroutinen vom Hersteller sind aber alle 16/16 Routinen was
für ich ja überdimensioniert wäre."

Wenn Du fertige Routinen hast, nimm sie doch. Das geht schneller als
alles andere.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, Moment... Du willst eine 16-Bit-Zahl durch 10 Bit teilen? Das ist
aber ein kleiner Unterschied!

Dann kann ich mich Karl nur anschließen. Eine CPU rechnet eh immer mit
vielfachen von 8 Bit. Da ist nix überdimensioniert.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein du hast es schon richtig verstanden.
Ich möchte eine 16 Bit Zahl durch die Konstante 10 teilen.

Also wäre eine 16/8 Routine nett....aber gibt es sowas?

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder besser eine 16/16 Routine nehmen und High Byte mit 0 laden?!

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hmm, wenn ich dich recht verstehe willst du eine 16bit lange zahl durch
eine konstande dezimalzahl Teilen d10!?

also:

xxxx xxxx xxxx xxxx durch
0000 0000 0000 1010 !?

ist das so richtig!?

maddin

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...deinen letzteren post verstehe ich nicht, der steht bei meinem
verständnisstand deines problems im konflikt zu dem vorangeganenen..

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die 16 Bit /10 Divisionsroutine aus dem Trampert-Buch zum AVR
hier, die braucht man immer wenn man eine binär vorliegende Zahl als
ASCII-Ziffern ausgeben will. Für jede Stelle wird die Routine einmal
aufgerufen, anschließend ist die ursprüngliche Zahl in TempH/TempL
durch 10 geteilt, die Ziffer steht in Temp1. Die Ziffern kommen von
rechts nach links, das muß man bei der Ausgabe berücksichtigen:

;*********************************************************************** 
**
;* subroutine: divide 16bit word in TempH/TempL by 10,
;* results: quotient in TempH/TempL, remainder in Temp1 = decimal
digit
;* taken from "Trampert, AVR-RISC-Mikrocontroller"
;* Franzis-Verlag www.franzis.de ISBN 3772354742 pg. 327
;*********************************************************************** 
**
Div10:
  push  Cnt    ;
  clr  Temp1    ;
  lsl  TempL    ; input word is shifted out to the left
  rol  TempH    ; filled up with zeroes from the right
  rol  Temp1    ;
  lsl  TempL    ;
  rol  TempH    ; most significant 3 bits are always < 10
  rol  Temp1    ; so just shift out and in via Cy 3 times
  lsl  TempL    ;
  rol  TempH    ;
  rol  Temp1    ;
  ldi  Cnt,13    ; start loop for next 13 bits
Div10a:
  lsl  TempL    ;
  rol  TempH    ;
  rol  Temp1    ;
  subi  Temp1,10  ; remainder >10 ? -> subtract 10
  brlo  Div10b    ; was <10, LSB of output word = 0
  inc  TempL    ; LSB of output word = 1
  rjmp  Div10c
Div10b:
  subi  Temp1,-10  ; back to old value <10
Div10c:
  dec  Cnt    ; next bit
  brne  Div10a    ;
  pop  Cnt    ;
  ret      ;

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.