Borland Delphi2.0/3.0 avec ses fonctions puissantes et sa programmation pratique et rapide
Et apprécié par la majorité des programmeurs. Mais lorsque vous l'utilisez pour écrire des programmes de contrôle industriel, vous devez
Le périphérique externe connecté à l'ordinateur fonctionne, c'est-à-dire lit et écrit directement l'adresse E/S.
Pour le moment, le logiciel semble présenter quelques défauts.
En réponse à ce problème, l'auteur utilise Delphi 2.0/3.0 pour écrire sous forme d'assembly en ligne
Un module PORT95.PAS est installé, qui peut facilement réaliser des opérations de lecture et d'écriture directes sur les adresses d'E/S.
Le code est simple et rapide à exécuter.
Lorsque vous l'utilisez, ajoutez simplement PORT95.PAS au fichier de projet et ajoutez le port aux utilisateurs.
95, vous pouvez utiliser directement le port e/s dans l'application.
La méthode d'implémentation spécifique et le code source de PORT95.PAS sont les suivants :
unité Port95 ;
interface
function PortReadByte(Addr:Word) : Octet;
function PortReadWord(Adr:Word) : Mot;
fonction PortReadWordLS(Adr:Word) : Word;
PRécédure PortWriteByte(Adr:Word; Value:Byte);
procédure PortWriteWord(Adr:Word; Value:Word);
procédure PortWriteWordLS(Adr:Word; Value:Word);
mise en œuvre
{*
* Fonction d'octet de lecture de port
*Paramètre : adresse du port
*Retour : valeur d'octet du port donné
*}
function PortReadByte(Addr:Word) : octet regi ;
étoile;
asme
MOVDX,AX
EN AL,DX
fin;
{*
* Fonction de lecture de mot de port HAUTE VITESSE
* Paramètre : adresse du port
* Retour : valeur de mot du port donné
* Commentaire : peut poser des problèmes avec certaines cartes et ordinateurs qui
Je ne peux pas accéder au mot entier, cela fonctionne généralement.
*}
fonction PortReadWord(Addr:Word) : Word ; assembleur;
étoile;
asme
MOVDX,AX
EN AXE,DX
fin;
{*
* Fonction de lecture de mot de port à faible vitesse
* Paramètre : adresse du port
*Retour : valeur du mot du port donné
*Commentaire : fonctionne dans les cas, seulement pour ajuster DELAY si besoin
*}
function PortReadWordLS(Addr:Word) : Word ;
registre;
const
Délai = 150 ;
// en fonction de la vitesse du processeur et de la vitesse des cartes
asme
MOVDX,AX
EN AL,DX
//lire le port LSB
MOV ECX, délai
@1 :
LOOP @1 //délai entre deux lectures
XCHG AH,AL
INC DX
//port+1
IN AL,DX //lire le port MSB
XCHG AH,AL //restaurer l'ordre des octets
fin;
{* Fonction d'octet d'écriture de port*}
procédure PortWriteByte(Adr:Word; Value:Byte);
r; s'inscrire;
asme
XCHGAX,DX
SORTIE DX, AL
fin;
{*
* Procédure d'écriture de mots sur le port HAUTE VITESSE
* Commentaire : peut poser des problèmes avec certaines cartes et ordinateurs qui
Je ne peux pas accéder au mot entier, cela fonctionne généralement.
*}
procédure PortWriteWord(Adr:word; Value:word);
r; s'inscrire;
asme
XCHGAX,DX
OUTDX,AX
fin;
{*
* Procédure d'écriture de mots sur le port BASSE VITESSE
*}
procédure PortWriteWordLS(Adr:word; Value:word);
ler; s'inscrire;
const
Délai = 150 ;
// en fonction de la vitesse du processeur et de la vitesse des cartes
asme
XCHGAX,DX
SORTIE DX, AL
MOV ECX, délai
@1 :
BOUCLE@1
XCHG AH,AL
INC DX
SORTIE DX,AL
fin;
fin. //Fin de l'unité
Le PORT95.PAS ci-dessus convient aux systèmes d'exploitation Delphi 2.0/3.0 et Windows 95.
.