Главная » Pascal, Исходники, Разное » Передача данных в COM-порты
Фев
18

Передача данных в COM-порты

Данной программой можно передавать данные в COM-порты вашего компьютера.
Какой именно код использовать, показано ниже.
[sourcecode language=»pascal»]
program Modemo;
Uses dos, crt;

const
baud: array[2..7] of word=(300,600,1200,2400,4800,9600);
Parity : Byte = 3;
Stopbits : Byte = 0;
Wordlength : Byte = 2;
PortBufSize = 10000;

var
ch: char;
regs: registers;
base: word;
com1,com2: pointer;
hd,tl : word;
bd,comport,holdint: byte;
buf: array[0..portbufsize] of byte;
sb,quit : Boolean;
x : integer;
[/sourcecode][sourcecode language=»pascal»]
procedure send(ch: char);
begin
while port[base+5] and $20=0 do;
port[base]:=ord(ch);
end;

procedure alt(st: string);
var i:integer;
begin
for i:=1 to length(st) do send(st[i]);
ch:=#0;
end;

Function GetBufChar(Var Ch : Char) : Boolean;
Begin
If hd = tl then GetBufChar := False
Else {Something in buffer}
Begin
GetBufChar := True;
Ch := Chr(buf[tl]);
If sb and ((hd+portbufsize-tl) mod portbufsize < 65) then
Begin
sb := False;
End;
Inc(tl);
If tl = portbufsize then tl := 0;
End;
End;

procedure input(flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP: word);
interrupt;
begin
if port[base+5] and 1=1 then
Begin
buf[hd]:=port[base];
inc(hd);
if hd = portbufsize then hd := 0;
if not sb and ((hd+portbufsize-tl) mod portbufsize >





(portbufsize-100) ) then begin
send(^S);
sb:=true;
end;
End;
port[$20]:=$20;
end;

begin
bd:=4;
Comport := 1;
regs.AX:=(bd*32)+(Parity*8)+(Stopbits*4)+Wordlength;

regs.DX:=comport-1; {for com1, DX := 0}
intr($14,regs);
getintvec($0C,com1);
getintvec($0B,com2);
hd:=0; tl:=0;
Holdint := port[$21];
if comport = 1 then
Begin
setintvec($0C,@input);
port[$21]:=port[$21] and $EF;
base:=memw[$40:$00];
End
Else
Begin
Setintvec($0B,@input);
port[$21]:=port[$21] and $F7;
base := memw[$40:$02];
End;
port[base+3]:=port[base+3] and $7F;
port[base+1]:=$01;
port[base+4]:=$09;
x:=port[base]; port[$20]:=$20;
quit := false;
repeat
if keypressed then
begin
ch := readkey;
if ch=’S’ then quit := True;
send(ch);
end
else if GetBufChar(ch) then
begin
write(ch);
end;
until quit;
port[$21]:= Holdint;
port[base+3]:=port[base+3] and $7F;
port[base+1]:=$0;
port[base+4]:=$0;
setintvec($0C,com1);
setintvec($0B,com2);
end.

[/sourcecode]



Понравилась статья? Сделай приятно ее автору, поделись с друзьями:


Хотите получать обновления данного блога на EMail?

Введите адрес Почтового Ящика:




Подтвердите подписку в письме пришедшем на Почту, после чего начнете получить рассылку.