soros kommunikáció TP-ben

Nemeth Tibor neti at starkingnet.hu
Wed Dec 5 00:47:11 CET 2007


Hali !

mar nem emlekszem a reszletekre, de azert megjegyzeseimet hozzafuzom.

otto wrote:
> 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}
Ehhez nem tudok hozzaszolni, a bios sajnos ezen a teruleten eleg hibas 
volt de kegyeleti vagy egyeb okokobol nem javitottak, en soha sem 
hasznaltam sikerrel int14-et.

>   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?}
A kommentet nem ertem, de a felhasznalas jo, ezen a cimen a bios a Com1 
portcimet(baziscimet) tarolja.

>   port[base+3]:=port[base+3] and $7F;    {amit beállítottam,hogy tudjak
> beolvasni}
Nem vagyok biztos, hogy olvashato a line-control regisztier(base+3), de 
miert nem irod be az osszes tobbi bitet is ahogy te akarod ? Ez csak 5 
illetve 7 bitesre allitja ha 6 illetve 8 bites volt.
>   port[base+1]:=$01;       {vett adat érvényes megszakítás engedélyezése}
Ez rendben.
>   port[base+4]:=$09;       {out2 invertált vezérlése;DTR invertált
> vezérlése}
>                            {ennélkül nem müködik}
Igen, ez csak keves helyen volt publikalt, az OUT2, ami a vezerlo ic-nek 
csupan jarulekos, mondhatni maradek kimenete, valami kaput nyitott ki az 
interrupt ujtjaban.

>   xRS:=port[base];         {nem látom az értelmét!}
Nem artalmas. Lehet, hogy mar beragadt, tulfutott adat van benne, ki 
kell szabaditani. Ez csak egy adatolvasas.
>   port[$20]:=$20;          {Read from port to initialize
>                                    and clear port  20}
Ez is mint elobbi, aktiv helyzetbe hozza az interrupt rendszer.
> 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;
Nem irtad mi is a hibajelenseg, de en megirnam az ELSE agat is, ami ugye 
elvileg nem futhat le.
> 
>     port[$20]:=$20;    {megszakítás törlése}
> end;
Jonak latszik.

Ugy tunik nem tudtam segiteni. Azert az elozo levelemben irt lehetoseget 
tovabbra is javaslom. Maganban kuldom a moxa drivert.

Udv.
          Nemeth Tibor



More information about the Elektro mailing list