mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BCD Wert Inkrementieren


Autor: Hallo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Problem und zwar muss ich in Asm einen BCD Wert um 1 
erhöhen wie mache ich das??

Gruß

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hängt von Assembler und vom Target ab.


Peter

Autor: Hallo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh stimmt das hätte ich dazuschreiben sollen!

Also ATmega8 und AVR Studio

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR Studio - Help - Tools - AVR Assembler - Instructions.


Peter

Autor: Hallo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm ich glaube ich bin falsch verstanden worden.
Ich möchte eine BCD-Zahl um 1 erhöhen, und das geht nicht mit INC weil 
dann kommt quatsch raus.

Autor: Hallo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat wirklich keiner ne Ahnung wie ich das Lösen könnte?

Autor: Bernadette (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Teile die BCD-Zahl in zwei Byte , INC das LOW-Byte, prüfe ob größer 9, 
falls ja, dann setze dieses Byte=0 und erhöhe das HIGH-Byte.

Füge die beiden Bytes wieder richtig zu einem BCD-Byte zusammen.

B.

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo schrieb:
> Ich möchte eine BCD-Zahl um 1 erhöhen, und das geht nicht mit INC weil
> dann kommt quatsch raus.

Du musst danach noch den ggf. aufgetretenen Übertrag beachten und dann 
in die nächste Stelle befördern. Stichwort Half-Carry-Flag...

Autor: Bernadette (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst aber auch das Byte einfach mit INC erhöhen.

Prüfe ob die rechten 4 Bit >9.

Falls ja, dann zähle noch 6 dazu.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es liegt wohl eher daran, dass du uns über vieles im Unklaren lässt.

Selbstverständlich funktioniert es mit "inc", solange die BCD-Stelle 
(Nibble) kleiner 9 ist. Über 9 muss ein Übetrrag auf die nächste Stelle 
erfolgen.

Autor: Hallo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gut Danke

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BCD sind eben nur 4 Bits eines Bytes.

Es sein denn, Du meinst packed BCD.

Das verwendet man heutzutage eigentlich nicht mehr. Die meisten 
Programmiersprachen rechnen direkt Dual und wandeln erst bei Eingabe 
bzw. Ausgabe nach dezimal (BCD oder ASCII).

Der 8051 hatte noch eine DAA-Befehl, habe ich aber nie benötigt.
Der AVR hat aber noch das H-Flag. Damit kannst Dir das ausgestorbene 
packed BCD basteln, wenns Dir Spaß macht.


Peter

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.