PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Bus



fulltime
22.02.2019, 17:01
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

Bumbum
22.02.2019, 17:52
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