Forum: Mikrocontroller und Digitale Elektronik Hex zu decimal / ASM


von Elektronik T. (et-thomas)


Lesenswert?

Servus,

ich habe mir eine Funktion geschrieben, die mir den Wert eines
Registers (AVR-8BIT) in Decimaldarstellung wandelt.
Maximaler Wert von 8 bit decimal wären 255; als Ausgabe erhalte ich
drei Register, Inhalt: R1=2; R2=5; R3=5;
Das ganze habe ich noch so erweitert, dass ich der Funktion auch ein
Word übergeben kann, als Ergebnis erhalte ich fünf Register.

Das Teil läuft...Da liegt mein Problem; es läuft und läuft und läuft -
und hört 200ms später wieder aus. Funktion gegeben, setzen, sechs ;-)

Der Ablauf im groben:
Register vergleich auf 10; wenn größer dann subtrahieren 10 und zähle
einer/zehner/hunderter (je nach Stand einer/zehner/hunderter) rauf.

VIelleicht hat jemand noch einen wirklich Super-Trick auf Lager ;-)

Vielen Dank

von Klaus...(Norad) (Gast)


Lesenswert?

HI

Nun ob es ein Super Trick ist weiss ich nicht aber beim 8051 Befehlsatz
gibts dafür den Befehl DA.

Steht für Dezimalkorrektur vielleicht gibts ja ein Equivalent in AVR.


Gruß Klaus

von Hannes L. (hannes)


Lesenswert?

Nunja, ich kenne deine Routine nicht...

Aber schau dir mal das hier an:

http://www.mikrocontroller.net/forum/read-1-262112.html#262230

Das schreibt das Ergebnis zwar nicht in Register oder SRAM, sondern
gibt es gleich an das LCD aus.

Du musst es ja nicht unbesehen übernehmen, aber es schadet sicher
nicht, sich das mal etwas genauer anzusehen oder auch mal im Simulator
laufen zu lassen. Denn so lange dauert die Berechnung nichtmal.

Die Routinensammlung "lcdprint.inc" ist im Laufe der Zeit entstanden
und wird gelegentlich an neue Erfordernisse angepasst. In znduhr01.asm
siehst du, wie die Routinen genutzt werden.

Weitere Tipps findest du auch in der Codesammlung.

...

von ichbins (Gast)


Lesenswert?

Schau doch mal auf der Seite nach:

http://www.avr-asm-tutorial.net/avr_de/index.html

Hab da selbst schon manche hilfreiche Infos her.

von Gerald (Gast)


Lesenswert?

Hallo Thomas,

ganz einfach und funktioniert, Atmel HP aufrufen und die Applicatin
Note AVR204 runterladen....fertig.
In dieser Schrift ist alles verständlich beschrieben.


Gruss

Gerald

von Bob (Gast)


Lesenswert?

Servus,
alos falls du eine Hochsprache einsetzt, löst sich das Problem fast von
alleine:
Z.B. mit dem CodeVision:
Ausgabe ans Terminal: printf(" %d ",value); //mit char value
Ausgabe auf LCD:
Verwende da meist die stdlib.h und konvertiere den Char in int und lass
ihn dann ausgeben, hört sich kompliziert an, sind aber nur wenige Zeilen
in Hochsprache:
char value, *string;
int abc;

abc=atoi(value);   //atoi aus stdlib: ascii to integer
itoa(abc,string);  //itoa integer to ascii (string)
lcd_puts(string);  //Ausgabe des Stings, hier dein char value als
dezimalzahl

Gruß Bob

von Christoph Kessler (Gast)


Angehängte Dateien:

Lesenswert?

Hallo
Ich habe mal meine Version angehängt, die 10er-Division stammt aus dem
Trampert-Buch zum AVR
73
Christoph

von Elektronik T. (et-thomas)


Lesenswert?

Hallo

Vielen Dank für eure Antworten.
Werde mir alles ansehen, ausser die Hochsprache.

@Gerald: Das ist eine Möglichkeit, die ich allerdings nicht nutze ;-)
Bzw. erst im Notfall; aber die Frustration, es nicht selber geschafft
zu haben, wäre einfach zu stark...Da ist mein Ehrgeiz einfach zu massiv
;)

von Hannes L. (hannes)


Lesenswert?

Die Appnotes von ATMEL würde ich aber nicht "verschmähen".
Man muss sie ja nicht unbesehen einsetzen, aber ein Blick ("wie haben
die es denn gelöst") lohnt sich immer...

Bit- & Bytebruch...
...HanneS...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.