-
-
I2C Bus
Hallo!
Beim Implementierung einer I2C Kommunikation zwischen einem Mega328P und einen PCF8574 bin ich auf folgende Eigenheit gestoßen. Die ich mit nicht ganz erklären kann.
Beschreibe ich das TWCR so: TWCR |= (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
Funktioniert die Kommunikation nicht.
Beschreibe ich das TWCR so: TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
funktioniert die Kommunikation.
Der Unterschied liegt in diesem Zeichen "|".
Syntaxmäßig erkenne ich jetzt keinen Unterschied da ja nach beiden Operationen die gleichen Werte in TWCR stehen. Vermutlich scheitert es daran, dass bei "|=" das TWINT-Flag nicht richtig zurückgesetzt wird. Jedoch weiß ich nicht was jetzt syntaxmäßig oder ausführungstechnisch der Unterschied liegt.
Vielleicht hat ja schon wer eine ähnliche Erfahrung damit gemacht und hat eine Begründung gefunden.
Mfg
fulltime
-
Erfahrener Benutzer
Roboter Experte
Hallo fulltime,
bei der Anweisung
TWCR |=
wird der Inhalt von TWCR ausgelesen und mit den Werten rechts vom = verodert und wieder zurückgeschrieben. Das bedeutet, wenn noch ein anderes Bit in diesem Register gesetzt ist, bleibt es gesetzt.
Die Anweisung
TWCR =
schreibt direkt deine Werte rechts vom = in das Register und löscht eventuell vorher gesetzte andere Bits.
Viele Grüße,
Andreas
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen