Communication entre 2 pc via le port parallele

Davidoir Messages postés 7 Date d'inscription lundi 20 septembre 2004 Statut Membre Dernière intervention 13 décembre 2005 - 22 nov. 2004 à 18:33
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 - 24 nov. 2004 à 15:24
Bonjour,
je viens de réalisé un programme d'envoi et un autre de réception de n'importequel caractere ascii via le port parallele. Il marche parfaitement:
ecriture et lecture sur le port d'un meme pc.
(je me sert de inpout32.dll)

MAIS en branchant un cable entre 2 PCs, ce qu'écrit l'un n'ai pas accessible par l'autre et vice versa. Comment faire???

Le pc écrit dans les registres du port mais je sais pas si ca suffit pour 'envoyer' les signaux.

6 réponses

Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
22 nov. 2004 à 19:55
peux-tu me filer ta source ke je jéte un coup d'oeil ?

sur ceux bonne prog

Filipe
0
Davidoir Messages postés 7 Date d'inscription lundi 20 septembre 2004 Statut Membre Dernière intervention 13 décembre 2005
23 nov. 2004 à 08:56
voici le code d'evoi:
unit Envoie;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button2: TButton;
    EditEtat: TEdit;
    Timer1: TTimer;
    Timer2: TTimer;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
    port:integer;
  end;
procedure WriteStrobe(val:integer);

var
  Form1: TForm1;
  port:integer;
  envoyer: boolean;
  longChaine,icourant:integer;
  chaine:string;
  MonFichier:File of byte;
  TableauByte: Array of byte;
  PortStrobe:integer;

implementation
function Inp32(port:integer):integer;Stdcall;external 'inpout32.dll' name 'Inp32';
function Out32(port, valeur:integer):integer;Stdcall;external 'inpout32.dll' name 'Out32';

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  port:=888;
  PortStrobe:=890;
  WriteStrobe(1);
  envoyer:=false;
end;

procedure WriteStrobe(val:integer);
begin
  Out32(PortStrobe,val);
end;

procedure TForm1.Button2Click(Sender: TObject);

begin
  EditEtat.text:='  >> Opening  <<';
  assignFile(MonFichier,edit1.Text);
  reset(MonFichier);

  EditEtat.text:='  >> Sending  <<';
  icourant:=0;
  timer1.enabled:=true;
  end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  car:byte;
begin
icourant:=icourant+1;
if not Eof(MonFichier) then
  begin
     Read(MonFichier, car);
     out32(port,car);
     timer2.enabled:=true;
    end
else
  begin
  Timer1.Enabled:=False;
  CloseFile(MonFichier);
  EditEtat.Text:='  >> Done !!  <<';
  end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
     if envoyer=false then
       begin
         WriteStrobe(0);
         envoyer:=true;
       end
     else
       begin
         WriteStrobe(1);
         envoyer:=false;
         Timer2.Enabled:=false;
       End;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  OpenDialog1.Title:='Chargement';
  if OpenDialog1.Execute then
   begin
   end;
  edit1.Text:=Opendialog1.FileName;
end;

end.


et voici le code de reception:

unit Reception;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, CheckLst;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Recevoir: TButton;
    Stop: TButton;
    SaveDialog1: TSaveDialog;
    Edit3: TEdit;
    Parcourir: TButton;
    Edit4: TEdit;
    Label3: TLabel;
    Edit5: TEdit;
    Timer1: TTimer;
    Button1: TButton;
    procedure RecevoirClick(Sender: TObject);
    procedure StopClick(Sender: TObject);
    procedure ParcourirClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

function ReadStrobe(port:integer):boolean;

var
  Form1: TForm1;
  scrute:boolean;
  FileHandle:integer;
  MonFichier:file of byte;

implementation
function Inp32(port:integer):integer;Stdcall;external 'inpout32.dll' name 'Inp32';
function Out32(port, valeur:integer):integer;Stdcall;external 'inpout32.dll' name 'Out32';

{$R *.dfm}

function ReadStrobe(port:integer):boolean;
  begin
    ReadStrobe:=(Inp32(port+2) and $01)=$01;
  end;

procedure TForm1.RecevoirClick(Sender: TObject);
var
    val:byte;
begin
if edit3.Text='' then
   MessageDlg('Vous devez spécifier un fichier de sortie.',mtError , [mbOk], 0)
else
  begin
   FileHandle := FileCreate(edit3.Text);
   fileclose(FileHandle);
   AssignFile(MonFichier, edit3.Text);
   Rewrite(MonFichier);
   Form1.Caption:='Reception Port Parallele - ( Réception... )';
   Recevoir.Enabled:=false;
   scrute:=true;
   while  ReadStrobe(StrToInt(edit1.text)) do
      begin
         Application.ProcessMessages ;
         if scrute=false then break;
      end;
   While scrute=true do
     begin
       Val := Inp32(StrToInt(edit1.text));

       Edit4.text:=Edit4.Text + char(val);
       Write(MonFichier, val);
           while not ReadStrobe(StrToInt(edit1.text)) do;
       while  ReadStrobe(StrToInt(edit1.text)) do
         begin
           Application.ProcessMessages ;
           if scrute=false then break;
         end;
     end;
   CloseFile(MonFichier);
   Form1.Caption:='Reception Port Parallele - ( Terminé ! )';
   Recevoir.Enabled:=true;
  end;
end;

procedure TForm1.StopClick(Sender: TObject);
  begin
    scrute:=false;
  end;

procedure TForm1.ParcourirClick(Sender: TObject);
begin
  SaveDialog1.Title:='Sauvegarde';
  if SaveDialog1.Execute then
   begin
    if FileExists(SaveDialog1.FileName) then
      begin
        if MessageDlg('Ecraser le fichier existant ?',mtConfirmation, [mbYes, mbNo], 0) = mrNo then
          exit;
        DeleteFile(SaveDialog1.FileName);
      end;
   end;
  edit3.Text:=Savedialog1.FileName;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Edit5.text:=IntToStr(Inp32(StrToInt(edit1.text)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  edit4.Text:='';
end;

end.


merci de votre aide!!!
0
Davidoir Messages postés 7 Date d'inscription lundi 20 septembre 2004 Statut Membre Dernière intervention 13 décembre 2005
23 nov. 2004 à 08:57
Excusez-moi j'ai inversé les 2 images!!!!!!
0
Filipe35 Messages postés 470 Date d'inscription vendredi 14 novembre 2003 Statut Membre Dernière intervention 23 octobre 2007 1
23 nov. 2004 à 18:14
je vais voir ce ke je peux faire mais je te promet rien.

Bonne Prog

Filipe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Davidoir Messages postés 7 Date d'inscription lundi 20 septembre 2004 Statut Membre Dernière intervention 13 décembre 2005
24 nov. 2004 à 10:36
j'ai essayé de débuguer d'un peu plus prés:
+ l'envoi marche -> test avec un voltmetre a la sortie
+ mais la reception ne donne rien meme en envoyant du 5V avec une source ext!

Si vous comprenez qqchose!! bonne chance!! (et merci!)

dav
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
24 nov. 2004 à 15:24
Quel mode utilises-tu pour tes ports parallèles ? Standard ? EPP ? ECP ?

Le port parallèle ayant été au départ conçu pour des tranferts uni-directionnels (PC -> Imprimante) avec quelques signaux de contrôle, il est beaucoup moins facile de l'utiliser en entrée !
As-tu pensé au bit 5 du registre de contrôle (contrôle du mode bi-directionnel ?)

Tiens, voilà un peu de doc

http://www.beyondlogic.org/spp/parallel.htm

http://www.beyondlogic.org/epp/epp.htm

http://www.beyondlogic.org/ecp/ecp.htm

Ken@vo
____________________
Code, Code, Codec !
0
Rejoignez-nous