Gestion des entrées - sorties avec Visual Basic
07/11/2000
 Patrick ABATI 
Liste des cours

entrée   sortie   entrée   sortie   entrée   sortie

Les Basic pour Dos ( Quick Basic et VB DOS) autorisent la gestion des entrées - sorties par l'utilisateur à partir des instructions:
- INP (Adresse), qui renvoie l'octet de donnée présent à l'adresse spécifiée,
- OUT Adresse, Donnée , qui écrit l'octet de donnée à l'adresse spécifiée.

Ceci présente l'intérêt de pouvoir utiliser les ports d'imprimantes à d'autres fins ou de pouvoir assurer la gestion de cartes d'extensions (cartes d'E/S TOR ou cartes d'acquisition).

Cette utilisation est à priori devenue impossible avec Visual Basic. On peut cependant avoir recours à une DLL spécialisée InpOut32.dll, compilée sur Delphi 4 de Borland et dont le code source est donné ci dessous:
library InpOut32;
uses SysUtils;
var ByteValue:Byte;
procedure Out32(PortAddress:smallint;Value:smallint);stdcall;export;
begin
    ByteValue:=Byte(Value);
    asm
        push dx
        mov dx,PortAddress
        mov al, ByteValue
        out dx,al
        pop dx
    end;
end;
function Inp32(PortAddress:smallint):smallint;stdcall;export;
begin
    asm
        push dx
        mov dx, PortAddress
        in al,dx
        mov ByteValue,al
        pop dx
    end;
    Inp32:=smallint(ByteValue) and $00FF;
end;
Exports
Inp32,
Out32;
begin
end.

Télécharger la DLL  zip 40 Ko

Utilisation de la DLL sous VB5
Il faut insérer le code suivant en tête du module principal:
Public Declare Function Inp Lib "InpOut32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "InpOut32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

L'utilisation se fait ensuite de façon classique par les instructions:
INP (Adresse) et OUT Adresse, Donnée décrites précédemment.

Exemple sur port imprimante LPT1:
PortAddress = &H378
Value = Inp(PortAddress + 1)
Out PortAddress, Value

Les lignes précédentes permettent de mettre à l'adresse $378, l'octet présent à l'adresse $379.

Voir aussi
Interface parallèle Centronics