Programmez le port // sous Delphi.

Quoi de plus normal pour l'électronicien que de vouloir dompter son PC ! En effet, pour pouvoir faire autre chose que du traitement de texte, il faut aller voir un peu plus loin dans la machine. C'est ce que nous allons faire sur cette page.
L'outil que nous allons utiliser s'appelle Delphi et est produit par Borland. Delphi est une sorte de Visual Pascal tournant sous Windows et permettant de créer ses propres applications sous Windows sans trop de connaissance en informatique (on est électronicien avant tout...). Un autre avantage de Delphi est qu'il permet d'écrire des routines en assembleur ( de l'informatique pour les électroniciens !) au sein même d'un programme. Ces routines restent très simples et compréhensibles pour quelqu'un qui programme des microcontrolleurs...
Mais avant de commencer, je vous propose de lire le document traitant des ports série et parallèle du PC. ( Ces documents se trouvent sur la page Download). Une fois que vous avez lu ces documents, le fonctionnement du port parallèle n'a plus de secret pour vous et nous pouvons donc commencer sa programmation proprement dite.
procedure TForm1.SpinEdit1Change(Sender: TObject);
var e:SmallInt;
begin
e:=StrToInt(SpinEdit1.Text);
asm
mov dx,03bch ---> On place l'adresse du port dans le registre dx
mov ax,e ----------> On place la valeur à transmettre dans le registre ax
out dx,al-----------> On écrit la valeur contenue dans al à l'adresse indiquée par dx
end;
end;
La procedure, décrite ci-dessus, à pour but de récupérer la chaine de caractère contenue dans une SpinEditBox, de la transformer en entier et d'envoyer cet entier sur le port parallèle ( l'adresse des donnée du port // est ici 03bch mais elle aurait pu être 0378h ou 278h). Rien de bien compliqué donc pour écrire sur le port //.
Après l'écriture, la lecture. Et bien là, cela se corse quelque peu. En effet, tout dépend du type de port // que vous avez. Si vous avez un port bidirectionnel (EPP ou ECP), pas de problème... On signale juste au port // qu'on se met en mode lecture ( on met la valeur du 5ième bit du registre de commande à un) et on lit directement les 8 bits de données. Si votre port // n'est pas bidirectionnel, allez-en acheter un ou lisez ce qui suit...
function lirec:byte;
var outpc:byte;
begin
lptdon:=$0378;
lptcom:=$037a;
lpteta:=$0379;

asm--------------------->On met le port en mode lecture
mov dx,lptcom
mov ax,0020h
out dx,al
end;
asm--------------------->On lit la valeur présente sur le port
mov dx,lptdon
in ax,dx
mov outpc,al
end;
lirec:=outpc;
end;
Si vous n'avez que quelques bits à lire (maximum 4), vous pouvez utiliser le registre de commande du port // à l'adresse suivante 37Ah (27Ah ou 3beh). Ce registre est accessible en lecture et en écriture. On utilise donc les quatre lignes suivantes : /STROBE, AUTOFEED,/INIT et SELECT IN (attention aux lignes inversées !)
Si vous avez plus de quatre bits à lire, il va falloir utiliser un multiplexeur...