www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datentabelle in Assembler


Autor: Jörn (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich möchte eine Datentabelle für ein AVR programm programmiren. Aus 
dieser Tabelle soll er dann werte auslesen.
Wie geht das. Die Tabelle ist die im anhang.

MFG Jörn

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst mal musst du alle ".byte" in ".db" umwandeln, und dann solltest du 
dich über den Befehl "lpm" informieren, z.B. hier: 
http://www.mikrocontroller.net/tutorial/memory.htm

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, damit kann ich was anfangen.

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
print:
  lpm
        tst R0
        breq print_end
        mov r16, r0
        rcall sendbyte
        adiw ZL, 1
        rjmp print


text:

.db 84, 101, 115, 116, 0
.db 8, 10, 11, 16, 5, 0

Wenn ich das richtig verstanden habe, steht der wert 84 nach dem ersten 
durchlauf in r16. Doch wie komme ich in die nächste Datenzeile??

MFG Jörn

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spielt keine Rolle, in welcher Zeile die .db stehen, solange du Z 
incrementierst, wird das nächste Byte gelesen. Willst du direkt ein 
andere Zeile anspringen, solltest du lieber symbolische Marken einfügen 
und dann mit Hilfe dieser Z laden.

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich will von der Zeile 1 in die 2. Zeile springen, das muss doch möglcih 
sein oder? Also angenommen in der variable x steht der wert 1 dann liest 
das prog. die erste zeile aus, steht in der der variable aber 2 dann 
nimmt das prog. die zweite zeile.


Zeile1: .db 84, 101, 115, 116, 0
Zeile2: .db 8, 10, 11, 16, 5, 0

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib doch einfach mal wozu das ganze gut ist, dann kann man dir 
besser helfen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn das nicht nur 2 Zeilen sein sollen, dann nimmst Du eine 2. Tabelle, 
in der erstmal alle Byte-Adressen drinstehen:

Adressen: .dw 2*zeile1, 2*zeile2 ;usw.
Zeile1: .db 84, 101, 115, 116, 0
Zeile2: .db 8, 10, 11, 16, 5, 0

Zuerst lädst Du Z mit 2*Adressen und addierst den Index 2* dazu (da 2 
Byte je Adresse). Dann holst du die beiden Bytes, lädst diese nach Z und 
somit zeigt Z auf die gewünschte Zeile.

Peter

Autor: Andi_K (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Da ihr schon mal dabei seid, jemandem beizubringen, wie
man eine Tabelle in den Ram speichert und diese bei bedarf
ausliest, möchte ich mich gleich mal mit hinten anstellen.

Ich habe nämlich ähnliches (oder sogar selbiges?) vor:

Möchte jedem gelesenen AD-Wert (256 Werte@8Bit)
eine gewisse Zahl zuordnen. Soll für eine Temperatur-
ausgabe werden.
Beispiel: AD-Wert ist "154" , es soll eine "024" zugerodnet
werden, welche ich dann irgendwo hin als Temperatur ausgebe.

Von LPM habe ich mal flüchtig gehört. Das scheint
das richtige zu sein. Wie arbeite ich aber damit ?
Und wie kriege ich die Wertetabelle in den Ram ?

Autor: Jörn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ja so was ähnliches wie Andi_K habe ich auch vor, nur das der ASCII wert 
also von 0-?? einen bestimmten Datensatz bestehend aus je 8 zeichen 
zugeordnet werden soll.

Bsp:  Asciicode = 3

      .de 6, 5, 98, 50, 66, 66
      .de 4, 3, 58, 59, 20, 44
  *   .de 5, 8, 55, 88, 44, 55   *  diese Zeile soll nun wert für wert 
ausgelesen werden und jeder wert per spi an ein display (Nokia 3310 
gesendet werden.

MFG Jörn

Autor: Thomas Fischl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörn,

also ich würde den Z-Pointer einfach "asciicode"-mal um 6 erhöhen. Also 
so in der Art:

ldi ZH, HIGH(text<<1)
ldi ZL, LOW(text<<1)

tst asciicode
breq loopend

loop:
adiw ZL, 0x06
dec asciicode
brne loop
loopend:

Dann sollte der Z-Pointer auf die von dir gewünschte "Zeile" zeigen.

Thomas

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.