www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik binärzahl vom register mit lcd anzeigen


Autor: digifuchs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

(ATMEGA8 + 2*16 Display)

bin leider noch voll der Anfänger...aber:

Ich will eine binärzahl, z.b. 000011001 (also 25(dezimal)) in ein
register per :

ldi r16, 000011001     ;000011001 in r16 laden

laden und dann ans display per

rcall lcd_data ;Zeichen in r16 anzeigen

ausgeben...leider wird dann ein Sonderzeichen, dass man mit einer
binärzahl aufruft, angezeigt.

Wie kann ich also eine Binärzahl in eine Dezimalzahl umwandeln und dann
als "25" auf dem Display anzeigen??

Danke für eure Antworten

Autor: Dominik T. (dom) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst die Binärzahl in einzelne BCD-Ziffern umwandeln und dann 0x30
addieren, damit es ASCII-Code wird. Diese kannst du dann an das Display
senden.

Autor: Hartmut Gröger (hardygroeger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Mal sehen ob ich es aus dem Stehgreif zusammenbekomme

     push r16
     swap r16
     andi r16,$0F   ;unteres Nibble
     subi r16,-$30  ;entspricht r16+$30
     cpi r16,$3A    ;>9
     brcs aaa
     subi r16,-$07  ;'A...F'
aaa: rcall lcd_data
     pop r16
     andi ...

der folgende Code ist wie oben.

MfG HG

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich mach' das in 2 Etappen...
Ein Macro sichert die Inhalte der verwendeten Register und ruft das
Unterprogramm zur ASCII-Umwandlung auf.

Hier das Macro:

.macro print8 ;Registername
            ;Gibt Zahl im Register 2- oder 3-stellig am LCD aus.
            ;Parameter bestimmt das Register, in dem die Zahl liegt.
            ;Dieses Register wird nicht verändert.
            ;Kopie der Zahl temporär in xl,
 push xl                ;verwendete Register sichern
 mov xl,@0              ;Kopie vom Quellregister
 rcall lcd_print8       ;Aufruf...
 pop xl                 ;verwendete Register wiederherstellen
.endmacro               ;

Und hier das Unterprogramm:

lcd_print8: ;Wird vom Makro aufgerufen. Gibt Byte als 2 oder 3
            ;Ziffern an LCD aus.
 push wl        ;Reg sichern
 ldi wl,-1+'0'  ;Hunderter-Stelle als ASCII-Zeichen, Zahl ist
positiv
 inc wl         ;Hunderter hoch und
 subi xl,100    ;100 subtrahieren bis Unterlauf erfolgt
 brsh pc-2      ;Unterlauf? nein, 2 Zeilen hoch
 cpi wl,'0'     ;ja, ist Ziffer = "0"?
 breq pc+2      ;ja, nicht ausgeben...
 rcall lcd_data ;Hunderter ausgeben...
 ldi wl,10+'0'  ;Zehner-Stelle als ASCII-Zeichen, Zahl ist negativ
 dec wl         ;Zehner runter und
 subi xl,-10    ;10 addieren bis Überlauf erfolgt
 brlo pc-2      ;Überlauf? nein, 2 Zeilen hoch...
 rcall lcd_data ;ja, Zehner Stelle ausgeben...
 ldi wl,'0'     ;ASCII-0
 add wl,xl      ;Einer addieren (Rest war ja positiv)
 rcall lcd_data ;Einer ausgeben...
 pop wl         ;Reg wiederherstellen
 ret            ;zurück

Da man gelegentlich auch andere Zahlenformate in ASCII-Text umwandeln
und am LCD ausgeben muss, ist diese Routine Teil einer Sammlung
ähnlicher Routinen für andere Formate, die so nach und nach gewachsen
ist.

Weitere Beispiele findest du in der Codesammlung oder wenn du mal nach
"8x24" oder "4x27" suchst und die dort gefundenen Links verfolgst.

...

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.