Variable zur Laufzeit ändern

Gast #307563
Lesenswert?

Hallo,

ich möchte einen derzeit binären Temperaturwert dezimal auf einen LCD
anzeigen lassen. Für die Umwandlung von binär nach dezimal gibt es ja
genug Codes. Wie gebe ich aber dann die dezimale Zahl aus? Da ich meine
Codes in Assembler schreibe, frage ich mich wie man das am besten
anpacken sollte. Mit einem z-pointer? Ich dachte immer, dass ich die
Ausgabe mit einem Z-pointer nur dann realisieren kann, wenn ich den
String, bzw. die Zahlen vorher definiert habe. Aber wie mache ich das
zur Lauifzeit, wenn ich alle 5 Sekunden ein Wert ausgeben will?

MFG

Onur
Gast #307564
Lesenswert?

Du stellst die Zahlen im BCD-Code dar und vor der Ausgabe auf dem LCD
addierst du 0x30 hinzu. Dadurch bekommst du den HEX Wert des
ASCII-Zeichens ;o)
Hoffe mal ich habe dein Problem richtig verstanden.
Gast #307566
Lesenswert?

Hallo,

ich muss ja die Daten z.B: 22,5°C ausgeben. Ich habe halt noch ein
Verständnisproblem:

ldi ZL, LOW(daten*2)
ldi ZH, HIGH(daten*2)
        lpm
        mov R16, R0
        out PORTB, R16
daten:
.db 0b10101010                 // Hier sollten 22,5°C als BCD stehen.

Die Ausgabe auf einem LCD sollte ich doch mit der obigen Variante
machen oder? Aber "daten" ist statisch! Meine Werte ändern sich alle
5 Sekunden. Kann es sein dass ich da falsch denke? Habe ich ein
Denkfehler?

MFG

Onur
#307567
Lesenswert?

Mit LPM (Load Program Memory) greifst du auf Programmspeicher (Flash)
zu, dort stehen nur Konstanten.

Schau dir mal das SRAM an und die Befehle, die auf SRAM zugreifen. Da
gibt es auch Zugriffe über Pointer (LD ST). Die Tabelle Instruction-Set
im Datenblatt (ausdrucken!!) und die Onlinehilfe des AVR-Studios sind
deine Freunde.

...
Gast #307568
Lesenswert?

Falls Dir das mit dem SRAM zu kompliziert ist, kannst Du die Daten auch
in den Registern halten (ist halt nicht so elegant, aber möglich).
Offensichtlich ist bislang der RAM völlig an Dir vorbeigegangen...

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