Newsgroup: it.comp.lang.pascal
Titolo: SOS SERIALE!!!

ciao a tutti ,mi puo dire quali sono le istruzioni(in pascal)per ricevere dei dati sulla seriale.
grazie mille ciao
------------------------------------------------------------------------
Questo messaggio e' stato inviato tramite i Newsgroup di Punto
http://www.punto.it
------------------------------------------------------------------------

 grazie mille ciao
Li devi costruire da te utilizzando asm e gli interrupt dos, o scrivendo
direttamente nei registri della porta, per gli interrupt guarda il 14
http://www.cs.cmu.edu/~ralf/interrupt-list/inter61a.zip
leggi il file interrupt.b
Di seguito ti posto una mia libreria per la gestione della seriale tramite
interrupt
unit TrDati;
interface
Function  Test_Rs232 (n:Word) :Boolean;
Procedure Dtra1;
Procedure Set_Com(Com : Word;Set_Code : byte);
Procedure TrasmettiRs232(Com, Code : Word);
function  RiceviRs232(Com : Word;Comp2  : byte) : Integer;
implementation
Function Test_Rs232 (n:Word) :Boolean;
{ n: Numero della porta da settare
  Restiuisce False se non e collegato alcun computer altrimenti
  restituisce TRUE}
Var Test:Integer;
begin
  asm
    mov  ah, 03h                  {Test sulla porta}
    mov  al, 00
    mov  dx, n
    int  14h
    test al, 20h          { Testa se S collegato un computer }
    mov  ax, $ff
    jz @End
    mov ax,0
    jmp @End
@End:
    mov test, ax
  end;
  if test = 0 then Test_Rs232:=True
              else Test_Rs232:=False;
end;
{ Procedure per la gestione della porta seriale }
{--------------------------------------------------------------------------}
Procedure Dtra1; Assembler;
{ Farlo dopo l'inizializzazione della porta }
asm
   Mov ah, 05   {legge modem controll e il risultato va nel registro bl}
   Xor Al, Al
   Int 14h
   Mov Bl, 1     { mettiamo dtr=1}
   Mov Ah, 5    { setta dtr=1 reg.-> bl}
   Mov Al, 1
   Int 14h
end;
Procedure Set_Com(Com : Word;Set_Code : byte); assembler;
asm
          xor ah, ah
          mov al, Set_Code
          mov dx, Com
          int 14h
end;
Procedure TrasmettiRS232(Com,Code : Word); Assembler;
asm             {Trasmetti su RS232}
@Trasm:         Mov    Dx,    Com       {Porta Seriale}
                Mov    Ah,    03h
                Int    14h
                Test   Ah,    20h
                Je     @Trasm
                Mov    Ax,    Code
                Mov    Ah,    01h
                Mov    Dx,    Com       {Porta Seriale}
                Int    14h
end;
function RiceviRS232(com : Word; Comp2 : Byte) : integer;
var Return : integer;
begin
  asm           {Ricevi da RS232}
@StatoPorta :   Mov  Dx, Com       {Porta Seriale}
                Mov  Ah, 03h
                Int  14h
                Test Ah,  01h       {test DataReady}
                Jz   @Nothin
                Mov  Ah,    02
                Mov  Dx,    Com       {Porta Seriale}
                Int  14h
                Cmp  Comp2, 00
                Je   @Normal
                Cbw
                Jmp  @End
@Normal :       Xor  Ah,    Ah
                jmp  @End
@Nothin :       Mov  Ax,    1000     {nessun carattere in arrivo}
@End:           Mov  Return,Ax
  end;
  RiceviRS232:=Return;
end;
begin
end.
per quanto riguarda il codice io ho messo $A3 onestamente non ricordo il
perchè, ma serve per settare la velocità di trasmissione i bit di parità ed
altro nel file interrupt.b c'è spiegato, la libreria l'ho fatta quando
andavo ancora all'itis risale a ben 6 anni fa ed onestamente nn ricordo
manco se funzioni (mamma mia dopo queste parole non perso che farai un copia
ed incolla) cmq quando la scrissi girava sotto dos, penso che sotto windows
non giri, fammi sapere se funziona.
Ah dimenticavo le procedure dovrebbero essere chiamate in qua sequenza
Procedure Set_Com(Com : Word;Set_Code : byte);
Procedure Dtra1;
Function  Test_Rs232 (n:Word) :Boolean;
dopo di che puoi fare un trasmetti o ricevi, su internet trovi anche la
pedinatura della porta con un po di fili poi contocircuitare la porta del
tuo pc in modo da far tramettere e ricevere sempre sulla stessa porta e
testare il tutto senza aver bisogno di un altro pc
Ciao ReDiCuori
--
L'informatica è un arte
---------------------------------------------------------
 
www.pascallike.too.it
 
http://utenti.lycos.it/pascallike
 il sito sulla programmazione pascal e non solo


Prima di tutto bisogna stabilire 2 tipi di Windows
- Win9x e Me: Funziona tutto normale
- NT, Win2k, XP: Porte, Int e quantaltro di basso Liv e tutto emulato
(avete letto bene ASM viene emulato da Win da una Macchina virtuale
(un paio di volte l'ho fatta crashare metre scrivevo il tutorial sulla
programmazione ad  oggetti) e tutti gli int e le porte sono
insesitenti o quanto meno non relali qundi non si esce dal PC )
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

 Port[NumSeriale] := o := Port[NumSeriale]?
Il prog lo feci per esame di stato e ci veniva richiesto utilizzo degli
interrupt dos, se lo rifacessi oggi userei cmq gli interrupt, non sono
sicuro se usando la scrittura diretta riesci a gestire errori di
comunicazione.
Ciao RdC
--
L'informatica è un arte
---------------------------------------------------------
 
www.pascallike.too.it
 
http://utenti.lycos.it/pascallike
 il sito sulla programmazione pascal e non solo
---------------------------------------------------------

con il metodo che dici tu,comunque le temporizzazioni devo farle io in
base alla velocita di trasmissione?

Grazie ,adesso ci provo e ti farò sapere.ciao

------------------------------------------------------------------------


base alla velocita di trasmissione?
E il metodo + a basso livello che conosco... infatti non c'è velocita
ne altre cose da setta solo il valore... che viene mantenuto sulla
porta finche non vine cambiato... indi si devi gestirti tu tutto...
