Logiciels > Code Delphi > Acquisition sur port parallèle (LPT)

Dernière mise à jour : 15/02/2007

Présentation

Voici quelques lignes de code que j'ai utilisées pour capturer l'état des entrées d'un port parallèle. Code mis en application dans trois logiciels : ADDatAcq (jamais terminé), DataAcq et ComTools.

Exemple de code

Code compatible NT/XP si usage de zlportio.sys.

function ParallelPort_ReadDataValues(
 BaseAddr: word;
 var I_D0, I_D1, I_D2, I_D3, I_D4, I_D5, I_D6, I_D7: boolean): boolean;

var
 Data: DWord;
 Addr: DWord;

begin
 // work at Data register address
 Addr := BaseAddr + 0;

 // init data (only used if error occurs during read)
  I_D0 := false;
  I_D1 := false;
 I_D2 := false;
 I_D3 := false;
 I_D4 := false;
 I_D5 := false;
 I_D6 := false;
 I_D7 := false;

  // read data value on LPT port if system IS NOT WinNT
 if Win32Platform <> VER_PLATFORM_WIN32_NT then
 begin
 try
 Case DataType of
 DataType_Byte :
 asm
 mov edx,Addr
 xor eax,eax
 in al,dx
 mov Data,eax
 end;
 DataType_Word :
 asm
 mov edx,Addr
 xor eax,eax
 in ax,dx
mov Data,eax
 end;
 DataType_DWord:
 asm
 mov edx,Addr
 xor eax,eax
 in eax,dx
 mov Data,eax
 end;
 end;
except
 result := false;
 exit;
 end;
 end
else

 // read data value on LPT port if system IS WinNT
 begin
 try
 if ZLIOStarted then
Data := ZLIOPortRead(Addr, DataType_Byte)
 else
 begin
 Data := 0;
 result := false;
 end;
 except
 result := false;
 exit;
 end;
end;

  // extract bits value for individual data line
 I_D7 := (((Data and 128) div 128) = 1);
 I_D6 := (((Data and 64) div 64) = 1);
 I_D5 := (((Data and 32) div 32) = 1);
 I_D4 := (((Data and 16) div 16) = 1);
 I_D3 := (((Data and 8) div 8) = 1);
 I_D2 := (((Data and 4) div 4) = 1);
 I_D1 := (((Data and 2) div 2) = 1);
 I_D0 := (((Data and 1) div 1) = 1);
result := true;
end;

-

Codes source complets

Code à prendre tel quel ! Je n'ai pas le temps actuellement de mettre ça au propre, merci de votre compréhension.
Routines Communication diverses - Code source pour accès aux ports série, port joystick, port parallèle, protocoles GPIB et JBUS.
Exemple 1 de lecture sur port parallèle - ADDatAcq
Exemple 2 de lecture sur port parallèle - ADDatAcq 2
Exemple 3 de lecture sur port parallèle - Source du logiciel DataAcq, qui fonctionne aussi sous WinNT et sous WinXP
Exemple 4 de lecture sur port parallèle - Logiciel PP12_001, programmateur style "jeux de lumière"

Visualisation statut lignes du port parallèle

Je me suis fait une petite interface d'entrées / sorties pour travailler plus facilement avec mes logiciels d'accès au port parallèle.

acq_donnees_lpt_001a

L'état des sorties est visualisé par des leds montées en parallèle sur des relais, le tout attaqués par des darlingtons intégrés (ULN2803).

acq_donnees_lpt_001b

Les entrées se font simplement via 5 boutons poussoirs. 5 seulement car à l'époque, je ne savais pas encore que l'on pouvait lire sur les lignes de données D0 à D7 quand l'interface électronique de l'ordinateur le permettait.