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...