Borland Delphi2.0/3.0 con sus potentes funciones y programación cómoda y rápida
Y amado por la mayoría de los programadores. Pero cuando se utiliza para escribir programas de control industrial, es necesario
El dispositivo externo conectado a la computadora opera, es decir, lee y escribe directamente la dirección de E/S.
En este momento, el software parece tener algunos fallos.
En respuesta a este problema, el autor utiliza Delphi 2.0/3.0 para escribir en forma de ensamblado en línea.
Está instalado un módulo PORT95.PAS, que puede realizar fácilmente operaciones directas de lectura y escritura en direcciones de E/S.
El código es simple y rápido de ejecutar.
Cuando lo use, simplemente agregue PORT95.PAS al archivo del proyecto y agregue Puerto a los usuarios.
95, puede operar directamente el puerto de E/S en la aplicación.
El método de implementación específico y el código fuente de PORT95.PAS son los siguientes:
unidad Puerto95;
interfaz
función PortReadByte(Dirección:Palabra): Byte;
función PortReadWord(Dirección:Palabra): Palabra;
función PortReadWordLS(Dirección:Palabra): Palabra;
Procedimiento PortWriteByte(Dirección:Palabra; Valor:Byte);
procedimiento PortWriteWord(Dirección:Palabra; Valor:Palabra);
procedimiento PortWriteWordLS(Dirección:Palabra; Valor:Palabra);
implementación
{*
* Función de lectura de bytes de puerto
*Parámetro: dirección del puerto
*Retorno: valor en bytes del puerto dado
*}
función PortReadByte(Addr:Word): Byte;
estrella;
ENSAMBLE
MOVDX, HACHA
EN AL,DX
fin;
{*
* Función de lectura de palabras de puerto de ALTA VELOCIDAD
* Parámetro: dirección del puerto
* Retorno: valor de palabra del puerto dado
* Comentario: puede haber problemas con algunas tarjetas y computadoras que
No puedo acceder a la palabra completa, normalmente funciona.
*}
función PortReadWord(Addr:Word): Word; ensamblador;
estrella;
ENSAMBLE
MOVDX, HACHA
EN AX,DX
fin;
{*
* Función de lectura de palabras del puerto de BAJA VELOCIDAD
* Parámetro: dirección del puerto
*Retorno: valor de palabra del puerto dado
*Comentario: funciona en casos, solo para ajustar DELAY si es necesario
*}
función PortReadWordLS(Addr:Word): Word; ensamblador;
registro;
constante
Retraso = 150;
// dependiendo de la velocidad de la CPU y de la tarjeta
ENSAMBLE
MOVDX, HACHA
EN AL,DX
//leer el puerto LSB
MOV ECX, retraso
@1:
LOOP @1 //retraso entre dos lecturas
XCHG AH,AL
INC DX
//puerto+1
IN AL,DX //leer puerto MSB
XCHG AH,AL //restaurar orden de bytes
fin;
{* Función de bytes de escritura de puerto*}
procedimiento PortWriteByte(Dirección:Palabra; Valor:Byte);
r; registrarse;
ENSAMBLE
XCHGAX,DX
FUERA DX,AL
fin;
{*
* Puerto de ALTA VELOCIDAD Procedimiento de escritura de palabras
* Comentario: puede haber problemas con algunas tarjetas y computadoras que
No puedo acceder a la palabra completa, normalmente funciona.
*}
procedimiento PortWriteWord(Dirección:palabra; Valor:palabra);
r; registrarse;
ENSAMBLE
XCHGAX,DX
OUTDX,HACHA
fin;
{*
* Procedimiento de escritura de Word de puerto de BAJA VELOCIDAD
*}
procedimiento PortWriteWordLS(Dirección:palabra; Valor:palabra ensamblada);
registro;
constante
Retraso = 150;
// dependiendo de la velocidad de la CPU y de la tarjeta
ENSAMBLE
XCHGAX,DX
FUERA DX,AL
MOV ECX, retraso
@1:
BUCLE@1
XCHG AH,AL
INC DX
FUERA DX,AL
fin;
fin. //Fin de la unidad
El PORT95.PAS anterior es adecuado para los sistemas operativos Delphi 2.0/3.0 y Windows 95.
.