| 4.2 Die Parallel-Schnittstelle | Anhang A: Programmiermodell MC6821 |
In Abschnitt 4.2 wurde eine parallele Schnittstelle zum Anschluß von Peripheriegeräten beschrieben. Eine weitere Möglichkeit zur Anbindung dieser Geräte an einen Mikrorechner stellt die sogenannte V.24-Schnittstelle dar1). Die V.24-Schnittstelle ermöglicht die asynchrone, serielle Übertragung der Daten. Durch die Normung dieser Schnittstelle ist es möglich, Peripheriegeräte unterschiedlicher Hersteller mit den verschiedensten Rechnern, aber auch diese untereinander zu verbinden. In den USA wurde diese Schnittstelle unter der Bezeichnung RS232C (US-Norm EIA2) ) und in Europa unter der Bezeichnung V.24/V.28 (CCITT-Norm3), DIN 66020) festgelegt. Dabei sind in der V.24-Norm die funktionellen, in der V.28-Norm die elektrischen Eigenschaften beschrieben.
Bild 4.3-1 zeigt den Aufbau der V.24-Schnittstelle des Praktikumsrechners.
| Bild 4.3-1: | Die V.24-Schnittstelle des Praktikumsrechners |
Da auf dem Datenbus des Rechners die Daten in paralleler Form anliegen, wird zur Realisierung einer seriellen Schnittstelle ein Baustein benötigt, der sowohl eine Parallel/Serien- wie auch eine Serien/Parallel-Umwandlung der Daten vornimmt. Ein solcher Interface-Baustein wird häufig
genannt. Ein Beispiel dafür ist z.B. der im Praktikumsrechner eingesetzte R6551 der Firma Rockwell (s. IC8 im Gesamtschaltplan des Rechners im Anhang von KE3 und Bild 4.3-1). Bevor die Funktion dieses ACIA-Bausteins näher erklärt wird, stellen wir kurz die Grundlagen der V.24-Schnittstelle dar.
Bild 4.3-2 zeigt das serielle Datenformat der V.24-Schnittstelle. Die Zeichen werden als Folge von Einzelbits übertragen, die von einem Startbit (logisch "0") angeführt und von einem, 1½ oder zwei Stopbits (logisch "1") abgeschlossen werden. Die Übertragung beginnt mit dem niederwertigen Bit 0 (LSB). (Da zwischen zwei "1"-Bits das Signal nicht zum "0"-Wert zurückkehrt, spricht man von einer "Non-Return-to-Zero"-Codierung - NRZ.)
| Bild 4.3-2: | Datenformat der V.24-Schnittstelle (Beispiel: 8-bit-Daten mit Paritätsbit) |
Die Kommunikation zwischen den Geräten erfolgt über Daten-, Takt-, Melde- und Steuersignale. Die Pegel der V.24-Schnittstelle auf den Datenleitungen sind in "negativer" Logik, die der Steuersignale in "positiver" Logik festgelegt:
| logischer Zustand | Datenbit | Steuerinformation |
|---|---|---|
| 0 | H-Pegel: +3 V bis +15 V | L-Pegel: -15 V bis -3 V |
| 1 | L-Pegel: -15 V bis -3 V | H-Pegel: +3 V bis +15 V |
Der Übergangsbereich zwischen -3V und +3V ist undefiniert. Die Übertragungsgeschwindigkeit kann bis zu 56.000 baud betragen, d.h. es können bis zu 56.000 bit/s übertragen werden. Die maximale Übertragungsentfernung ist abhängig von der Baudrate. Sie beträgt bei 19.200 baud ca. 30 Meter.
Die Schnittstellendefinition und die Pinbelegung des 25-poligen-Steckers sind der Vollständigkeit halber im Anhang B dargestellt. Bei der Funktionsbeschreibung werden wir uns hier auf die wichtigsten Signale zur Kommunikation zwischen Mikrorechnern untereinader und mit Terminals, Druckern und anderen Peripheriegeräten beschränken (s.Tabelle 4.3-1).
Bemerkung: Einige dieser Signale sind im L-Pegel aktiv und werden daher meist in negierter Form (mit Überstreichung o.ä.) geschrieben. Wir lassen diese Überstreichungen (aus Gründen der einfacheren Darstellung) dann weg, wenn der Zusammenhang eine exakte Darstellung nicht verlangt4). Bild 4.3-1 können Sie entnehmen, daß die Steuersignale des Schnittstellenbausteins R6551, den wir in diesem Abschnitt beschreiben werden, invertiert werden (IC5 und IC6). Daher muß hier festgestellt werden, daß im folgenden immer die Signale am V.24-Schnittstellenstecker gemeint sind, wenn nicht explizit auf die R6551-Signale Bezug genommen wird.
| Pin | Signal | Eingang/Ausgang | Abkürzung |
|---|---|---|---|
| 2 | Transmit Data | Ausgang | TxD (TD) |
| 3 | Receive Data | Eingang | RxD (RD) |
| 4 | Request to Send | Ausgang | RTS |
| 5 | Clear to Send | Eingang | CTS |
| 6 | Data Set Ready | Eingang | DSR |
| 7 | Signal Ground | SG (GND) | |
| 8 | Data Carrier Detect | Eingang | DCD |
| 17 | Receiver Clock | Ein-/Ausgang | RxD |
| 20 | Data Terminal Ready | Ein-/Ausgang | RxC |
In der Regel ist es nicht möglich, zwei Datenendeinrichtungen (DEEs, z.B. zwei Rechner) mit V.24-Anschluß direkt durch ein einfaches Kabelbündel zu verbinden. Die Normen sehen zur Verbindung zweier Datenendeinrichtungen den Einsatz von Modems (Datenübertragungseinrichtungen, DÜEs) vor. Dies ist für Entfernungen von wenigen Metern unwirtschaftlich. Um den Einsatz von Modems zu umgehen, bedarf es eines speziellen, an die Anforderungen der zu verbindenden Einheiten angepaßten Adapters. Ein Adapter in der einfachsten Form kann z.B. wie folgt realisiert werden:
| Bild 4.3-3: | Die einfachste V.24-Schnittstelle |
Die Datensignale werden auf den Leitungen TxD (Transmit Data) und RxD (Receive Data) übertragen. Als Bezugspotential dieser Signale dient das Signal Betriebserde (Signal Ground). Kurz gesagt, kann die Steuerung der Datenübertragung über die Steuerleitungen folgendermaßen vorgenommen werden:
Ist der Rechner (bzw. das Terminal) bereit, Daten auszutauschen, so signalisiert er dies durch ein H-Signal am Ausgang DTR (Data Terminal Ready) der V.24-Schnittstelle. Dabei ist die Richtung des Datenaustauschs nicht vorgegeben. Die Betriebsbereitschaft wird vom Kommunikationspartner über die Leitung DSR (Data Set Ready) durch einen H-Pegel mitgeteilt. Durch das Signal RTS kann der Prozessor in einem Peripheriegerät den Empfangsteil (Receiver) einschalten. Dieses Gerät kann wiederum über das Signal CTS den Prozessor über seine Empfangsbereitschaft informieren oder sogar erst den Sender (transmitter) in der Prozessorschnittstelle einschalten.
Benutzt man den oben dargestellten Adapter, so kontrollieren die verbundenen Einheiten jeweils die eigenen "kurzgeschlossenen" Steuersignale. Der Anwender ist selbst für die Funktionsfähigkeit der Verbindung verantwortlich, da über die Steuerleitungen keine Informationen des Kommunikationspartners zur Verfügung stehen.
Gebräuchliche Datenübertragungsprotokolle der V.24-Schnittstelle
Die Ready/Busy-Prozedur (s. Bild 4.3-4) ist die einfachste und in der Praxis wohl am häufigsten verwendete Prozedur. Sie ist eine "Hardwareprozedur", d.h. der Anwender braucht keine spezielle Software für diese Prozedur, da die Abwicklung der Kommunikation von den Schnittstellenbausteinen der Geräte übernommen wird. Zur Signalisierung des Status "Ready" (bereit zum Datenaustausch) oder "Busy" (nicht bereit) wird im einfachsten Fall nur eine Steuerleitung benötigt. Soll so zum Beispiel ein Terminal an einem Rechner angeschlossen werden, ist die Signalleitung DTR des Terminals mit der Signalleitung DSR des Rechners zu verbinden. Ein positives Signal auf dieser Leitung signalisiert dem Rechner, daß das Terminal empfangsbereit ist (Ready), ein negatives Signal den Busy-Status.
| Bild 4.3-4: | Die Schnittstelle der RDY/BSY-Prozedur |
Bei dieser Prozedur (s. Bild 4.3-5) werden die ASCII-Zeichen ETX ($03) und ACK ($06) zur Steuerung der Übertragung angewandt. Ist z.B. das Peripheriegerät bereit, Daten zu empfangen, so aktiviert es seine Signalleitung DTR und sendet das ACK-Zeichen (acknowledge) an den Rechner. Dieser sendet nun die Daten, die er mit dem ETX-Zeichen (end of text) abschließt. Wird vom Empfänger das Zeichen ETX unter den Daten erkannt, schickt dieser wiederum den ACK-Code zum Rechner und signalisiert damit, daß er das nächste Datenpaket übertragen kann. Wichtig ist, daß der ETX-Code im Datenfluß des Rechners entsprechend der Pufferkapazität des Peripheriegerätes eingesetzt wird, d.h. das jeweilige Datenpaket mit dem ETX-Code darf nicht größer als die Pufferkapazität des Empfängers sein.
| Bild 4.3-5: | Die ETX/ACK-Prozedur |
Bei dieser Prozedur kommen die ASCII-Steuerzeichen XON ($11) und XOFF ($13) zur Anwendung. XON entspricht im ASCII-Code dem Device Control DC1 und XOFF dem Device Control DC3. Das Peripheriegerät sendet bei Empfangsbereitschaft (Ready) den XON-Code, im anderen Fall (Busy) den XOFF-Code.
Nachdem nun die für uns wesentlichen Teile der V.24-Schnittstelle und ihrer Handhabung beschrieben wurden, wird der Interface-Baustein R6551, kurz ACIA (Asynchronous Communications Interface Adapter) genannt, näher erklärt. Im Bild ist das Blockschaltbild der ACIA dargestellt 1). Dieses läßt sich zunächst grob in 3 Teile aufteilen:
| Bild 4.3-6: | Blockschaltbild der ACIA R6551 |
Der Empfängerteil besteht aus dem Empfangs-Schieberegister, das die seriellen Daten über den Anschluß RxD aufnimmt und in paralleler Form an das Empfangs-Datenregister weiterleitet (Serien/Parallel-Wandlung). Dort stehen die Daten dann über den Datenbus-Treibern dem Prozessor zur weiteren Verarbeitung zur Verfügung.
Der Sendeteil enthält ein Sende- Datenregister, aus dem die Daten in paralleler Form in das Sende-Schieberegister übertragen werden. In diesem findet die Parallel/Serien-Wandlung statt. Die seriellen Daten werden über den Anschluß TxD ausgegeben.
Der Steuerungs- und Überwachungsteil enthält die weiteren Register, auf die im folgenden ausführlich eingegangen wird: Status-, Steuer- und Befehlsregister. Der "on-chip"- Baudratengenerator erzeugt aus der durch einen extern angeschlossenen Quarz stabilisierten Frequenz eine ganze Palette von unterteilten Frequenzen. Aus diesen muß die Übertragungsfrequenz selektiert werden, mit der die Schieberegister getaktet werden. (Der benutzte Grundtakt ist das 16fache des intern daraus abgeleiteten Schiebetaktes, so daß jedes Bit 16 Vollschwingungen dieses Grundtaktes lang ist.) Anstelle der intern erzeugten Frequenz können (am Eingang XTLI, s.u.) auch ein externer Takt angeschlossen werden und XTLO unbeschaltet bleiben.
Die Interruptlogik wertet die im Statusregister vorliegenden Ergebnisse einer Übertragung aus und unterbricht in bestimmten Fällen die CPU. Die letzte Komponente besteht aus der Schreib/Lese-Steuerung sowie der Auswahllogik für die einzelnen Register. Die Datenbus-Treiber sind bidirektional. Das folgende Bild 4.3-7 zeigt die Anschlußbelegung des R6551.
| Bild 4.3-7: | Anschlußbelegung des R6551 |
Die positive Flanke des Systemtaktes F2 synchronisiert alle internen Steuerungsvorgänge. Die Modem-Ausgangssignale DTR, RTS werden durch zugeordnete Bits im Befehlsregister unmittelbar beeinflußt, der Zustand der Eingangssignale DSR, DCD kann im Statusregister abgefragt werden. Die Bedeutung dieser Signale muß durch die Übertragungssoftware zur V.24-Kommunikation berücksichtigt werden. Nur das Eingangssignal CTS wirkt sich - wie unten beschrieben - direkt auf den Sendeteil aus.
Die Selektion der ACIA geschieht über die beiden Eingänge CS0 und #CS1 (Chip Select). Dazu muß an CS0 ein H-Pegel und an #CS1 ein L-Pegel angelegt werden. Die Auswahl der einzelnen Register geschieht dann über Eingänge RS0 und RS1. Diese Eingänge sind im Mikrorechner mit den Adreßleitungen A0 und A1 der CPU verbunden. Dabei können einige Register nur beschrieben, andere nur gelesen werden, so daß zur Auswahl die Schreib-/Leseleitung R/#W herangezogen werden kann. Ein H-Pegel (read) am R/#W-Eingang schaltet die Daten auf dem internen Datenbus der ACIA über die bidirektionalen Datenbus-Treiber auf den System-Datenbus des Mikrorechners durch. Ein L-Pegel an diesem Eingang überträgt die Daten vom System-Datenbus auf den Datenbus der ACIA (write). Tabelle 4.3-2 zeigt die Zuordnung der Register zu bestimmten Adressen im Mikrorechner und die mit den Registern ausführbaren Operationen.
| Register-Operation | ||||
|---|---|---|---|---|
| Adresse | RS1 | RS0 | Schreiben (R/W=0) | Lesen (R/W=1) |
| F008 | 0 | 0 | Sende-Datenregister | Empfangs-Datenr. |
| F009 | 0 | 1 | "Programmed Reset" | Statusregister |
| F00A | 1 | 0 | Befehlsregister | Befehlsregister |
| F00B | 1 | 1 | Steuerregister | Steuerregister |
Zu Beginn eines Sendevorgangs wird das Statusregister ausgelesen, um zu prüfen, ob das Sende-Datenregister frei ist (TDRE-Bit, s.u.). Ist dies der Fall, so überträgt die CPU Daten zum Sende-Datenregister (write F008). Von dort gelangen sie ins Sende-Schieberegister und werden als serieller Datenstrom ausgegeben. Hierzu ist eine Formatierung notwendig, die gemäß des eingestellten Steuerwortes durchgeführt wird (Anzahl der Datenbits, Stopbits und evtl. Paritätsbit, s.u.).
Der Sendevorgang wird abhängig vom Zustand des Sende-Datenregisters fortgesetzt. D.h., sobald dieses frei ist, kann ein neues Datenwort zur Übertragung in die ACIA geschrieben werden. Da das Sende-Datenregister und das Sende-Schieberegister hintereinander geschaltet sind, kann ein neues Datenwort schon während der Ausgabe ins Sende-Datenregister geladen werden. Die folgende Skizze (Bild 4.3-8) zeigt die Übertragung mehrerer Zeichen unter Interrupt-Steuerung.
| Bild 4.3-8: | Zeichensenden unter Interrupt-Steuerung |
Erklärung:
Die nächste Skizze (Bild 4.3-9) zeigt den Fall, daß die CPU das nächste Zeichen nicht rechtzeitig liefert, also ein sog. Sende-Unterlauf (Underrun) auftritt.
| Bild 4.3-9: | Auftreten eines Sende-Unterlaufs |
Erklärung:
Zur Aktivierung des Sendeteils muß das Eingangssignal CTS auf L-Pegel liegen. Ein Übergang zum H-Pegel deaktiviert unmittelbar den Sendeteil und bricht dadurch eine laufende Übertragung ab. Dies wird durch einen konstanten H-Pegel (high marking signal) auf der Ausgangsleitung TxD dem angeschlossenen Gerät gemeldet. Der Zustand des CTS-Eingangs wird dem Prozessor durch kein Statusbit angezeigt. Auf ihn kann beim Vorliegen einer Interruptanforderung nur durch Ausschluß aller anderen Interrupt-Bedingungen geschlossen werden.
Über den seriellen Dateneingang gelangen die Daten zur ACIA. Sie werden ins Empfangs-Schieberegister geladen und dort auf das eingestellte Format hin überprüft. Formatfehler werden im Statusregister angezeigt. Vom Empfangs-Schieberegister gelangen die Daten ins Empfangs-Datenregister. Das Statusregister wird von der CPU vor dem Lesen der Daten aus dem Empfangs-Datenregister abgefragt. Wurde ein Datenwort empfangen und lag kein Fehler vor, kann die CPU die Daten zur weiteren Verarbeitung lesen. Die folgende Skizze (Bild 4.3-10) zeigt den Empfangsvorgang im einzelnen:
| Bild 4.3-10: | Zeichenempfang unter Interruptsteuerung |
Erklärung:
Die folgende Skizze (Bild 4.3-11) zeigt den Fall, daß die CPU das letzte empfangene Zeichen nicht rechtzeitig aus dem Empfangs-Datenregister liest, bevor das nächste Zeichen in der ACIA eingetroffen ist, also ein Überlauf (Overrun) stattfindet.
| Bild 4.3-11: | Auftreten eines Empfangsüberlaufs |
Erklärung:
Der Empfangsvorgang kann wahlweise durch die intern erzeugte Frequenz des Baudraten-Generators oder aber durch eine externe Taktfrequenz am Eingang RxC (Receive Clock) gesteuert werden. Im Fall der internen Takterzeugung wird am Anschlußpin RxC, der nun als Ausgang geschaltet ist, die 16fache Frequenz der programmierten Baudrate, also der oben beschriebene interne Grundtakt, ausgegeben und kann so zur (synchronisierten) Steuerung weiterer ACIAs dienen.
Das Statusregister ist 8 bit breit und kann vom Prozessor nur gelesen werden. Ein Schreibbefehl mit der Adresse des Statusregisters hat zur Folge, daß das Bit 2 im Statusregister *) und die Bits 0,2,3,4 im Befehlsregister gelöscht (Bit 1 gesetzt) werden (programmed reset) und dadurch der Baustein in einen definierten Grundzustand versetzt wird.
Die einzelnen Bits des Statusregisters nach Bild 4.3- 12 geben Auskunft über den Zustand der Datenregister und der externen Kontroll-Signale (wie DSR und DCD), sowie über das Vorliegen von Übertragungsfehlern (Format-, Paritäts- und Überlauffehler) und dem daraus abgeleiteten Vorliegen einer Unterbrechungsbedingung.
| Bild 4.3-12: | Der Aufbau des Statusregisters (Adresse: $F009) |
Dieses Bit wird gesetzt, wenn wenigstens eines der Bits 3 bis 6 gesetzt wurde. Es wird jedoch nicht gesetzt, wenn eine der durch die Bits 2-0 beschriebenen Fehlerbedingungen (s.u.) auftritt. (Diese müssen daher bei jeder Übertragung durch die Software "abgefragt" werden.) Es wird gelöscht beim Lesen des Statusregisters. Das Bit 7 hat keinen direkten Einfluß auf den Interruptausgang IRQ zum Prozessor. Es dient dem Prozessor lediglich zur Feststellung der Interruptbedingung. Das Durchschalten des Bits 7 zum Interruptausgang IRQ der ACIA wird durch Setzen der entsprechenden Bits im Befehlsregister aktiviert (enabled) oder deaktiviert (disabled).
Dieses Bit gibt den Zustand des entsprechenden Eingangs der ACIA wieder, das vor allem beim Modem-Betrieb benutzt wird.
Dieses Bit gibt den Zustand des entsprechenden Eingangs #DCD der ACIA wieder, das vor allem beim Modem-Betrieb benutzt wird.
Durch dieses Bit kann der Prozessor feststellen, ob das letzte Datum, das er übertragen hat, den Baustein bereits "verlassen" hat: Es wird dadurch gelöscht, daß der Prozessor ein Datum in das Sende-Datenregister schreibt. Es wird von der ACIA gesetzt, wenn sie ein Datum vom Sende Datenregister ins Sende-Schieberegister überträgt. Das ist aber bei kontinuierlicher Übertragung von Daten erst dann der Fall, wenn das (letzte) Stopbit des vorhergehenden Zeichens bereits gesendet wurde. Vor der Übertragung eines Zeichens in das Sende-Datenregister sollte daher die CPU stets prüfen, ob dieses Bit den Wert 1 hat. Wird das nächste Zeichen erst mit einer Verzögerung von der CPU geschrieben, gibt der Baustein den H-Pegel (des Stopbits) als "High Marking Signal" aus.
Der ACIA-Baustein setzt dieses Bit beim Transfer der Daten vom Empfangs-Schieberegister zum Empfangs-Datenregister. Es wird gelöscht, wenn der Prozessor die Daten vom Empfangs-Datenregister liest. Durch dieses Bit kann also der Prozessor feststellen, ob ein neues Datum empfangen wurde und im Empfangs- Datenregister bereitsteht. Liest der Prozessor dieses Datum nicht rechtzeitig aus, kann es zu einem "Überlauf" (overrun, s.u.) des Sende-Schieberegisters kommen, wenn bereits das nächste Zeichen empfangen wird.
Das Overrun-Bit wird gesetzt, wenn ein neues Datum ins Empfangs-Schieberegister übertragen wurde, bevor das vorhergehende vom Prozessor aus dem Empfangs Datenregister gelesen wurde. Der Inhalt des Empfangs-Schieberegisters wird dabei überschrieben und geht verloren. Anhand dieses Bits kann der Prozessor also feststellen, ob er alle Daten bekommen hat. Von dieser Möglichkeit sollte bei jeder Übertragung Gebrauch gemacht werden, um eine Konsistenz der empfangenen Daten zu sichern. Es ist zu beachten, daß das Auftreten eines Overrun- Fehlers nicht zum Setzen des Interrupt-Flags (Bit 7) führt.
Ein Formatfehler wird angezeigt, wenn das empfangene Datenformat zwischen Start- und Stopbit(s) nicht mit dem im Steuerregister eingestellten übereinstimmt. Dies ist z.B. dann der Fall, wenn im Steuerregister zwei Stopbits eingestellt wurden, jedoch nur ein Stopbit empfangen wird. Ist das nächste übertragene Datenwort "in Ordnung", wird Bit 1 wieder gelöscht. Ein Formatfehler führt zu keiner Interruptanforderung.
Ist das Bit 5 im Befehlsregister gesetzt, wird beim Senden ein Paritätsbit generiert und beim Empfang eine Paritätsprüfung durchgeführt. Ergibt diese einen Fehler, wird das Bit 0 gesetzt. Ist im nächsten Datenwort das Paritätsbit "in Ordnung", wird Bit 0 wieder gelöscht.
Das folgende Flußdiagramm (Bild 4.3-13) zeigt die Abfrage der verschiedenen Statusbits in einer Unterbrechungsbehandlungs-Routine zur Einleitung der geeigneten Maßnahmen - Datenübertragung oder Fehlerbehandlung.
| Bild 4.3-13: | Flußdiagramm zur Abfrage der Statusbits |
Das Befehlsregister (Command Register - CR) hat den im Bild 4.3-14 gezeigten Aufbau. Es bestimmt die im folgenden beschriebenen Funktionen und Modi.
| Bild 4.3-14: | Aufbau des Befehlsregisters (Adresse: $F00A) |
Ist die Betriebsart mit Paritätsprüfung gewählt (s. Bit 5), so können mit Hilfe dieser beiden Bits folgende Steuermöglichkeiten für die Paritätsprüfung selektiert werden. Dabei muß in den Fällen, in denen ein Paritätsbit erzeugt und geprüft wird, im Sender und Empfänger natürlich dieselbe Parität (gerade oder ungerade) selektiert werden, da sonst bei jedem Zeichen ein Paritätsfehler festgestellt wird. Wird vom Empfänger kein Paritätsbit ausgewertet, aber wegen eines vorgegebenen Formats nach den Datenbits ein weiteres Bit erwartet, so besteht die Möglichkeit, dieses zusätzliche Bit hinter jedem übertragenen Zeichen konstant auf logisch "0" oder logisch "1" zu setzen. Nach Bild 4.3-2 entspricht der 1. Fall dem Zustand des Startbits, das zur Markierung des Anfangs eines Zeichens (mark bit) dient, der 2. dem Zustand des Stopbits, das auch als Leerzeichen oder Zwischenraum (space) zwischen zwei Zeichen betrachtet werden kann.
| Bit 7 | Bit 6 | Steuerung |
|---|---|---|
| 0 | 0 | ungerade Parität (odd parity) |
| 0 | 1 | gerade Parität (even parity) |
| 1 | 0 | konstant 0-Bit (mark parity) |
| 1 | 1 | konstant 1-Bit (space parity) |
Ist Bit 4 gesetzt, so wird jedes über den Eingang RxD empfangene Zeichen - am Sendeteil vorbei - über den Ausgang TxD (mit einer Verzögerung von einer halben Bitzeit) zurückgesendet. Für diese Betriebsart müssen Bit 3 und Bit 2 (s.u.) auf 0 gesetzt, d.h. der Sendeteil deaktiviert sein. Dieser Modus ist für Testzwecke und für den Anschluß eines Terminals vorgesehen, bei dem jedes zum Rechner gesendete Zeichen erst nach dem Zurücksenden durch die ACIA auf dem Bildschirm erscheint. (Dadurch bekommt der Benutzer auf einfache Weise eine Kontrolle, ob das gewünschte Zeichen eingegeben wurde.)
Diese beiden Bits steuern den Zustand des Sendeteils in der ACIA und der zugeordneten Signalleitung #RTS. Ist der Sendeteil "eingeschaltet", so liegt der Ausgang #RTS auf L-Pegel (Transmitter enabled). Ist der Sendeteil ausgeschaltet, so ist #RTS auf H-Pegel (Transmitter disabled). In diesem Fall kann der Empfangsteil weiter arbeiten. Außerdem bestimmen Bit 3 und Bit 2, ob durch das Setzen des Bit 4 im Statusregister (TDRE - Transmitter Data Register Empty) eine Unterbrechungsanforderung zur CPU durchgeschaltet wird (Transmitter Interrupt enabled) oder nicht (Transmitter Interrupt disabled). Der Fall Bit3=0, Bit2=1 legt den "normalen" Betriebsmodus fest, bei dem die Zeichenübertragung durch Interruptsteuerung vorgenommen wird und das Signal #RTS durch einen L-Pegel seine Übertragungsbereitschaft anzeigt. Im letzten Fall der folgenden Tabelle 4.3-4 sendet die ACIA solange über den TxD-Ausgang als spezielles Unterbrechungs-Zeichen (Break) einen L-Pegel, bis die Bits 2 und 3 von der CPU "umprogrammiert" werden. Dieses Zeichen informiert den Empfänger ohne zusätzliche Steuerleitung darüber, daß der Sender nicht bereit ist.
| Bit3 | Bit2 | RTS | Sendeteil | Transmitter Interrupt |
|---|---|---|---|---|
| 0 | 0 | H | aus | nicht aktiviert |
| 0 | 1 | L | ein | aktiviert |
| 1 | 0 | L | ein | nicht aktiviert |
| 1 | 1 | L | ein | nicht aktiviert, Break |
Dieses Bit steuert die De-/Aktivierung des IRQ-Ausgangs zur CPU, nicht aber die interne Interruptlogik, d.h. Interruptanforderungen werden bei Vorliegen der entsprechenden Bedingungen zwar intern generiert, aber nicht zur CPU weitergereicht.
Dieses Bit steuert den gesamten Baustein (master enable/disable) und speziell den Zustand der Ausgangsleitung DTR, die stets den inversen Zustand des Bits 0 hat.
Hinweis:
Die Startadresse der Interruptroutine, die eine Unterbrechungsanforderung der ACIA bedient, ist im Praktikumsrechner unter den Adressen
Das Steuerregister (Control Register, Instruction Register - IR) ist ebenfalls 8 bit breit. Es enthält Informationen über die Übertragungsgeschwindigkeit, die Quelle des Empfangs Taktes sowie über das Format des Übertragungsrahmens, d.h. über die Wortlänge und die Zahl der Stopbits (s. Bild 4.3-15).
| Bild 4.3-15: | Der Aufbau des Steuerregisters (Adresse: $F00B) |
Diese Bits bestimmen die Wortlänge der Übertragungsdaten nach Tabelle 4.3-4.
| Bit 6 | Bit 5 | Wortlänge |
|---|---|---|
| 0 | 0 | 8bit |
| 0 | 1 | 7 bit |
| 1 | 0 | 6 bit |
| 1 | 1 | 5 bit |
Die Tabelle 4.3-5 zeigt die durch die Bits 3-0 selektierbaren Übertragungsgeschwindigkeiten, wie sie für den Praktikumsrechner gelten. (Diese Werte sind wählbar, wenn zwischen den Bausteinanschlüssen XTALI, XTALO ein 1.8432-MHz-Quarz angeschlossen ist. Wird ein Quarz mit einer anderen Frequenz f (in MHz) benutzt, so sind die angegebenen Baudraten mit dem Faktor f/1.8432 zu multiplizieren.)
| Bit | ||||
|---|---|---|---|---|
| 3 | 2 | 1 | 0 | Baud-Rate |
| 0 | 0 | 0 | 0 | (externer Takt)/16 |
| 0 | 0 | 0 | 1 | 50 |
| 0 | 0 | 1 | 0 | 75 |
| 0 | 0 | 1 | 1 | 109.92 |
| 0 | 1 | 0 | 0 | 134.58 |
| 0 | 1 | 0 | 1 | 150 |
| 0 | 1 | 1 | 0 | 300 |
| 0 | 1 | 1 | 1 | 600 |
| 1 | 0 | 0 | 0 | 1200 |
| 1 | 0 | 0 | 1 | 1800 |
| 1 | 0 | 1 | 0 | 2400 |
| 1 | 0 | 1 | 1 | 3600 |
| 1 | 1 | 0 | 0 | 4800 |
| 1 | 1 | 0 | 1 | 7200 |
| 1 | 1 | 1 | 0 | 9600 |
| 1 | 1 | 1 | 1 | 19200 |
| Selbsttestaufgabe S4.3-1: |
|---|
|
| Praktische Übung P4.3-1: |
|---|
| Programmieren Sie die V.24-Schnittstelle im 6809-Simulator, wie in Selbsttestaufgabe S4.3-1a vorgegeben. Geben Sie nun das Zeichen 'K' aus und vergleichen Sie das Zeitdiagramm mit dem in der Selbsstestaufgabe S4.3-1b ermitteltem Bild. (Hinweis: Verkleinern Sie das ACIA-Fenster durch Anklicken der Raute in der oberen, rechten Ecke.) |
| Selbsttestaufgabe S4.3-2: |
|---|
| Das folgende Bild stellt die serielle Übertragung zweier Zeichen auf einer V.24-Leitung dar, wie sie mit dem Oszilloskop zu beobachten ist. Vorausgesetzt ist, daß das niederwertige Bit jedes Zeichens zuerst übertragen wird und bei der Übertragung kein Fehler auftritt.
![]() Es werde vorausgesetzt, daß die übertragenen Zeichen aus dem erweiterten ASCII-Zeichensatz stammen, wie er in der Tabelle im Anhang D dieser KE4 angegeben ist.
|
| Praktische Übung P4.3-2: |
|---|
| Programmieren Sie die V.24-Schnittstelle im 6809-Simulator, wie in Selbsttestaufgabe S4.3-2 vorgegeben. Geben Sie nun die dort unter e) ermittelte Buchstabenkombinationen ein und vergleichen Sie das Zeitdiagramm mit dem in der Selbsttestaufgabe S4.3-2 gezeigten Bild. |
4.3.4 Kommunikation mit dem PC
In KE2 haben Sie bereits gelernt, wie Sie Programme und Datenbereiche zwischen dem PC und dem Praktikumsrechner austauschen können und damit z.B. auf einer Festplatte abspeichern bzw. von dort lesen können. Dies geschah auf einer hohen Anwendungsebene, ohne daß Sie wissen mußten, wie die V.24-Schnittstelle im Praktikumsrechner funktioniert und programmiert werden kann. In KE3 wurde dann bei der Beschreibung der Monitorroutinen - im Vorgriff auf die Beschreibung der V.24-Schnittstelle in dieser KE4 - das Programm LOAD zum Laden von Programmen und Daten in den Praktikumsrechner analysiert (vgl. Praktische Übung P3.2-6). Nachdem Sie in den vorangehenden Unterabschnitten die V.24-Schnittstelle ausführlich kennengelernt und in den Übungen bereits erste praktische Anwendungen dazu durchgeführt haben, sollen Sie sich in diesem Unterabschnitten nun ausführlich mit der Kommunikation zwischen zwei Rechnern über die V.24-Schnittstelle beschäftigen, und zwar auf einer sehr niedrigen, hardwarenahen Stufe. Die benutzten beiden Rechner sind Ihr PC sowie der Praktikumsrechner. Zur Vorbereitung verbinden Sie bitte beide mit dem zur Verfügung
gestellten Kabel und stellen Sie die V.24-Schnittstelle des PCs, wie in KE2 beschrieben, (mit Hilfe des MODE-Befehls) ein.
| Praktische Übung P4.3-3: |
|---|
| Schreiben Sie ein Programm, daß einen Datenblock vom PC in den Praktikumsrechner überträgt und ab einer eingebbaren Adresse im Speicher ablegt.
Im einzelnen soll das Programm:
|
Zur Arbeit mit dem Emulator:
Nachdem Sie dieses Programm mit dem Editor erstellt und assembliert haben, können Sie es nun mit dem 6809-Emulator austesten. Starten Sie dazu den Emulator und laden Sie das Maschinenprogramm (Endung .HEX) in den Arbeitsspeicher des emulierten 6809-Prozessores (Menüpunkt: Datei, Eintrag: laden).
1) Nun können Sie durch Anklicken der Ikone
eine Datei bestimmen, in die alle ins Sende-Datenregister (Adresse $F008) geschriebenen ASCII-Zeichen als Zeichenkette eingetragen werden2). (Die Übertragung der Zeichenkette vom Emulator in die Datei wird in der Statuszeile durch ein Diskettensymbol mit der Beschriftung ACIA auf der linken Seite angezeigt.) Die Zeichenkette müssen Sie - wie oben verlangt - durch einen Punkt abschließen. Durch die Ikone
können Sie die Aufzeichnung stoppen. Danach starten Sie die Empfangsroutine (zweifaches Betätigen der Taste 'G') und öffnen durch die Ikone
die eben erzeugte Datei zur Eingabe der Zeichenkette. (Die Übertragung der Zeichenkette aus der Datei in den Emulator wird in der Statuszeile durch ein Diskettensymbol mit der Beschriftung ACIA auf der rechten Seite angezeigt.) Wenn Ihr Programm fehlerfrei arbeitet, können Sie dann im Pufferbereich die eingegebene Zeichenkette wiederfinden.
Wenn Ihr Programm im Emulator fehlerfrei läuft, können Sie es im Praktikumsrechner ablaufen lassen. Dazu müssen Sie es, wie in KE2 beschrieben, (mit dem mitgelieferten Programm IDE9.EXE) in den Praktikumsrechner übertragen. Nun erstellen Sie sich mit Hilfe des Editors eine beliebige ASCII-Datei und beenden die Eingabe mit einem Punkt. Starten Sie danach das erstellte Programm auf dem Praktikumsrechner und übertragen Sie die ASCII-Datei mit dem MS-DOS-Befehl "COPYDateiname COMn:" vom PC in den Praktikumsrechner. Überprüfen Sie wiederum die Übertragung durch Vergleich der in der Datei und im Puffer abgelegten ASCII-Zeichen.
Nach dem V.24-Empfangsprogramm sollen Sie nun auch das Gegenstück, also ein Programm zum Senden von ASCII-Zeichen entwickeln. Natürlich könnten Sie das in einer höheren Programmiersprache oder aber in 80x86-Assembler schreiben und auf dem PC ablaufen lassen. Beide Programmiersprachen sind jedoch nicht Gegenstand dieses Praktikums.
Der 6809-Emulator liefert aber die Möglichkeit, den PC als vollständigen Ersatz für einen 2. 6809-Rechner zu benutzen. Dazu können Sie die emulierte V.24-Schnittstelle auf die (in Hardware realisierte) V.24-Schnittstelle Ihres PCs abbilden (Menü: Datei, Eintrag: Schnittstellen). Danach sind Sie in der Lage, durch ein vom Emulator abgearbeitetes 6809-Programm auf die PCSchnittstellen COM1: oder COM2: zuzugreifen.
| Praktische Übung P4.3-4: |
|---|
| Schreiben Sie ein Programm, daß einen Datenbereich aus dem Arbeitsspeicher des Praktikumsrechners liest und über die V.24-Schnittstelle überträgt.
Im einzelnen soll das Programm:
|
Zur Arbeit mit dem 6809-Emulator:
Nachdem Sie auch dieses Programm mit dem Editor erstellt und assembliert haben, können Sie es ebenfalls mit dem 6809-Emulator austesten. Starten Sie dazu den Emulator und laden Sie das Maschinenprogramm (Endung .HEX) in den Arbeitsspeicher des emulierten 6809-Prozessors (Menüpunkt: Datei, Eintrag: laden).3) Nun können Sie das ACIA-Fenster (Menüpunkt: Bausteine, Eintrag: ACIA) öffnen.
Dieses Fenster ist im folgenden Bild dargestellt. In der Mitte des Fensters sehen Sie die Register der ACIA mit ihren aktuellen Belegungen. Die Bedeutungen der einzelnen Bits von Steuer- und Befehlsregister - die im Fenster abweichend zum Text mit CON (Control) und COM (Command) bezeichnet sind - ist quasi "im Klartext" rechts aufgeschrieben. Sie können nun eine Folge von zweistelligen Hexadezimalzahlen eingeben und durch die Eingabetaste abschließen. Daraufhin werden diese Zeichen sukzessiv vom Feld 'zu empfangen' ins Feld 'empfangen' übertragen und gleichzeitig das Zeitdiagramm des jeweils übertragenen Zeichens im oberen Teil des Bildes dargestellt. Durch die Tastatur wird auf diese Weise die Empfangsleitung RxD der ACIA "simuliert". Nach der Übertragung können Sie sich mit Hilfe des waagerechten Verschiebebalkens noch einmal die gesamte zeitliche Darstellung der V.24-Übertragung anschauen. Die Aussendung von Zeichen geschieht durch das Einschreiben ihres V.24-Codes in das Sende-Datenregister (Adresse: $F008) der ACIA, z.B. über die Tastatur des emulierten Praktikumsrechners. Sie können sich auch dazu das Zeitdiagramm anschauen, wenn Sie das ACIA-Fenster durch Anklicken der Raute in der oberen, rechten Ecke verkleinern.
Durch Anklicken der Ikone
können Sie eine Datei bestimmen, in die alle ins Sende-Datenregister (Adresse $F008) geschriebenen Zeichen eingetragen werden. Legen Sie eine ASCII-Zeichenkette, die mit einem Punkt ('.'=$2E) endet, in einem Speicherbereich des emulierten Rechners ab. Starten Sie das Programm und geben Sie die Startadresse des Speicherbereiches ein. Nachdem das Programm mit einem Rücksprung ins Monitorprogramm endet, müssen Sie durch die Ikone
die Aufzeichnung stoppen. Danach können Sie sich durch die Ikone
das Zeitdiagramm der in der eben erzeugten Datei aufgezeichneten Zeichen anschauen. (Dabei müssen Sie den waagerechten Verschiebebalken benutzen. Wenn Ihr Programm fehlerfrei arbeitet, können Sie als Beschriftung des Zeitdiagramms die im Speicherbereich abgelegte Zeichenkette wiederfinden.
Wenn Ihr Programm fehlerfrei läuft, können Sie zur Kommunikation mit dem Praktikumsrechner einsetzen. Dazu müssen Sie das Empfangsprogramm aus P4.3-3, wie in KE2 beschrieben, (mit dem mitgelieferten Programm IDE9.EXE) in den Praktikumsrechner übertragen. Nun bilden Sie - wie oben beschrieben - die emulierte V.24-Schnittstelle auf die PC-Schnittstelle ab (Menüpunkt: Datei, Eintrag: Schnittstellen). Starten Sie danach das Empfangsprogramm im Praktikumsrechner und das Sendeprogramm im Emulator. Überprüfen Sie wiederum die Übertragung durch Vergleich der in den Speicherbereichen des Emulators und des Praktikumsrechners vorliegenden ASCII-Zeichenketten.
| 4.2 Die Parallel-Schnittstelle | Anhang A: Programmiermodell MC6821 |