"diese bits...": Jetzt kapiere ich das Missverständnis:
Ich meine die LCD Datenleitungen D4 bis D7 (das ist halt so festgelegt beim 4 bit mode des LCD), und das sind die 4 höherwertigen bits des LCD im 8-bit modus.
Bei der CC1 sind diese 4 Leitungen D4 bis D7 üblicherweise verdrahtet mit Port[9] bis Port[12], und das sind die 4 niedrigwertigen Bits des byteport[2]; die LCD Leitungen D3 bis D0 sind nicht zur CC1 verdrahtet.
"also hat das...":
Wenn Du das cmd "CursorHome" zum LCD schicken willst, musst Du dem LCD irgendwie sagen: "RS=0" und R/W=0" und "Daten=0000 0010".
Im 8-bit modus könntest Du das in einem einzigen "Ausgabe-Takt" erledigen:
OUT 0 nach RS
OUT 0 nach R/W
OUT 0000010 nach D7..D0
TOGGLE E
(Insgesamt gibst Du dabei 2 + 8 + 1 = 11 bits ans LCD aus)
Im 4-bit modus brauchst zu zwei Takte:
Zuerst Takt 1:
OUT 0 nach RS
OUT 0 nach R/W
OUT 0000 nach D7..D4
TOGGLE E
Dann Takt 2:
OUT 0 nach RS
OUT 0 nach R/W
OUT 0010 nach D7..D4
TOGGLE E
(Jeder Takt gibt 2 + 4 + 1 = 7 bits ans LCD aus!)
Bei der CC1 benutzt Du dafür das Unterprogramm LCD_WRITE (oder so ähnlich);
das kann sowieso nur schreiben - deshalb brauchst du das R/W bit nie angeben;
auch das E-bit zum Togglen wird automatisch gemacht -- Du siehst es deshalb nicht.
Du musst nur noch sagen, ob Du ein ASCII char meinst(LCD_WRITECHAR), oder ein Kommando (LCD_WRITECMD),
und welche Daten Du senden willst (alle 8 bits, in einem byte).
Abhängig davon wird im Unterprogramm das RS bit zum LCD gesetzt, und dann Dein Byte in den zwei Takten zum LCD übertragen - zuerst das höhere Halbbyte, dann das niedere.
Lesezeichen