Hallo Foristen, ich steige derzeit von Assembler auf C um, und versuche derzeit, eine LCD-Ausgabefunktion nach C zu überführen. Leider gelingt mir das nicht so recht, der Compiler optimiert mir meine Codezeilen raus. Da muss wohl ein Fehler in diesen stecken, aber ich finde diesen einfach nicht. Ich habe ein Standard-LCD (HD44780, 4-Bit-Modus) über eine Porterweiterung (74HC595) an meinen ATMega88 angeschlossen. DB7..DB4 und RS des LCD sind am 595er an Q_H..Q_D angeschlossen, LCD_EN am AVR selbst. Was geht nun nicht? Ich rufe aus meiner main() die lcd_init() auf, und daraus wiederum wird com74hc595_out aufgerufen und ein Parameter ("3" zum initialisieren des 4-Bit-Modus) wird übergeben. In der com74hc595 wird der Übergabewert jedoch sofort gnadenlos überschrieben. Ich komme einfach nicht auf den Fehler. Wer findet ihn? :-) Vielen Dank Chris2k
1 | output &= LCD_PIN_MASK; // ungültige Bits auf 0 setzen |
2 | com74hc595 &= ~LCD_PIN_MASK; // alte Bits auf 0 setzen |
3 | |
4 | com74hc595 &= output; // neuen Inhalt generieren |
Das dürfte equivalent sein zur Anweisung:
1 | com74hc595 = 0; |
Und keine Sorge, auch wenn du sowas noch so kompliziert hinschreibst, Compiler sind stur logisch, die ersetzen das dann einfach durch das logische Äquivalent. :) Vermutlich wolltest du schreiben:
1 | com74hc595 |= output; // neuen Inhalt generieren |
;-)
Vielen Dank Jörg, da hast du natürlich recht, jetzt läuft dieser Teil wie erwartet. Danke für die superschnelle Hilfe! Chris2k
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.