Hallo,ich hab mal ne frage.Ich muss sehr viel Text auf einem
Grafikdisplay ausgeben.Dieses mache ich mit
ldi zl,low(txt08*2) ;Zeiger
ldi zh,high(txt08*2) ;auf Text
Der Text ist in einzelnen .db Anweisungen gespeichert.
Kann mann für zb.txt08 auch eine Variable übergeben,damit ich
nur die Variable ändern muss und den eigentlichen Schreibbefehl
per unterprogamm aufrufen kann.
gruss
Andy
Hallo,was ich meine ist,das wenn ich zumbeispiel txt31 anzeigen lassen
will,dieses in eine Variable schreibe und dann nur
ldi zl,low(txt08*2) ;Zeiger
ldi zh,high(txt08*2) ;auf Text
als unterprogramm aufrufe,wobei txt08 dann automatisch txt31 wird.
gruss
Andy
Hallo was ich meine istfolgendes.
Ich habe ca.100 db anweisungen durchnummeriert mit
txt00:
.db "blabla",0
bis
txt100:
.db "blabla",0
Um mir nun txt0 anzeigen zu lassen führe ich folgendes aus
ldi r16,4 ;Zeile 0
ldi r17,19 ;Spalte 0
rcall posi ;Schreibposition einstellen
ldi zl,low(txt08*2) ;Zeiger
ldi zh,high(txt08*2) ;auf Text
rcall wtf ;Write Text from Fla
Wenn ich nun zb.txt100 anzeigen lassen will,könnte ich dann nicht
irgendwie txt100 in eine Variable schreiben,und den oben aufgeführten
Code als unterprogramm ausführen,wobei dann aus txt08 txt100 wird und
somit der gewünschte text angezeigt wird.
Ich hoffe,ich habe mich halbwegs verständlich ausgedrückt.
gruss
Andy
Hmmm!
Vielleicht solltest Du einen Offset übergeben anstatt explitzit
text08*2 oder zusammen.
Den Zeiger in deinem Unterprogramm kannste ja immer auf den Anfang
zeigenlassen und mit dem Offset könntest Du ja den Zeiger anpassen.
Gruß Klaus
Du kannst Dir Macros einrichten.
Z. B.:
.macro WriteText
ldi zl,low(@0)
ldi zh,high(@1)
rcall wtf
.endm
Aufruf im Programm dann mit
WriteText txt100
Ist es das was Du meinst?
Ansonsten bereitet mir dieses immer noch Kopfzerbrechen:
"wobei dann aus txt08 txt100 wird"???
mfG
Andi
hallo,ich möchte im programm in eine variable zb.20 schreiben.
dann das ausführen
ldi zl,low(variable*2) ;Zeiger
ldi zh,high(variable*2) ;auf Text
Es geht darum,das ich nur die Variable ändere,dann das u-progamm
aufrufe
und der Zeiger dann auf die gewünschte db anweisung zeigt.
gruss
Andy
Das geht leider nicht ganz so einfach.
Es gibt zwar Möglichkeiten Konstannten mit .equ und .set zu definieren,
aber die sind nicht zur Laufzeit zu gebrauchen.
Für das, was Du willst, wird es etwas komplizierter.
Du mußt Dir eine Tabelle mit 100 Einträgen mit Zeigern auf Deine Texte
erstellen:
TxtTabelle:
.dw txt00, txt01, txt02, txt03 etc...
Dann brauchst Du eine Sub der Du z. B. 3 übergibst (zl) welche sich
dann aus dem 3. (4.) Eintrag die Adresse des Textes in Z holt:
Sub:
clr zh
lsl zl ;Text-Nummer * 2 (Wortzugriff)
rol zh
subi zl,-(low(TxtTabelle*2)) ;Startadresse der Tabelle addieren
sbci zh,-(high(TxtTabelle*2))
lpm r0,z+ ;Textadresse low-Byte lesen
lpm r1,z+ ;Textadresse high-Byte lesen
movw zl,r0 ;Textadresse nach Z (zh:zl)
;hier dann die Textausgabe
MfG
Andi
In beiliegender Sammlung dürfte "printt" und "printts" das sein, was
du suchst.
Verwendet wird es etwa so:
Dies steht vor der Mainloop und wird nach Abarbeitung eines Menüpunktes
aufgerufen (mp ist die Menüpunktnummer, mt_head und mt_key sind die
Indextabellen):
locate 0,0 ;Position der LCD-Ausgabe
printt mt_head,mp ;Kopfzeile Menüpunkt ausgeben
locate 7,0 ;Position der LCD-Ausgabe
printt mt_key,mp ;Fußzeile Tastenzuordnung ausgeben
und am Ende des Programms stehen dann die Indextabellen mit den
Pointern auf die Texte und die Tabellen mit den Texten selbst:
mt_head: ;obere Menüzeilen (Menüpunkte)
.dw mt_000,mt_010,mt_020,mt_030,mt_040,mt_050,mt_060,mt_070
.dw mt_080,mt_090,mt_100,mt_110,mt_120,mt_130,mt_030,mt_030
.dw mt_160
mt_000: .db " *** Edit-Mode *** ",0,0
mt_010: .db " Datentransfer mit PC ",0,0
mt_020: .db "zur ersten/letzten Zeile",0,0
mt_030: .db " eine Zeile hoch/runter ",0,0
mt_040: .db " Zeile de/aktivieren ",0,0
mt_050: .db " Einstellung Stunde x 1 ",0,0
mt_060: .db "Einstellung Minute x 10 ",0,0
mt_070: .db " Einstellung Minute x 1 ",0,0
mt_080: .db "Einstellung Sekunde x 10",0,0
mt_090: .db "Einstellung Sekunde x 1 ",0,0
mt_100: .db "Auswahl des Z",$f5,"ndger",$e1,"tes ",0,0
mt_110: .db " Z",$f5,"ndkreisnummer x 10 ",0,0
mt_120: .db " Z",$f5,"ndkreisnummer x 1 ",0,0
mt_130: .db "Daten ins EEP",$f5,"bernehmen ",0,0
mt_160: .db " *** Feuerwerk-Mode *** ",0,0
mt_key: ;untere Menüzeilen (Tastenzuordnung)
.dw mt_007,mt_017,mt_027,mt_037,mt_047,mt_057,mt_067,mt_077
.dw mt_087,mt_097,mt_107,mt_117,mt_127,mt_137,mt_037,leerz
.dw mt_167,mt_177,mt_187,mt_197,mt_197,mt_177a,mt_177a,mt_177a
.dw mt_167,mt_197,mt_197
mt_007: .db " Run ++++>",0,0
mt_017: .db "<---- Load Save ++++>",0,0
mt_027: .db "<---- Home End ++++>",0,0
mt_037: .db "<---- Up Down ++++>",0,0
mt_047: .db "<---- deakt aktiv ++++>",0,0
mt_057: .db "<---- +1 h -1 h ++++>",0,0
mt_067: .db "<---- +10m -10m ++++>",0,0
mt_077: .db "<---- +1 m -1 m ++++>",0,0
mt_087: .db "<---- +10s -10s ++++>",0,0
mt_097: .db "<---- +1 s -1 s ++++>",0,0
mt_107: .db "<---- +1 -1 ++++>",0,0
mt_117: .db "<---- +10 -10 ++++>",0,0
mt_127: .db "<---- +1 -1 ++++>",0,0
mt_137: .db "<---- Save Abort ",0,0
mt_167: .db " Edit ++++>",0,0
mt_177: .db "<Menu Start Skip Set >",0,0
mt_177a: .db " Stop Skip ",0,0
mt_187: .db "<---- Up Down ++++>",0,0
mt_197: .db "<Stop Shot Skip Up ",0,0
In diesem konkreten Beispiel wird auf einem Textdisplay mit 8 Zeilen a
24 Zeichen in der oberen Zeile eine Überschrift angezeigt und in der
unteren Zeile die Funktion der 4 darunter angeordneten
Bedienungstasten. Das Ganze läuft auf einem Mega8535 und dient als
Steuergerät (Schaltuhr) für Feuerwerke der Klasse 4.
Die Bibliothek (Routinensammlung) ist nicht als Dogma anzusehen, sie
wird so nach und nach an sich ändernde Ansprüche angepasst. Wenn es im
Flash mal eng werden sollte, dann werden unbenutzte Teile davon (von
einer zu verwendenden Kopie) gelöscht.
...