Serielle Datenübertragung
mit dem Schnittstellenbaustein 8251
Einleitung
Für das Verbinden zweier Computer gibt es 2 Verfahren. Das Erste ist die parallele Datenübertragung, die durch verwenden mehrerer Datenleitungen sehr schnell ist. Das Zweite ist die Serielle Datenübertragung, die zwar langsamer als die parallele ist, jedoch mit weitaus weniger Leitungen auskommt und damit wesentlich preisgünstiger ist.
Wir haben uns mit der seriellen Datenübertragung näher beschäftigt. Die seriellen Datenübertragung gliedert sich in zwei Klassen. Die synchrone und die asynchrone Datenübertragung. Bei der synchronen Datenübertragung haben Sender und Empfänger, eine zusätzliche Datenleitung, durch die sie dieselbe Übertragungsgeschwindigkeit haben(sie arbeiten synchron). Bei der asynchronen Datenübertragung kann die Übertragungsgeschwindigkeit, von Sender und Empfänger geringfügig abweichen. Diese Toleranz beträgt ca. 1-2%. An den Anfang des zu sendenden Datenwortes wird ein zusätzliches Bit, das Startbit, eingefügt, das Sender und Empfänger synchronisiert.
Die asynchrone Datenübertragung wird erst ermöglicht, wenn sich Sender und Empfänger auf ein Übertragungsformat geeinigt haben.
Das Übertragungsformat setzt sich wie im folgenden Beispiel zusammen:
9600 8 E 2
Übertragungsgeschwindigkeit = 9600 Baud
übertragen wird ein 8 Bit Datenwort
Even Parity (möglich sind auch Odd oder None)
2 Stopbits
Beim Übertragen des Datenwortes wird zuerst das niederwertigste Bit gesendet.
Für die Geschwindigkeit, mit der die Daten übertragen werden, gibt es eine Einheit, genannt Baud. Sie gibt an wieviele Bits pro Sekunde gesendet bzw. empfangen werden (1 Baud = 1 Bit/sec).
Bei der seriellen Datenübertragung kann ein zusätzliches Paritätsbit eingefügt werden, um eine Fehlererkennung zu ermöglichen. Dies bedeutet allerdings, daß sich die Anzahl der zu Übertragenden Bits erhöht.
Für das Senden bzw. Empfangen serieller Daten benutzten wir den seriellen Schnittstellenbaustein 8251. Dieser Baustein wandelt beim Senden die parallelen Daten, die ihm der Computers zuweist, in serielle Daten um. Anschließend sendet er sie über den Ausgang TxD. Beim Empfangen nimmt er die Daten in serieller Form vom Eingang RxD auf und wandelt sie in parallele Daten um. Der Takt für den Eingang RxD und den Ausgang TxD wird im internen Frequenzteiler erzeugt.
Um den seriellen Schnittstellenbaustein 8251 ansteuern zu können, muß seine Portadresse mit den Schaltern S1-S4 eingestellt werden. Für die Adresse 6XH wäre das z.B. S1-S4 0110. Die Schalter S1-S4 sind den Adressleitungen A7-A4 zugeordnet. Von den übrigen Adressleitungen A3-A0 wird nur A0 verwendet, um die internen Register des 8251 anzusteuern.
Um den Baustein 8251 einzustellen, muß das Betriebsartenregister und das Kommandoregister mit einem Betriebsaten- bzw. einem Kommandowort geladen werden. Die Steuerregister und das Statusregister werden nicht direkt angesteuert, sondern nacheinander. Die Adressleitung A0 muß jedoch auf 1 eingestellt sein. Wird also in das erste Register etwas geschrieben geht der Zeiger automatisch auf das zweite Register über.
Um sicherzustellen, daß die Steuerwörter in das richtige Register gelangen, sollte ein Reset durchgeführt werden.
Außer dem Status- und den Steuerregistern gibt es noch zwei weitere Register, das Sende- und das Empfangsregister, in denen die Daten, die gesendet bzw. empfangen werden, zwischengespeichert werden. Diese Register werden nur angesteuert, wenn die Adressleitung A0 auf 0 eingestellt ist.
Die Daten die mit dem 8251 gesendet werden sollen, werden nicht mit einem TTL Impuls, sondern mit einem V.24 Impuls übertragen. Der V.24 Pegel erreicht seinen High-Wert (Mark) bei maximal -12V und seinen Low-Wert (Space) bei maximal +12V.
Im Folgenden ist ein Programmlisting abgebildet, mit dem der Datenaustausch zwischen zwei Computer möglich ist.
Adresse |
Label |
Mnemonik Code |
Kommentar |
|
|
|
|
E000 |
|
LXI SP,FC32 |
Registerpaar SP mit FC32H laden |
E003 |
|
MVI A,00 |
leere Akku |
E005 |
|
OUT 61 |
Akkuinhalt auf Port 61 ausgeben |
E007 |
|
OUT 61 |
|
E009 |
|
OUT 61 |
|
E00B |
|
MVI A,40 |
lade Akku mit 40H |
E00D |
|
OUT 61 |
Akkuinhalt ins Betribsartre-gister schreiben |
E00F |
|
MVI A,7F |
lade Akku mit 7FH |
E011 |
|
OUT 61 |
Akkuinhalt Kommandoregister schreiben |
E013 |
|
MVI A,35 |
lade Akku mit 35H |
E015 |
|
OUT 61 |
Akkuinhalt auf Port 61 ausgeben |
E017 |
START |
IN 12 |
Port 12 einlesen |
E019 |
|
CALL SEND |
zum UP SEND springen |
E01C |
|
CALL EMPF |
zum UP EMPF springen |
E01F |
|
OUT 13 |
Akkuinhalt auf Port 13 ausgeben |
E021 |
|
JMP START |
zum Label START springen |
E024 |
SEND |
MOV B,A |
Registerinhalt A nach B kopieren |
E025 |
STATUS |
IN 61 |
Statusreg. Abfragen |
E027 |
|
ANI 01 |
Maske setzen |
E029 |
|
JZ STATUS |
wenn Akku=0 springe zum Label Status |
E02C |
|
MOV A,B |
Akkuinhalt von Reg. B nach A kopieren |
E02D |
|
OUT 60 |
Akkuinhalt ins Senderegister schreiben |
E02F |
|
RET |
Rücksprung |
E030 |
EMPF |
IN 61 |
Statusregister abfragen |
E032 |
|
ANI 02 |
Maske setzen |
E034 |
|
JZ EMPF |
wenn Akku=0 springe zu EMPF |
E037 |
|
IN 60 |
Empfangsregister abfragen |
E039 |
|
RET |
Rücksprung |
Programmablaufplan für das oben aufgeführte Programmlisting.
Anfang
FC32H ins Register SP laden
Akkuinhalt leeren
Akkuinhalt 3 mal auf Port
61 ausgeben
Akku mit 40H laden
Kommandoregister des 8251
mit Akkuinhalt laden
Akku mit 7FH laden
Betriebsartenregister des 8251
mit Akkuinhalt laden
Akku mit 35H laden
Kommandoregister des 8251
mit Akkuinhalt laden
parallele Eingabe lesen
SEND
EMPF
Akkuinhalt auf parallele
Ausgabe legen
ENDE
SEND
Register B mit Akkuinhalt laden
Akku mit Inhalt des
Statusregisters laden
Akku mit Konstante 01H
UND verknüpfen
Akkuinhalt
Ja
Inhalt des Registers B
in Akku laden
Senderegister mit Akkuinhalt laden
RÜCKSPRUNG
EMPF
Akku mit Inhalt des
Statusregisters laden
Akkuinhalt mit Konstante
02H UND verknüpfen
Akkuinhalt
Ja
Akku mit Inhalt des
Empfangsregisters laden
RÜCKSPRUNG
Oszilloskopauszug beim übertragen der Zahl 81H mit dem seriellen Schnittstellenbaustein 8251 (V.24-Pegel).
Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen