Ein Programm zum Empfang von Nachrichten nach unserem einfachen Protokoll könnte
folgenden Aufbau haben:
Die Bitverschiebungsbefehle shl (shift left) und shr (shift right) haben sich als sehr nützlich zum Zerlegen und
Zusammenfügen von Bytes ('Integers') erwiesen. So wird z.B. aus dem Byte b = 148 = '1001 0100' durch die Anweisung
b := b shl 2; das Byte b = 80 = '0101 0000'.
Schreibe ein Programm, das einen einfachen Empfänger zu unserem Protokoll realisiert.
Teste das Programm indem auf einer Schnittstelle empfangen wird, was auf einer anderen Schnittstelle gesendet wird.
Die Schnittstellen werden dabei mit einem Nullmodemkabel (RTS und CTS gekreuzt) verbunden. Die Schnittstellen können dabei
auf demselben oder auf verschiedenen Computern sein.
Möglicherweise wird es nötig sein, den Fenster-Refresh explizit z.B. mit Form1.refresh; aufzurufen.
Versuche beim Testen des Programms das Fenster zu verschieben. Was passiert, wenn man das Programm beenden will?
empfaenger0.zip
procedure TForm1.empfange;
const
baud = 200;
var
bitzeit : integer;
b,i,j : byte;
begin
Form1.Caption := Form1.Caption+', '+IntToStr(baud)+' Baud';
bitzeit := round(1000/baud);
while true do
begin
// warten auf StartBit
while Not Form1.NetzHW.GetEin do sleep(0);
// 1,5 Bitlängen warten
sleep(bitzeit + bitzeit div 2);
// Datenbits einlesen
b := 0;
for i := 7 downto 0 do
begin
b := b shl 1;
if Form1.NetzHw.GetEin then Inc(b);
sleep(bitzeit);
end;
// die letzte sleep-Zeit reicht in die Mitte des StoppBits, sodass das letzte Datenbit sicher beendet ist
// Zeichen anhängen
Form1.mEmpf.Text := Form1.mEmpf.Text+chr(b);
// Bildaufbau erzwingen
Form1.Refresh;
// Application.ProcessMessages; // nützt leider nichts!
end;
end;