mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Tabelle


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Wie errechne ich die Anfangsadresse in einer Tabelle in ASM?
Wenn ich z.B. aus der Tabelle unten Test5 auslesen will wie müßte man
das in Asm machen?
Vielen Dank
MFG






Tab:
    .db "test1","test2","tets3","test4","test5","test6"

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Daten immer die gleiche Länge haben, musst du einfach nur zu
deiner Tabellen-Anfangsadresse die entsprechende Zahl hinzuaddieren.
In diesem Fall: StartAdr + (Eintragslänge * Position).
Bei unterschiedlichen Längen wirst du nicht ohne "Endezeichen"
auskommen und die Tabelle entsprechend durchsuchen müssen.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort!
Hast Du evt. ein ASM Beispiel? Ich bin noch Anfänger und müßte es erst
mal sehen um es zu kapieren.
Gruss
Frank

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich programmiere in C...

Autor: Top Soft (topsoft)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

nur wenn das ganze nicht zur Laufzeit passieren soll:

ldi ZL, LOW (Tab1Eint5 * 2)
ldi ZH, HIGH(Tab1Eint5 * 2)

Tab1:
      Tab1Eint1: .db "test1"
      Tab1Eint2: .db "test2"
      Tab1Eint3: .db "test3"
      Tab1Eint4: .db "test4"
      Tab1Eint5: .db "test5"
      Tab1Eint6: .db "test6"
Tab2:
      .......
      ....

Gruß Topsoft

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
doch es soll in echtzeit gehen. Ich will dmit einem Drehgeber ein Menü
machen. Drehgeber abfragen und entsprechend menünamen aus Tab holen.
Was zählt denn alles zur Position beim Tab eintrg?
z.B.: Tab: .db"a ", "b " wenn ich b haben will 3 Pos.????
Frank

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.equ feld_laenge = 5

; r16 übergabe nr des strings
ausgabe_string:
ldi zl, low(tab*2)
ldi zh, high(tab*2)
ldi r17, feld_laenge
mul r16, r17
add zl, r0
adc zh, r1

schleife:
 lmp r16, z+
 rcall zeichen_ausgabe
 dec r17
 brne schleife

ret

Tab:
    .db "test1","test2","tets3","test4","test5","test6"


ich hoffe, das is ohne Fehler.. musst halt mal ausprobieren..
braucht einen AVR mit Hardware-Multiplier. Das mit dem AVR habe ich
jetzt einfach mal aus den vorigen Posts entnommen.

Autor: Top Soft (topsoft)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das mit der Speicheraufteilung sollte der Anhang klären. Wieviele
Menueeinträge werden das den? Auf welchem MC soll das ganze den
laufen?

Gruß Topsoft

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Flexibler wäre es, das mit einer Sub-Tabelle zu machen, also
Tabelleneinträge mit Unterprogramme welche dann noch Rechnen und
verschiedenes Anzeigen können wie z. B. veränderliche Rechen- oder
Messwerte:

; in zl übergabe nr der Menu-Sub
MenuProg:
 clr zh
 lsl zl
 rol zh
 subi zl,low(-tab*2)
 sbci zh,high(-tab*2)
 lpm r16,z+
 lpm r17,z
 movw zl,r16
 ijmp

Tab:
 .dw Menu1
 .dw Menu2
 .dw Menu3
 .dw Menu4
 .dw Menu5
 .dw Menu6

Menu1:
 Rechne dieses...
 Zeige jenes an...
 .....
 ret

Menu2:
 .....
 ret

Menu3:
 .....
 ret

Menu4:
 .....
 ret

Menu5:
 .....
 ret

Menu6:
 .....
 ret

MfG
Andi

Autor: Andi K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ähm... hier noch eine kürzere Version (7 statt 14 Takte):

; in zl übergabe nr der Menu-Sub
MenuJump:
 clr zh
 subi zl,low(-tab)
 sbci zh,high(-tab)
 ijmp

Tab:
 rjmp Menu1
 rjmp Menu2
 rjmp Menu3
 rjmp Menu4
 rjmp Menu5
 rjmp Menu6

Die Tabelle besteht hier aus lauter RJMP (2 Byte (1 Word) je Eintrag),
also dürfen die Menü-Programme nicht all zu weit weg sein (-2048 bis
+2047 Words).

MfG
Andi

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Vielen Dank für Eure Hilfe!
Gruss
Frank

P.S.tolles Forum!

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.