![]() |
![]() |
||
| Netze |
[Material]
[historische Beispiele]
[Einstieg]
[Grundbegriffe]
[Netzhardware]
[Universal-Empfänger]
[mini-Empfänger]
[miniEthernet]
[Transceiver]
[Fehlererkennung]
[Fehlerbehandlung]
[Bus]
[Rahmen]
[Medium Access Control]
[Routing]
[Schichtenmodell]
[Sockets]
[Dienste im Internet]
[Real-Experimente]
[Sicherheit]
[Codes]
[Programme]
[Hardware]
[Protokolle]
[Glossar]
[Bautipps]
[Unterricht]
|
||
|
Hohenstaufen-Gymnasium Kaiserslautern |
|
Bei der seriellen Schnittstelle wird gewöhnlich das RS-232 -Protokoll zur Datenübertragung benutzt. Wir wollen eine stark vereinfachte Variante, miniRS232 benutzen.

Entwickle in verschiedenen Schritten ein Programm, das zunächst nur das Bitmuster '01000101' mit der
festen Bitlänge von 20ms sendet. Dann soll im nächsten Schritt die Baudrate und das Zeichen eingelesen werden.
Schließlich soll im dritten Schritt ein String aus einem Memo-Feld mit der eingelesenen Baudrate gesendet werden.
Es soll ein Startbit und ein Stoppbit verwendet werden. Die Zeichen sollen mit Hilfe der eingebauten Zeichentabelle
kodiert und mit dem höchstwertigen Bit voraus gesendet werden. Ein Paritätsbit soll nicht verwendet werden.
Die Klasse TNetzHW steht zur Verfügung und soll der Ansteuerung der seriellen Schnittstelle COM1 verwendet werden.
Zum Test kann z.B. ein Null-Modem-Kabel und ein zur Verfügung gestelltes Oszilloskop-Programm benutzt werden.
Die Oberfläche soll der Vorgabe entsprechen. Das Programm benötigt keine Threads und kein MVC!
Die gemachten Tests sind zu dokumentieren.
procedure TForm1.bSende1Click(Sender: TObject); begin // Startbit NetzHW.SetAus(true); sleep(20); // Datenbits NetzHW.SetAus(false); sleep(20); NetzHW.SetAus(true); sleep(20); NetzHW.SetAus(false); sleep(20); NetzHW.SetAus(false); sleep(20); NetzHW.SetAus(false); sleep(20); NetzHW.SetAus(true); sleep(20); NetzHW.SetAus(false); sleep(20); NetzHW.SetAus(true); sleep(20); // Stoppbit NetzHW.SetAus(false); sleep(20); end;
Zumindest auf einigen Rechnern kann man wesentlich höhere Baud-Raten erreichen, wenn man am Anfang des Programms die Zeitauflösung von sleep mit
... uses ...., mmsystem, ... ... TimeBeginPeriod(1);
auf eine große Granularität schaltet und am Schluss mit
TimeEndPeriod(1);
wieder ausschaltet.