Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Control digital por puerto paralelo LPT (https://www.clubdelphi.com/foros/showthread.php?t=31136)

FGarcia 28-04-2006 18:34:43

Control digital por puerto paralelo LPT
 
Estoy hecho pelotas!!! Ya no se si voy a la derecha o a la izquierda, una manita por favor!!
Quiero manipular el puerto paralelo LPT para usarlo en control de equipos
electricos desde la PC, esto lo realizare utilizando la dll "InpOut32.dll" de
www.logix4u.net --la version que funciona con XP-- hasta ahi todo bien, ya la probe y me funciona perfectamente. Mi problema ahora es generar un procedimiento que me permita encender varias salidas simultaneamente. Como ejemplo:

Código Delphi [-]
SalidasDigitales : Byte //declaro una variable de tipo byte 0..255
//La funcion de la dll que usare
function Out32(wAddr:word;bOut:byte):byte; stdcall; external 'inpout32.dll';
//Como la llamare
bErr := (Out32($378, SalidasDigitales));
//Valores para encender o apagar cada salida mediante los procedimientos a crear

procedure SalidaOn(num:integer);
procedure SalidaOff(num:integer);
//Como los usaria
SalidaOff(0); // 00000000 ó bErr := (Out32($378, 0)); //apaga todas
SalidaON(1); // 00000001 ó bErr := (Out32($378, 1));
SalidaON(2); // 00000010 ó bErr := (Out32($378, 2));
SalidaON(3); // 00000100 ó bErr := (Out32($378, 4));
SalidaON(4); // 00001000 ó bErr := (Out32($378, 8));
SalidaON(5); // 00010000 ó bErr := (Out32($378, 16));
SalidaON(6); // 00100000 ó bErr := (Out32($378, 32));
SalidaON(7); // 01000000 ó bErr := (Out32($378, 64));
SalidaON(8); // 10000000 ó bErr := (Out32($378, 128));
SalidaON(9); // 11111111 ó bErr := (Out32($378, 255)); // enciende todas





En el ejemplo anterior he sustituido SalidasDigitales por su valor numerico.
Como ven "esta resuelto" la activacion de cada salida, lo que no encuentro es como hacer p.e. que SalidaOn(5) sea equivalente a SalidasDigitales := 16, que pasa si hago:

Código Delphi [-]
SalidaOn(2); //SalidasDigitales := 2
SalidaOn(6); //SalidasDigitales := 32
SalidaOn(8); //SalidasDigitales := 128
//equivale a: SalidasDigitales := 162 por lo tanto:
bErr := (Out32($378, 162));

Espero entiendan lo que quiero hacer, de antemano gracias por la atencion prestada al mensaje y la ayuda que puedan aportar.

seoane 28-04-2006 18:47:50

Haber si te entendi bien, quieres hacer una funcion tal que asi:

Código Delphi [-]
procedure SalidaOn(num: Integer);
begin
   bErr := Out32($378, 1 shl (num-1));
end;

Esto equivale a:

SalidaOn(1) -> bErr := Out32($378,1);
SalidaOn(2) -> bErr := Out32($378,2);
SalidaOn(3) -> bErr := Out32($378,4);

Y asi sucesivamente, ¿era eso lo que querias?

FGarcia 28-04-2006 19:15:00

Tan Facil!!
 
Gracias Seoane!
Si era eso lo que queria para manejar individualmente cada salida, sin embargo si quieres activar mas de una simultaneamente los valores se deben de sumar o no? es decir si activas la salida (bits) 1 y 2

SalidaOn(1); //00000001 esto es individualmente
SalidaOn(2); //00000010

Cuando ambas estan activadas equivaldria a 00000011 o el numero 3

si fuese:

SalidaOn(1);
SalidaOn(5);
SalidaOn(8);

eso seria 10010001 que equivaldria a 145. Esto es para activar y para desactivar deberia restar el valor correspondiente:

SalidaOff(1);
SalidaOn(5);
SalidaOn(8);

esto seria 10010000 que equivaldria a 144

Gracias por tu ayuda! Voy a investigar mas esto de los operadores logicos.


La franja horaria es GMT +2. Ahora son las 12:36:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi