duda sobre manipulacion del puerto lpt

Iniciado por MaLkAvIaN_NeT, 27 Junio 2006, 05:04 AM

0 Miembros y 1 Visitante están viendo este tema.

MaLkAvIaN_NeT

Hola es la primera ves que quiero hacer una aplicación que controle el puerto paralelo, lo estoy haciendo en C#
primero me estuve leyendo un manual sobre el puerto paralelo y encontre lo siguiente:

CitarLos puertos paralelos se denominan &h378 0 &h278 o &h3bc según la PC

luego en el ejemplo usa el &h378 pero como se yo cual debo usar?¿

gracias
a por las buenas ideas

BADBYTE-K

Bueno, pues eso depende de lo que quieras hacer, ya sea deseas leer o escribir datos. y ademas depende de la pc porque no siempre son los mismos "numeritos"

por ejemplo, fijate aqui en la parte donde uso Out (vb6) y cheka cuando hago uso de inp fijate en las direcciones que uso.

http://foro.elhacker.net/index.php/topic,48748.0.html

Ahora, para mas detalles puedes leerte lo que dicen aqui en la parte titulada "PART 1 - Some basics of a parallel port"

http://www.codeproject.com/csharp/csppleds.asp

Es una pena que no haya una implementacion directa del .net framework para el puerto paralelo. ojala algun dia si

saludos


MaLkAvIaN_NeT

Hola BADBYTE-K ,,, estaba leyendo tu post y en la parte que mencionas que es necesario sabernos la posicion de memoria

Citaren XP puedes irte a propiedades de mi pc> ficha hardware > administrador de dispositivos >
puertos COM y LPT > da click en el + y luego posicionate en el LPT > click derecho > propiedades > dale a
la ficha recursos > y ahi tendras el intervalo entrada/salida del puerto...

hago esto y obtengo:
Intervalo de E/S  |  0378 - 037F
Intervalo de E/S  |  0778 - 077F

.. bien en el caso que use el primero, me gustaría saber la diferencia entre ambos o xq existen las dos opciones, te agradecería que respondieras.
a por las buenas ideas

BADBYTE-K

Hola

Bueno, no entiendo porque te aparecen dos, pero de igual forma, tienes 0378 - 037F el que interesa para estos casos. has pruebas con leds o con un tester(voltimetro, multimetro, etc.) aver si te trabaja con tu programa

saludos

MaLkAvIaN_NeT

Hola gracias por la respuesta, ya logré hacer lo que quería,,, bueno en el ejemplo que me pasaste usa el void:

public class PortAccess
{[DllImport("inpout32.dll", EntryPoint="Out32")]
public static extern void Output(int adress, int value);
}


y cuando usas el void le mandas por ejemplo:

PortAccess.Output(888, 24);

lei tu ejemplo en vb 6.0 (manejo del puerto paralelo) y alli si usas

Out &H378, 16

pero no entiendo porque en  C# usa 888, alguien tiene alguna idea???,, solo para saber porque ya logre hacer la aplicación y funciona.

Salu2,, gracias por su antecion.

a por las buenas ideas

GrTk

Nananana...
Para C++ podes usar esto...

#include <conio.h>
#include <iostream.h>
#include <dos.h>

main(){

char puerto;
int puertoa,puertob,puertoc,dato;
cout << " ingrese la dir del puerto lpr\n"; // Uso el cout
cout << " 1) 378  2) 278 3) 3BC "; //que es como el prinf
                                               // es de la libreria iostream
cin >> puerto;

switch (puerto){
case '1':
puertoa= 0x378;
puertob= 0x379;
puertoc= 0x37A;
break;
case '2':
puertoa= 0x278;
puertob= 0x279;
puertoc= 0x27A;
break;
case '3':
puertoa= 0x3BC;
puertob= 0x3BD;
puertoc= 0x3BE;
break;
}
outport(puertoc,0x26); //Seteo el Bus de control
                                  //Para leer los bits 2 al 9

dato = inport(puertoa); // Leo los datos
cout << dato;  // los pongo en pantalla.

//En el caso de que quieras enviar informacion
//Del pin 2 al 9

ouport(puertoc,0x00); //Seteo el bus de control
                                 //Para escribir los bit del 2 al 9
int enviar=32;
outport(puertoa,enviar); // envia el 32
                                   // que seria 00100000
//El puerto b osea el 379, 279 .....
//son los pines 15 a 11
// y solo son entradas.
//podemos obtener la info
//asi:
//PD:. no hace falta setear nada para leer

dato = inport(puertob);

//Deberias hacer un enmascaramiento
//Para obtener el bit deseado...
//Por ejemplo si quiero obtener un 0 o un
//uno en el pin 15, deberia
dato = (inport(puertob)&0x08)/8;
//El 0x08 hace el enmascaramiento
// y para que no te de 0 o 8
// lo divido por 8

// Recorda que dentro de las computadoras
// las entradas estan en estado
//alto por las r de pull up
//osea las entradas estan en 1
//a menos que las mandes a masa (podes usar el
//pin 18 que es masa. Nunca olvides
//de conectar la masa del circuito.

getch();
}



/****************************************


El programa puede tener errores, lo escribi asi nomas
para que  tengas una idea...
cualquier cosa si qures mas info
contactate por msn o mail
nico_offspring@hotmail.com



*/




MaLkAvIaN_NeT

gracias por el code lo estuve probando, pero no entiendo para que sirve el enmascarmiento que dices.

bueno y en verdad yo estoy haciendolo con C# del .net, pues en vb 6.0 y C++ ya lo había logrado., en C# ya logre controlar unos leds, pero me quedaron algunas dudas. :huh:
a por las buenas ideas

GrTk

el enmascaramiento es para poder leer ese bit solo...

cuando tomas el puerto 378
suponete que lees el dato 00101011

ahora el tema, es muy lindo todo eso
pero yo quiero solo el 4bit, no el conjunto de los 8 bit
entonces lo que hago es una AND
al binario ese

00101011
AND
00001000
=
00001000

eso equivale al 8 en decimal (que es con lo que trabajas en c),
la verdad que es medio al pedo... pero bueno