Program SERCOM; {Empf„ngt Daten vom PIC-Prog. SERCOM} {und sendet Mittelwert an PIC} Uses DOS, CRT; const BA : Integer = $02F8; { $03F8=COM1, $02F8=COM2} procedure Init; var i, Dummy :Byte; begin Port[BA+3]:=128; Port[BA+0]:=12; { 12: 9600 Baud, 6 :19200 Baud } Port[BA+1]:=0; Port[BA+3]:=7; { 8-Bit, n-Parity, 2 Stopbits } Port[BA+1]:=0; { keine Interrupts } Port[BA+4]:=0; { DTR = 0, RTS = 0} for i:= 1 to 3 do Dummy:=Port[BA]; { UART leeren } end; procedure Sende (Zeichen :Byte); begin while (Port[BA+5] AND 32) = 0 do; { Sende-Halteregister leer? } Port[BA]:=Zeichen; end; function Empfang :Byte; var i :Word; begin i:=0; while ((Port[BA+5] AND 1)=0) AND (i<10000) DO Inc(i); if i < 10000 { Timeout erreicht? } then Empfang:= Port[BA] else Empfang:= 0; end; var Wert: Byte; n, Anzeige: integer; Mittel: real; Summe: word; Messwerte: array[1..64] of integer; begin init; clrscr; n:= 1; while (n < 65) do begin Wert:= (Empfang); if Wert<1 then delay(5) else {Schlieát Empfang = 0 aus} begin Messwerte[n]:= (Wert-1); {Einlesen in Feld} inc(n); delay(10); end; {of if} end; {of while} for n := 1 to 64 do write(Messwerte[n]:4); writeln; Summe:= 0; for n:= 1 to 64 do Summe:= Summe + Messwerte[n]; Mittel:= Summe/n; Anzeige:= Round(Mittel); delay(1000); sende (Anzeige); writeln('Mittelwert, gerundet =',Anzeige:6); writeln('Alle Werte erfasst.'); writeln('Beenden mit Return'); readln; end.