Uses crt, dos;
Label Finish, ll00;
Const
baud = 38400;
COM=$3F8 { $2F8 };
intr=$0C { $0B };
Var
stv, srv : pointer;
cnt : word;
b : byte;
key : char;
speed_fr : word;
{----------------------------------------------------------------------------------}
{$F+}
Procedure int_1c; interrupt;
Begin
inc(cnt);
if cnt=18 then begin cnt:=0; write ('g') end;
End;
{$F-}
{-----------------------------------------------------------------------------------}
{$F+}
Procedure int_rs; interrupt;
Begin
b:=port[COM];
write (b,' ');
End;
{$F-}
{----------------------------------------------------------------------------------}
BEGIN
speed_fr:=trunc(115200/baud+0.5);
port[COM+3]:=$80; { ўЄ«. гбв ®ўЄ бЄ®p®бвЁ }
port[COM+1]:=hi(speed_fr); port[COM+0]:=lo(speed_fr);
port[COM+3]:=$00; { 5 bit, 1 stop, parity=none }
port[COM+4]:=0;
port[COM+2]:=$03; { FIFO on }
port[COM+1]:=$01; { interrupt when rec'd data is available }
getintvec($1C,stv);
getintvec(intr,srv);
cnt:=0;
setintvec($1C,addr(int_1c));
setintvec(intr,addr(int_rs));
ll00 :
if keypressed then begin
key:=readkey;
goto Finish;
end;
{ b:=port[COM+5]; }
{ if (b and $01)<>0 then begin }
{ b:=port[COM]; }
{ write (b,' '); }
{ end; }
goto ll00;
Finish :
setintvec($1C,stv);
setintvec(intr,srv);
halt;
END.
Процедурка int_1c - для тренировки - раз в сек пишет "g"; работает. По ее образу и подобию - int_rs - должна нaпечатать принятые с СОМ данные. Не работает. Что не так?
Порт настраивается нормально, в этом легко убедиться раскомментировав 5 строчек выше "goto ll00;"