RS-232

Aus C64-Wiki
(Weitergeleitet von ACIA)
Wechseln zu: Navigation, Suche
(thumbnail)
RS232-Interface für den Userport

RS-232 - heute als EIA-232 bezeichnet - ist ein Standard für eine serielle Schnittstelle, die in den frühen 1960er Jahren von einem US-amerikanischen Standardisierungskommitee eingeführt wurde. Sie ist ebenso hinsichtlich der Funktion als ITU-T Empfehlung V.24 standardisiert und bekannt. Diese Schnittstelle wird vor allem für Modems und Akustikkoppler, aber auch für manche Drucker und andere Geräte (z.B. Eprommer) verwendet.

Der VC-20, der C64 und der C128 bieten eine solche Schnittstelle über den Userport an (Signal-Belegung siehe dort), wobei allerdings die dort verwendeten TTL-Pegel durch eine externe Schaltung an die V.28-Pegel angepasst werden müssen. Aus Softwaresicht emulieren[1] diese Rechner einen MOS 6551[2][3] ACIA Schnittstellenbaustein, wie er etwa im PET und Plus/4 zum Einsatz kommt. Die Emulation (die Routinen befinden sich im KERNAL-ROM) arbeitet allerdings nicht so schnell wie ein echter 6551-Chip, maximal sind darüber 2400 Baud (statt der 19200) möglich. Der 6551 hat drei wichtige Register, eine Steuerregister, ein Befehlsregister und ein Statusregister. Die gewünschten Werte für die ersten beiden Register, die nur geschrieben werden können, werden der Emulation als CHR$-Codes im (Pseudo-)Dateinamen des OPEN-Befehls für die Schnittstelle mitgeteilt. Das Statusregister kann nur gelesen werden, wozu die Systemvariable ST dient (siehe Details unten).

Inhaltsverzeichnis

[Bearbeiten] C64 zu RS232-Schnittstelle

Commodore VIC-1011A nach Andreas Boose (news:comp.sys.cbm)

 Userport C64                                           C64 RS232
                       _________
                      |         |
   PA2 M-----------11-|         |-14------------------- TXD (2)
   PB1 D-----------10-|         |--7------------------- RTS (4)
   PB6 K-----------12-| MAX 232 |-13------------------- CTS (5)
 FLAG2 B---X--------9-|         |--8------------------- RXD (3)
   PB0 C---|          |         |--3--|+-|
   VCC 2-----------16-|         |--1-----|              DB25-Stecker
   GND N------X----15-|         |
              X--|+-2-|         |--5--|+-|
              X--+|-6-|_________|--4-----|
              |
              |---------------------------------------- GND (7)

-|+- Kondensator 22µF/16V
-  +

[Bearbeiten] GLINK-LT-A00

http://gglabs.us/node/530 Sprache:englisch

[Bearbeiten] Link232

http://www.go4retro.com/projects/link232/ Sprache:englisch

[Bearbeiten] EZ-232

SwiftLink kompatibel

[Bearbeiten] Silversurfer

http://wiki.icomp.de/wiki/Silversurfer Sprache:englisch

[Bearbeiten] HART

http://mikenaberezny.com/hardware/c64-128/hatronics-hart-rs-232/ Sprache:englisch

[Bearbeiten] DUART

http://www.ide64.org/duart.html Sprache:englisch zweimal bis zu 115.200 bps

[Bearbeiten] Steuerregister (Kontrollregister)

[Bearbeiten] Bit 0-3

Hier wird die Übertragungsgeschwindigkeit in "Bits pro Sekunde" (Baud) eingestellt.

Dezimalwert Übertragungsgeschwindigkeit [Bit/s]
0 -
1 50
2 75
3 110
4 134,5
5 150
6 300
7 600
8 1200
9 1800
10 2400

[Bearbeiten] Bit 4

Nicht benutzt.

[Bearbeiten] Bit 5-6

Dezimalwert Anzahl der Datenbits
0 8
32 7
64 6
96 5

[Bearbeiten] Bit 7

Dezimalwert Anzahl der Stoppbits
0 1
128 2

[Bearbeiten] Befehlsregister (Kommandoregister)

[Bearbeiten] Bit 0

  • 3-Draht-Modus (Software-Handshake/Protokoll):
    • Die Datenflusskontrolle, also ob z.B. die gesendeten Daten vom Empfänger übernommen werden können, muss durch spezielle, im Datenstrom eingeflochtene Steuercodes realisiert werden (XON/XOFF-Codes: XON=$11, XOFF=$13).
    • Empfänger und Sender müssen sich über die Flusskontrolle einig sein bzw. überhaupt implementieren. XON/XOFF-Codes haben spezielle Bedeutung und können als Wert nicht unmittelbar transportiert werden.
    • Eine Verbindungskabel kommt mit 3 Adern aus.
  • X-Draht-Modus (Hardware-Handshake/Protokoll):
    • Durch zusätzliche Hardware-Leitungen (zumindest RTS und CTS) erfolgt die Flusskontrolle. Das Verhalten der Leitungen und welche weiteren Signale erforderlich sind in realen Implementierung nicht einheitlich.
    • Mindestens ein 5-adriges Kabel ist für die Verbindung notwendig.
Dezimalwert Handshake-Art
0 3-Draht-Modus (Software-Protokoll)
1 X-Draht-Modus (Hardware-Protokoll)

[Bearbeiten] Bit 1-3

Nicht benutzt.

[Bearbeiten] Bit 4

  • Vollduplex: Daten können gleichzeitig empfangen und gesendet werden, also der Datentransfer kann in beiden Richtungen (auch mit unterschiedlichen Geschwindigkeiten) passieren. (Standard)
  • Halbduplex: Hier werden die Daten zu einem Zeitpunkt entweder nur empfangen oder gesendet, also immer nur in eine Richtung übertragen.
Dezimalwert Übertragungsart
0 Vollduplex
16 Halbduplex

[Bearbeiten] Bit 5-7

Dezimalwert Paritätsprüfung
0, 64, 128, 192 keine
32 ungerade
96 gerade
160 mark (Paritätsbit immer 1)
224 space (Paritätsbit immer 0)

[Bearbeiten] Statusregister

Das Statusregister (Systemvariable ST) hat bei der RS-232-Übertragung eine andere Bedeutung als sonst üblich. Es kann in Basic abgefragt werden, jedoch wird es bei jedem Lesen gelöscht! Daher sollte es in einer anderen Variable zwischengespeichert werden, um es später für mehrfache Abfragen nutzen zu können.

Bit-Nr. Bedeutung
0 Paritätsfehler
1 Rahmenfehler (Start-/Stoppbit)
2 Empfängerpuffer voll
3 Empfängerpuffer leer
4 CTS-Signal fehlt
5 unbenutzt
6 DSR-Signal fehlt
7 BREAK-Signal empfangen

[Bearbeiten] Programmierung in Basic

Die Programmierung der Schnittstelle erfolgt in BASIC mit den üblichen Ein/Ausgabe-Befehlen (OPEN, CLOSE, PRINT#, CMD, GET#, INPUT#) sowie der Systemvariable ST. Dabei sind allerdings einige Dinge zu beachten:

  • Der OPEN-Befehl legt am oberen Ende des Variablenspeichers zwei je 256 Byte große Datenpuffer (einer für Ausgabe, einer für Eingabe) an. Implizit wird gleichzeitig ein CLR-Befehl ausgeführt, d.h. alle Variablen sind anschließend gelöscht. Sollten darüber hinaus weniger als 512 Byte Variablenspeicher vorhanden sein, wird der obere Teil des BASIC-Programmes kommentarlos überschrieben.
  • Durch CLOSE werden die beiden Puffer wieder entfernt und wie bei OPEN der Variablenspeicher gelöscht. Befinden sich noch Daten im Ausgabepuffer, werden diese nicht mehr geschrieben, sondern sofort entfernt. Daher sollte vor dem Schließen geprüft werden, ob der Ausgabepuffer leer ist.
  • Eine Verwendung von INPUT# ist nicht zu empfehlen, da bei Empfangsproblemen das Programm blockiert ist und nur mehr durch RUN/STOP +RESTORE  beendet werden kann.

Die entsprechende Unterstützung ist im KERNAL gegeben, aber bei Betriebssystemvarianten von Hardware-Schnellladern fehlen diese mitunter, da der entsprechende ROM-Platz für die Routinen der Disk-Unterstützung verwendet wird.


Beispiel

10 REM *************** EINSTELLUNGEN STEUERREGISTER
15 :
20 BR=6: REM 300 Baud 
30 DB=0: REM 8 Datenbits (davon 1 Paritätsbit, siehe Zeile 80) 
40 SB=0: REM 1 Stopp-Bit
45 :
50 REM *************** EINSTELLUNGEN BEFEHLSREGISTER
55 :
60 HS=1   : REM X-Draht
70 UA=0   : REM Vollduplex
80 PA=160 : REM Mark-Parität (8.Datenbit immer 1)
90 :
100 REM ************** EINSTELLUNGEN ALLGEMEIN
105 :
100 LF=2 : REM logische Dateinummer (frei wählbar)
110 GA=2 : REM Geräteadresse der RS-232-Schnittstelle
120 SA=0 : REM Sekundäradresse
125 :
200 OPEN LF,GA,SA, CHR$(BR+DB+SB) + CHR$(HS+UA+PA)

Danach kann man mit folgenden Befehlen fortfahren:

[Bearbeiten] Links

WP-W11.png Wikipedia: RS-232
WP-W11.png Wikipedia: Baud
WP-W11.png Wikipedia: V.24
WP-W11.png Wikipedia: V.28
WP-W11.png Wikipedia: TTL


[Bearbeiten] Quellen

  1. Mapping the Commodore 64 bei zimmers.net Sprache:englisch
  2. Datenblatt des MOS 6552 ACIA bei 6502.org Sprache:englisch
  3. Datenblatt des CMOS ACIA 6551 von WDC Sprache:englisch
In anderen Sprachen