Tabelle

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

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