LCD-Ausgabefunktion über 74HC595

Gast #2311627
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
Angehängte Dateien:
Moderator Persönliche Seite #2311630
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

;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren