Norbert schrieb:
> ans LCD. Warum nicht gleich direkt ans LCD Port übergeben und einfach
> mit PIn_RS logisch verknüpfen ?
und wer sagt dir, dass der RS Pin und die Datenpins am gleichen Port
sitzen?
Spricht ja nichts dagegen, dass die 4 Datenleitungen am Port D
angeschlossen sind und die RS Leitung am Port B (oder wo halt sonst noch
Platz war).
1 | LCD_PORT=((data & 0xF0)>>4) | (1<<PIN_RS); //die obersten 4 BIT senden
|
du veränderst hier den kompletten Port. Du benutzt aber nur 5 Leitungen
davon. Wer sagt dir, dass an den restlichen 3 Leitungen nicht irgendwas
anderes angeschlossen ist.
Dein Problem: Du hast momentan nur das LCD im Auge. Schön. Aber in einem
realen Programm hast du auch noch andere Komponenten im System. Zb ist
da am selben Port ein Relais angeschlossen, das die Wasserpumpe eines
Aquariums steuert. Du würdest dich schön bedanken, wenn jedesmal den
Fischen ihre Pumpe ausgeschaltet wird, nur weil du einen Buchstaben ans
LCD ausgibst.
Von Funktionen, die universell einsetzbar sein sollen, erwartet man ein
bischen mehr. Zb. dass sie die, und NUR die Portpins manipulieren, die
sie auch selbst benutzen und alle anderen in Ruhe lassen. Im Idealfall
kann ich dann sogar noch völlig wahlfrei jeden beliebigen Portpin für
eine Funktionalität benutzen, sebst wenn das heißt, dass dadurch
Portpins sich über mehrere Ports verteilen. Denn manchmal geht das nicht
anders. Dann muss man mit dem leben, was an Pins noch frei ist, wenn man
ein LCD anschliesst. Denn die fixen Funktionen, die einzelnen Pins
zugeordnet sind (Timer, PWM, UART, externe Interrupts) kann ich nicht
ändern. Ein paar Drähte zum LCD kann ich aber dort anschliessen, wo noch
was frei ist.