Re: soros kommunikáció TP-ben

otto ottomail at t-online.hu
Tue Dec 4 08:01:27 CET 2007


Hello!

Nagyon egyszerű feladata lenne a soros programnak.
Kvázi folyamatosan érkezik hat csomag kb ilyenek Ht1001000 vagy Ht200000000.
Nincs visszajelzés,tehát a mikrocontroller kérdezés nélkül "nyomatja" az
adatokat.
A beérkező csomagot beazonosítom az első három karakter alapján és a
következő nyolc karaktert pedig "bit"-nek értelmezve elvégzem a további
feladatokat.
A soros programnak nem kellene mást tudnia,mint a beérkező csomagokat
folyamatosan egy tárterületre bepakolni.
A tárterületről kiolvasva dolgozom fel tovább az adatokat.
A sebesség sem nagy 9600 bit/sec.
A jelenlegi soros program amelyet korábban a NET-ről gyűjtöttem be,nem
igazán teszi a dolgát.
Sok esetben el sem indul.
A logikájában nem találtam hibát,de még sem működik.
Természetesen lehet,hogy ezt csak az okozza,hogy a mai hardverek mások mint
tizenegynéhány évvel ezelőtt,amikor a szoftvert írták.
W98 alatt próbálom futtatni.

Itt a nem jól működő program!
----------------------------------------------------------------------------
const
  PortBufSize = 2000;

  buf: array[0..portbufsize] of byte;
----------------------------------------------------------------------------

procedure RSelesztese;
 begin
   regs.AX:=(128+64+32+0+0+0+0+2+1);     {11100011  9600 baud,nincs
par,8bit}
   {Set up for setting baud rate of serial port}
  regs.DX:=0;             {for com1, DX := 0 com1 port megadása}
  intr($14,regs);         {Set baud rate, etc. for port az előzőek
kiküldése}
  getintvec($0C,com1);    {Save old interrupt for com1}
  hd:=0; tl:=0;           {A buffer paraméterei a kezdet és vég}
  Holdint := port[$21];   {Save initial status of interrupt enables.}
  setintvec($0C, at input);  {Redirect input from Com1 to procedure Input}
  port[$21]:=port[$21] and $EF; {11101111 Enable interrupts for Com1}
  base:=memw[$40:$00];    {memória terület a Com1 részére jó címzés?}

  port[base+3]:=port[base+3] and $7F;    {amit beállítottam,hogy tudjak
beolvasni}
  port[base+1]:=$01;       {vett adat érvényes megszakítás engedélyezése}
  port[base+4]:=$09;       {out2 invertált vezérlése;DTR invertált
vezérlése}
                           {ennélkül nem müködik}

  xRS:=port[base];         {nem látom az értelmét!}
  port[$20]:=$20;          {Read from port to initialize
                                   and clear port  20}
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    {Ha a "0." bit =1 akkor valami jött a
portra}
      Begin
        buf[hd]:=port[base];        {új karaktert tesz com1 a buffer-be}
        inc(hd);                     {a következő cellára mutat}
        hxxflag:=1;                  {jelzi,hogy volt megszakítás}
        if hd >= portbufsize then hd := 0;
      End;

    port[$20]:=$20;    {megszakítás törlése}
end;
{----------------------------------------------------}
procedure RSkilep;            {ha elhagyom az RS rutint!}
  begin
  port[$21]:= Holdint;                {azzal lépek ki amellyel bejöttem}
(* port[$21]:=$31;*)
  port[base+3]:=port[base+3] and $7F;  {01111111 adat regiszter
kiválasztása}
                                       {hexa7F=127}
  port[base+1]:=$0;                   {megszakítás engd.regiszter}
  port[base+4]:=$0;                   {modem vezérlő regiszter}
  setintvec($0C,com1);                {DOS parancs $0C=12}
(*  setintvec($0B,com2);*)

end;
{------------------------------------------------------}

Üdv. Ottó

----- Original Message -----
From: "Nemeth Tibor" <neti at starkingnet.hu>
To: <elektro at tesla.hu>
Sent: Monday, December 03, 2007 8:42 PM
Subject: Re: soros kommunikáció TP-ben


otto wrote:
> Hello!
>
> Van a listán olyan aki, soros kommunikációra írt már programot
TurboPascal-ban és hajlandó segíteni?
> Ahhoz lenne néhány kérdésem.
>
Hali !

Irtam pascalban,  az pollozott. Mukodott persze de nagy bonyolult
feladatba nem ajanlanam beintegralni.
Iratm ASM ban interruptosat aminek a felsobb szintje pascal volt, de nem
igazan van dokumentalva es regen volt.
Amit ajanlok: Annak idejen hasznaltunk Advantec, Moxa, vagy mifele tobb
soros portot tartalmazo kartyat. Ezekhez volt rezidens driver es azzal
kommunikalo TuroPascal Unit. Es a lenyeg, hogy volt hozza GENDRV nevre
hallgato driver is, a hagyomanyos soros portokhoz. Raadasul egy ilyen
szoftvercsomag tartalmazott beallito es tesztelo programokat is. Ha jol
emlekszem vegulis erre szoktam ra. Igy a pascal resze fuggetlen volt
attol, mi is a valodi hardver amin dolgozik.
Ha segit rajtad esetleg elo tudok turni egy ilyen drivercsomagot.

Ja es amugy ha van konkret kerdes, halljuk (lassuk) !

Az persze lehet kerdes, hogy az alapvetoen DOS ra kitalalt
TurboPascal-os programodat milyen oprendszer alatt akarod manapsag
futtatni es az hagyja-e a port(w) es mem(w)probalkozasokat ervenyesulni.


Udv.
         Nemeth Tibor




More information about the Elektro mailing list