home *** CD-ROM | disk | FTP | other *** search
-
- (*
- V24.PAS
-
- Dies ist eine Routine, mit der die V24-Schnittstellenparameter
- durch ein Turbopascal Programm eingestellt werden koennen.
- Dabei kann jede beliebige Baudrate eingestellt werden.
- Das File V24.PAS sollte einfach in das Hauptprogramm INCLUDEd werden.
-
- Baudraten: 10 - 19200 Baud
- Paritaet: pSpace, pOdd, pMark, pEven, pNone
- Datenbits: d5, d6, d7, d8
- Stopbits: s1, s2
-
- Der Aufruf setV24(1200,pNone,d8,s2)
-
- setzt die V24-Schnittstelle z.B. auf 1200 Baud, keine Paritaet,
- 8 Datenbits und 2 Stopbits.
-
- .... angepasst im Maerz 1987 von R. Schmidt
- *)
-
- TYPE tComPort = (Com1, Com2);
- tParity = (pSpace, pOdd, pMark, pEven, pNone);
- tDatabits = (d5, d6, d7, d8);
- tStopbits = (s1, s2);
-
- (* Define address adders for the various Async card registers. *)
-
- CONST RBR = $00; (* xF8 Receive Buffer Register *)
- THR = $00; (* xF8 Transmitter Holding Register *)
- IER = $01; (* xF9 Interrupt Enable Register *)
- IIR = $02; (* xFA Interrupt Identification Register *)
- LCR = $03; (* xFB Line Control Register *)
- MCR = $04; (* xFC Modem Control Register *)
- LSR = $05; (* xFD Line Status Register *)
- MSR = $06; (* xFE Modem Status Register *)
- DLL = $00; (* xF8 Divisor Latch Least Significant *)
- DLM = $01; (* xF9 Divisor Latch Most Significant *)
-
- (* Asynch base port addresses are in the ROM BIOS data area *)
-
- VAR ComBaseAddr : ARRAY[Com1..Com2] OF Integer ABSOLUTE $0040 : $0000;
-
-
- PROCEDURE setV24(Baud : integer;
- Parity : tParity;
- Databits : tDatabits;
- Stopbits : tStopbits);
-
- CONST paritycode : ARRAY[pSpace..pNone] OF Byte =
- ($38, $08, $28, $18, $00);
- databitscode : ARRAY[d5..d8] OF Byte = ($00, $01, $02, $03);
- stopbitscode : ARRAY[s1..s2] OF Byte = ($00, $04);
-
- VAR LCRreg : Byte;
- ComBase : integer;
- ComPort : tComPort;
- BaudFaktor : integer;
-
- BEGIN
- BaudFaktor := round(115200.0/Baud);
- ComPort := com1;
- ComBase := ComBaseAddr[ComPort];
- LCRreg := $80; (* Set Divisor Latch Access Bit in LCR *)
- LCRreg := LCRreg OR paritycode[Parity]; (* Setup Parity *)
- LCRreg := LCRreg OR databitscode[Databits]; (* Setup # data bits *)
- LCRreg := LCRreg OR stopbitscode[Stopbits]; (* Setup # stop bits *)
- Port[LCR+ComBase] := LCRreg; (* Set Parity, Data and Stop Bits and set DLAB *)
- Port[DLM+ComBase] := Hi(BaudFaktor); (* Set Baud rate *)
- Port[DLL+ComBase] := Lo(BaudFaktor); (* Set Baud rate *)
- Port[LCR+ComBase] := LCRreg AND $7F; (* Reset DLAB *)
- END;
-
-
- function zeichen:boolean;
- var
- Register : regs;
-
- begin
- with Register do
- begin
- AX := $0200;
- intr($60,Register);
- Zeichen := (lo(AX) = 1);
- end;
- end;
-
-
- procedure readaux(var ch : char);
- var
- Register : regs;
- Begin
- if not Zeichen then repeat until Zeichen;
- with Register do
- Begin
- AX := 0;
- intr($60,Register);
- ch := char(lo(AX));
- End;
- End;
-
-
- procedure writeaux(Zeile : str80);
- var
- Register : regs;
- i : integer;
- Begin
- with Register do
- Begin
- for i := 1 to length(Zeile) do
- Begin
- AX := 256 + ord(Zeile[i]);
- intr($60,Register);
- End;
- End;
- End;
-