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
Meinst Du sowas? ldi zl,low(2*txt08) ldi zh,high(2*txt08) rcall PrintStr ... txt08: .db "Hello World",0 PrintStr: lpm r16,z+ tst r16 breq PrtStrEnd rcall lcd_data rjmp PrintStr PrtStrEnd: ret Ist doch die einfachste Übung ;-) MfG Andi
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
Soll in txt08 nicht nur Text, sondern auch Pointer auf andere Texte stehen, oder was meinst Du? Beschreibe mal genauer was Du willst. MfG Andi
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
Sollte natürlich so aussehen: .macro WriteText ldi zl,low(@0) ldi zh,high(@0) <-- hier war vorher der Fehler rcall wtf .endm 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
Hallo,das sieht doch gut aus.Werd ich gleich mal ausprobieren.Danke für die antwort und deine geduld. gruss Andy
Ach ja, in den Textadressen der Tabelle muß überall ein "* 2" dahinter: .dw txt00*2, txt01*2, txt02*2, txt03*2 etc... 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. ...
Ganz vergessen: Mojje Andi... - Schönen Sonntagabend wünsche ich dir... Bit- & Bytebruch... ...HanneS...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.