Tabelle

Gast #215654
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.
Gast #215655
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
#215657
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
Gast #215658
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
Persönliche Seite #215659
.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.
Gast #215661
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
Gast #215662
Ä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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.