Hallo Leute, ich habe ein LCD im 4Bit-Mode. Nun habe ich aufgrund des Leiterplattenlayouts die vier Datenleitungen gedreht. Die Datenbits tausche ich folgendermaßen: LCD4_rotate: ; Bits 0-3 verdreht (3-0) nach Bit 4-7 schaffen wegen vertauschter LCD-Ports bst temp, 0 ; Bit 0 in T-Flag sichern bld temp, 7 ; Bit 7 (3) aus T-Flag laden bst temp, 1 ; Bit 1 in T-Flag sichern bld temp, 6 ; Bit 6 (2) aus T-Flag laden bst temp, 2 ; Bit 2 in T-Flag sichern bld temp, 5 ; Bit 5 (1) aus T-Flag laden bst temp, 3 ; Bit 3 in T-Flag sichern bld temp, 4 ; Bit 4 (0) aus T-Flag laden swap temp ; Vertauschen, damit Nibbles wieder an richtiger Stelle stehen andi temp, 0b00001111 ; oberes Nibble wieder auf Null setzen ret ; wieder zurueck Gibt es da einen einfacheren Weg? Gruß Uwe
Habe zwar erst mit Assembler angefangen, aber ich weise die LCD-Pins folgendermasen zu: z.B.: .equ E = PD0 .equ RW = PD1 .equ RS = PD2 .equ LCD_cntr = PortD .equ LCD_data = PortB .equ BF = PB7 damit ersparst du dir den ganzen port-dreh-gedöns, da du die ports nur einmal zuweist. gruß danny
Für die Steuerports (RW/E/RS) mach ich das genauso. Aber wie mache ich das für einen Port wenn ich die Datenleitungen vertausche? Normal wäre ja folgendes (4-Bit-Mode): LCD AVR D4 PD0 D5 PD1 D6 PD2 D7 PD3 Bei mir ist es aber: LCD AVR D4 PD3 D5 PD2 D6 PD1 D7 PD0 Die Datenleitungen sind vertauscht, weil sich das aufgrund der Bauteillage wesentlich einfacher routen lässt. Wie kann ich sowas definieren, wenn ich dann quasi einen Wert an den ganzen Port ausgeben will? Gruß Uwe
Ich mache sowas gerne mit Tabellen, der datenwert ist dabei der Tabellenoffset. Damit kannst Du beliebige Zuordnungen machen. Ob es sich in diesem Fall aber wirklich lohnt, ist eine andere Frage. Stefan
Weniger Code braucht man, wenn man wiederholte Sachen in einer Schleife macht: swapnibble: ldi r17, 0x10 swn1: ror r16 rol r17 brcc swn1 Dauert zwar etwas länger, aber die Ausgabe zum LCD darf man ja eh nicht zu schnell machen. Peter
Hallo Peter, erst hab ich etwas zweifelhaft auf das Ganze geschaut, aber bei näherer Betrachtung muss ich sagen: Wirklich elegant gelöst. Danke für den Hinweis. Ich vergesse wahrscheinlich viel zu oft die Statusregister, die man nutzen könnte. Gruß Uwe
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.