Newsgroup: it.comp.lang.c
Titolo: Assembler e la porta seriale

Ho un problemino, devo settare la porta seriale ( Com1) a 19200bps, 1
bit di start, 1 bit di stop e nessuna parità.
Devo fare questo con il Pascal, ma visto che direttamente non posso,
avrei bisogno di alcune righe di assebler che facciano quanto detto.
Se poi me lo spiegate anche......
Grazie, Niki.
--
Posted from 
ro...@virtual.zia.ms.it
 [195.103.158.42]
via Mailgate.ORG Server - 
http://www.mailgate.org

Grazie, Niki.
Che compilatore Pascal usi ?
In Turbo Pascal puoi farlo senza dover passare per l'  assembly.


Uso il TP7, ma non credo sia possibile settare la velocitą a 19200
direttamente
con il pascal, sino a 9600 non ho problemi, comunque....
Ciao, Niki.



Uso il TP7, ma non credo sia possibile settare la velocitą a 19200
direttamente con il pascal, sino a 9600 non ci sono problemi, oltre......


Uso il TP7, ma non credo sia possibile settare la velocità a 19200



Si !!! è possiblie com l'istuzione ASM
es.
Function Somma (I , J : integer) : integer;
Begin
    asm
        mov ax,i
        add ax,j
        mov @result,ax
    end;
End.
Ok, ma qual'è il codice ASM per settare la porta seriale ( Com1) a 19200bps, 1
bit di start, 1 bit di stop e nessuna parità ???
Ciao, Niki


direttamente con il pascal, sino a 9600 non ci sono problemi, oltre......
scusandomi per l' OT, ti rispondo con una routinetta che ti dovrebbe dare le
indicazioni che cerchi:
function InitSerialPort ( sport, baud, parity, lword, bitstop,
                          tipo : byte ) : boolean;
{**************************************************************************
Data: 22/09/1993
Autore: Ing. Alessandro Casadei della Chiesa
Note:
  sport   = serial port     Tx Buffer              "sbuf"
                            Rx Buffer
  [1]           1             $3f8
  [2]           2             $2f8
  [3]           3             $3e8
  [4]           4             $2e8
  baud    = baud rate       Divisor Latch LSB      "dllsb"
                            Divisor Latch MSB      "dlmsb"
  [1]         300             384
  [2]         600             192
  [3]        1200              86
  [4]        1800              64
  [5]        2000              58
  [6]        2400              48
  [7]        3600              32
  [8]        4800              24
  [9]        7200              16
  [10]       9600              12
  [11]      19200               6
  [12]      38400               3
  parity  = parity          Line Control Register  "lcr"
  [1]        none
  [2]         odd
  [3]        even
  lword   = word length     Line Control Register  "lcr"
  [1]           7
  [2]           8
  bitstop = bit stop        Line Control Register  "lcr"
  [1]           1
  [2]           2
  tipo
  [1]           RS-232
  [2]           RS-485
  data ready                Line Status Register   "lsr"
  tx register empty         Line Status Register   "lsr"
  ******************************************************************** }
var
  divisore,x,k:integer;
  b:byte;
begin
  memw[0:$400]:=$3f8;        { init serial port 1 }
  memw[0:$402]:=$2f8;        { init serial port 2 }
  memw[0:$404]:=$3e8;        { init serial port 3 }
  memw[0:$406]:=$2e8;        { init serial port 4 }
{***** SELEZIONE DELLE PORTE RELATIVE ALLA COMUNICAZIONE *****}
  case sport of
       1:begin
               sbuf[ sport ]:=$3f8;
               dllsb[ sport ]:=$3f8;
               dlmsb[ sport ]:=$3f9;
      IIR[ sport ]:=$3FA;
      lcr[ sport ]:=$3fb;
      lsr[ sport ]:=$3fd;
      mcr[ sport ]:=$3fc;
      msr[ sport ]:=$3fe;
   end;
(* eccetera...*)
  end;
{***** SET VELOCITA` DI COMUNICAZIONE ************************
 si arriva a 57K senza problemi; teoricamente anche a 110K }
  case baud of
        1:divisore:=384;
        2:divisore:=192;
        3:divisore:=96;
        4:divisore:=64;
        5:divisore:=58;
        6:divisore:=48;
        7:divisore:=32;
        8:divisore:=24;
        9:divisore:=16;
       10:divisore:=12;
       11:divisore := 6;
       12:divisore := 3;
  end;
  brate[ sport ] := baud;
  x := port[ lcr[ sport ] ];
  x := x or $80;                       { Divisor Latch Access Bit (DLAB) }
  port[ lcr [ sport ] ] := x;
  port[ dllsb [ sport ] ] := ( divisore mod $0ff );
  port[ dlmsb [ sport ] ] := divisore div $ff;
  x := x and $7f;
  port[ lcr [ sport ] ] := x;
{***** SET BIT DI PARITA` ************************************}
  case parity of
  1:begin              { none }
      x:=port[lcr[sport]];
      x:=x and $f7;                  { Parity Enable (PEN) }
      port[lcr[sport]]:=x;
    end;
  2:begin              { odd }
      x:=port[lcr[sport]];
      x:=x or 8;                     { Parity Enable (PEN) }
      x:=x and $ef;                  { Even Parity Select (EPS) }
      port[lcr[sport]]:=x;
    end;
  3:begin              { even }
      x:=port[lcr[sport]];
      x:=x or 8;                     { Parity Enable (PEN) }
      x:=x or $10;                   { Even Parity Select (EPS) }
      port[lcr[sport]]:=x;
    end;
  end;
{***** SET LUNGHEZZA DELLA PAROLA ****************************}
  case lword of
  1:begin              { 7 }
      x:=port[lcr[sport]];
      x:=x and $fe;               { Word Length Select Bit 0 (WLS0) }
      x:=x or 2;                  { Word Length Select Bit 1 (WLS0) }
      port[lcr[sport]]:=x;
    end;
  2:begin              { 8 }
      x:=port[lcr[sport]];
      x:=x or 1;                  { Word Length Select Bit 0 (WLS0) }
      x:=x or 2;                  { Word Length Select Bit 1 (WLS0) }
      port[lcr[sport]]:=x;
    end;
  end;
{***** SET BIT DI STOP ***************************************}
 case bitstop of
 1:begin               { 1 }
      x:=port[lcr[sport]];
      x:=x and $fb;               { Number of Stop Bits (STB) }
      port[lcr[sport]]:=x;
   end;
 2:begin               { 2 }
      x:=port[lcr[sport]];
      x:=x or 4;                  { Number of Stop Bits (STB) }
      port[lcr[sport]]:=x;
    end;
  end;
  case tipo of
       1 : port[ mcr [ sport ] ] := $0b;
       2 : port[ mcr [ sport ] ] := port [ mcr [ sport ] ] and $fa;
                                               { disable DTR port1 }
  end;
  tipors[ sport ] := tipo;
  txstring := '';
  rxstring := '';
  Clear_Indexes;
  Redireziona_Interrupts ( sport );
  if contisp=0
     then initserialport := false
     else initserialport := true;
end;
spero ti possa essere utile; per gli indirizzi ti rimando ad un manuale
tecnico del DOS.
Ciao