Serielle Kommunikation 8051

Ich arbeite daran, wie 8051 die serielle Kommunikation durchführt. Ich konnte nicht herausfinden, wie sowohl Sende- als auch Empfangsvorgänge vom selben Register SBUF ausgeführt werden.

Um es deutlicher zu machen, werde ich ein Beispiel geben. Angenommen, ich erhalte kontinuierlich Informationen über den Rx-Pin. Was ist, wenn ich Informationen übermitteln möchte? Wie kann ich den Empfang während der Datenübertragung unterbrechen, weil ich nicht möchte, dass die Daten, die ich in das SBUF-Register eingegeben habe, durch die eingehenden Daten ersetzt werden?

Es gab zwei Bits in SCON, nämlich Receive Interrupt (RI) und Transmit Interrupt (TI), aber sie wurden verwendet, um zu prüfen, ob die Daten erfolgreich empfangen oder gesendet wurden, nicht um zu entscheiden, ob der Chip senden oder empfangen wird.

Was ich frage, ist, sollte es in SCON nicht ein Bit wie Sendefreigabe oder Empfangsfreigabe geben, das eine Operation zulässt und die andere verhindert, wenn es aktiviert wird. Es gibt tatsächlich eine Empfangsfreigabe (REN) in SCON, aber in allen Beispielen wurde sie sowohl beim Senden als auch beim Empfangen aktiviert, also dachte ich, dieses Bit wäre für etwas anderes.

Was fehlt mir?

Antworten (1)

Angenommen, ich erhalte kontinuierlich Informationen über den Rx-Pin. Was ist, wenn ich Informationen übermitteln möchte? Wie kann ich den Empfang während der Datenübertragung unterbrechen, weil ich nicht möchte, dass die Daten, die ich in das SBUF-Register eingegeben habe, durch die eingehenden Daten ersetzt werden?

Ich verstehe deine Verwirrung. Die Erklärung ist ein ziemlich elegantes Design ...

Von außerhalb des Geräts behandeln wir das SBUFRegister als ein einziges "Ding", das für Tx verwendet wird, wenn wir darauf schreiben, und für Rx verwendet wird, wenn wir daraus lesen. Dies ist sinnvoll, da wir nicht das Gegenteil tun müssen (dh wir müssen nicht lesen , was wir gerade zur Übertragung gesendet haben).

Innerhalb des Geräts sind das Tx-Register und das Rx-Register jedoch physikalisch unterschiedliche Komponenten. Diese Tatsache ermöglicht es Ihnen, zu senden und gleichzeitig zu empfangen, ohne das zu überschreiben, was empfangen wird.

Ich erinnere mich, dass ich vor langer, langer Zeit das Datenblatt auf dem einen oder anderen UART gelesen habe, das dies erklärte. Ich bin mir nicht sicher, ob ich es wieder finden könnte, aber wenn ich es finde (oder etwas Ähnliches), werde ich es der Antwort hinzufügen.


Aktualisieren:

Aus dem Hardwarehandbuch für Atmel 8051-Mikrocontroller :

Auf die Empfangs- und Senderegister der seriellen Schnittstelle wird beide im Spezialfunktionsregister SBUF zugegriffen. Das Schreiben auf SBUF lädt das Senderegister, und das Lesen von SBUF greift auf ein physikalisch zweites Empfangsregister zu .

[meine Hervorhebung im obigen Zitat]

Aus demselben Dokument ist hier ein Blockdiagramm des 8051 UART. Ich habe die beiden Stellen skizziert, an denen sie "SBUF" in Rot anzeigen, zusammen mit einem Text, der zeigt, welches das physische Tx-SBUF-Register und welches das physische Rx-SBUF-Register ist:

Auszug aus dem Atmel 8051 Microcontrollers Hardware Manual Seite 103

Dass Rx- und Tx-Register physisch unterschiedliche Register sind, macht absolut Sinn, und genau das war der Punkt, den ich nicht herausfinden konnte. Schätze dich wirklich!