Forum: Compiler & IDEs LCD-Ausgabefunktion über 74HC595


von Chris2k (Gast)


Angehängte Dateien:

Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

;-)

von Chris2k (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.