El puerto paralelo se conoce como puerto paralelo.
1. Leer y escribir paralelo
En el lenguaje de ensamblaje, el puerto paralelo se puede operar con las instrucciones de entrada y salida, pero no hay funciones y métodos correspondientes en Delphi para leer y escribir el puerto paralelo. Instrucciones de ensamblaje dentro y fuera Puede leer y escribir fácilmente puertos paralelos. También podemos acceder al puerto paralelo llamando a funciones de API de Windows o DLL y VXD proporcionados por terceros, pero es más conveniente y rápido leer y escribir el puerto paralelo utilizando métodos de ensamblaje integrados.
Use la siguiente función de readport y procedimiento de escritura para leer y escribir puertos paralelos, y el puerto de parámetros es la dirección del puerto para operar.
función readport (puerto: word): byte;
varilla
B: byte;
Comenzar
ASM
Mov dx, puerto;
En al, dx;
Mov B, AL;
FIN;
Resultados: = b;
fin;
Procedimiento WritePort (puerto: palabra; cónbyte: byte);
Comenzar
ASM
Mov dx, puerto;
Mov al, Conbyte;
Fuera dx, al;
FIN;
final;
Para controlar el puerto paralelo en términos bit a bit, primero puede leer los datos del puerto paralelo, luego realizar operaciones de bit y luego escribir nuevamente al puerto paralelo, para que se pueda lograr el control de bits del puerto paralelo.
El operador lógico y realiza la lógica y la operación bit a bits en dos números que se operarán: es decir, el resultado de 1 y 1 es 1, y el otro 0 y 1, 1 y 0 y 0. Los resultados de 0 son todos 0 .
Operador lógico o realiza una operación lógica o de bit en dos números que se operarán: es decir, siempre que los dos bits de "o" sean uno, el resultado es 1;
Use el operador y para especificar la posición 0. Por ejemplo, el binario de hexadecimal 84H es: 10000100, y su tercer bit es 1. Para establecer la tercera posición en 0 y otros bits permanecen sin cambios, puede usar: $ 84 y $ FB = $ 80, el valor binario de 80h es 10000000.
Use el operador OR para especificar una posición 1, por ejemplo: el segundo bit de hexadecimal 84h es 0. Para establecer el segundo bit en 1 y otros bits permanecen sin cambios, puede usar: $ 84 o $ 02 = $ 86, 86h es el valor binario es 10000110.
ejemplo:
1. Establezca el potencial del puerto de datos D2 del puerto de datos 378H a bajo, es decir, establecido 0:
B: = Readport ($ 378);
B: = by $ fb;
WritePort ($ 378, b);
2. Establezca el potencial del puerto de datos D2 del puerto de datos 378H en alto, es decir, establecido 1:
B: = Readport ($ 378);
B: = b o $ 04;
WritePort ($ 378, b);
3. Determine el potencial de los bits de datos D2 del puerto de datos 378H:
B: = Readport ($ 378);
if ((by $ 04) = $ 04) entonces
// código cuando el potencial es alto
demás
// código cuando el potencial es bajo
o:
B: = Readport ($ 378);
if ((b o $ fb) = $ ff) entonces
// código cuando el potencial es alto
demás
// código cuando el potencial es bajo
3. Implementación específica
El siguiente ejemplo es la altura potencial de cada bit del puerto de datos 378H que controla el puerto paralelo. Los 8 bits del puerto de datos: D0 ~ D7 corresponden a los pines 2 ~ 9 de la interfaz paralela para las instrucciones sobre otras pines de la interfaz paralela, consulte la información relevante, para que no hablaré de ella aquí.
Primero ejecute Delphi, cree un nuevo proyecto y haga clic en F12 para agregar el código de puertos de lectura y escritura a la Unidad1 de Form1:
función readport (puerto: word): byte;
procedimiento WritePort (puerto: palabra; cónbyte: byte);
función readport (puerto: word): byte;
varilla
B: byte;
Comenzar
ASM
Mov dx, puerto;
En al, dx;
Mov B, AL;
FIN;
Resultados: = b;
fin;
procedimiento WritePort (puerto: palabra; cónbyte: byte);
Comenzar
ASM
Mov dx, puerto;
Mov al, Conbyte;
Fuera dx, al;
FIN;
fin;
Agregue 8 componentes de casilla de verificación, modifique sus propiedades de subtítulos a D0 a D7 respectivamente y colóquelos de derecha a izquierda.
Haga doble clic en la casilla de verificación1 y agregue el siguiente código de programa al evento OnClick del componente de cuadros de verificación1:
procedimiento tForm1.Checkbox1Click (remitente: tobject);
varilla
b: byte;
Comenzar
b: = 0;
Si la casilla de verificación 1.
b: = b o $ 01;
Si checkbox2. verificó entonces
b: = b o $ 02;
Si la casilla de verificación.
b: = b o $ 04;
Si la casilla de verificación 4. comprobado entonces
b: = b o $ 08;
Si la casilla de verificación 5. verificada entonces
b: = b o $ 10;
Si la casilla de verificación 6. se verifica entonces
b: = b o $ 20;
Si la casilla de verificación 7. se verifica entonces
b: = b o $ 40;
Si checkbox8. se verifica entonces
b: = b o $ 80;
WritePort ($ 378, b);
fin;
Una vez completada la entrada, configure el evento OnClick de CheckBox2 en CheckBox8, los 7 componentes de casilla de verificación, en el evento OnClick de CheckBox1: CheckBox1Click.
En este momento, compilar y ejecutar el programa, puede hacer clic en estas 8 casillas de verificación para controlar el potencial de cada bit del puerto de datos LPT1.
A continuación, se agrega la función de monitorear el estado del puerto de datos del puerto paralelo.
Agregue un componente de temporizador en Form1: Timer1, modifique su propiedad habilitada a una propiedad falsa e intervalo a 1.
Agregado al evento Ontimer en Timer1:
procedimiento tForm1.Timer1Timer (remitente: tobject);
varilla
B: byte;
Comenzar
B: = Readport ($ 378);
Casilla de verificación1.ecked: = ((b o $ fe) = $ ff);
Chechbox2.checked: = ((b o $ fd) = $ ff);
Checkbox3.Calked: = ((b o $ fb) = $ ff);
Casilla de verificación4.Calked: = ((b o $ f7) = $ ff);
Checkbox5.Checked: = ((b o $ ef) = $ ff);
CheckBox6.Calked: = ((b o $ df) = $ ff);
CheckBox7.Calked: = ((b o $ bf) = $ ff);
Chechbox8.ecked: = ((b o $ 7f) = $ ff);
fin;
Agregue un componente de casilla de verificación, y la propiedad de subtítulo modificada es "Puerto paralelo de monitor", y agréguelo a su evento OnClick:
procedimiento tForm1.Checkbox9Click (remitente: tobject);
Comenzar
Timer1.Enabled: = CheckBox9.Checked;
fin;
Compile y ejecute el programa, haga clic en "Monitorear el puerto paralelo", y puede monitorear el estado del puerto paralelo LPT1 Puerto de datos 378H y modificar su estado en tiempo real.
Para facilitar la visualización y verificación del estado del puerto de datos 378H, hice un pequeño circuito de prueba de puerto paralelo, que utiliza una interfaz de impresión, 8 LED (diodos emisores de luz) y 8 1k resistencias. :
Después de completar el diagrama de circuito, instálelo en el puerto paralelo de la computadora y ejecute el programa escrito para ver fácilmente el potencial de cada bit del puerto de datos 378H.
Finalmente, hagamos otro experimento de linterna giratoria.
Primero declare una variable global TB: Agregar "TB: Byte" A continuación "Form1: TForm1":
varilla
Form1: tform1;
TB: byte;
Luego agregue un temporizador y una casilla de verificación en Form1, modifique la propiedad habilitada de Timer2 a False, modifique la propiedad de intervalo a 300, haga doble clic en Timer2 y agréguela a su evento Ontimer:
procedimiento tForm1.Timer2Timer (remitente: tobject);
varilla
B: byte;
Comenzar
Si tb = 0 entonces
TB: = 1
demás
tb: = tb * 2;
WritePort ($ 378, TB);
B: = Readport ($ 378);
Casilla de verificación1.ecked: = ((b o $ fe) = $ ff);
Chechbox2.checked: = ((b o $ fd) = $ ff);
Casilla de verificación3.Calked: = ((b o $ fb) = $ ff);
Casilla de verificación4.Calked: = ((b o $ f7) = $ ff);
Checkbox5.Checked: = ((b o $ ef) = $ ff);
CheckBox6.Calked: = ((b o $ df) = $ ff);
CheckBox7.Calked: = ((b o $ bf) = $ ff);
Chechbox8.ecked: = ((b o $ 7f) = $ ff);
fin;
Modifique la propiedad de subtítulos de CheckBox10 a "Demo de luz giratoria", luego haga doble clic en CheckBox10 y agréguela a su evento OnClick:
procedimiento tform1.checkbox10Click (remitente: tobject);
Comenzar
Timer2.enabled: = checkbox10.ecked;
fin;
Compilar y ejecutar el programa.
Haga clic en "demostración de linterna giratoria", ¿ha visto el efecto de "linterna giratoria"? Al modificar el intervalo de Timer2, puede ajustar la velocidad.
Nota: El método anterior para incrustar el acceso al ensamblaje a los puertos paralelos solo se puede usar en Win9x.
El programa anterior fue probado y aprobado bajo Win98+Delphi6.0