Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





programar puerto paralelo en borland c++ builder 6

Iniciado por wolver, 11 de Diciembre de 2007, 06:35:24 AM

« anterior - próximo »

wolver

:P hola a toda la comunidad la verdad soy un poco nuevo en esto de la programacion y la verdad quisiera que me ayudaran con la programacion del puerto paralelo con builder 6.0 en xp la verdad no tengo indea de como hacerlo y pues tengo pensado controlar un sensor de movimiento que ya tengo lo de electronica pues solo me falta lo de poder sacar info del puerto y que me pudieran ayudar con algunos diagramas o algo pues lo agradecere muchicimo, yo les puedo ayudar con electronica!!!.
i se imagina se puede

wolver

ya quedo lo de abrir el puerto paralelo en xp pero ahora tengo duda en como prender y apagar leds con turbo c por que cuando corro mi programita prende uno a la ves y yo quiero qeu se prendan a l mismo tiempo o uno si y otro no estoy jalando el ejecutable desde c++ builder que prende un led con un boton y con otro boton jalo otro ejecutable y se apaga el primero este es mi codigo

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

viod main ()

{
  int port=(0x378);
     outport(port,1);
}

solo cambio el dato de salita pero no se como ponerlo para que prendan uno y al mismo tiempo el 2 y apagar el 1 y que se quede prendio el 2
si me pudieran ayudar se los agradecere
i se imagina se puede

zxs

No se si te he entendido bien, puesto que usas un español un poco chusquero y en este foro somos un poco puristas con el lenguaje  :lol: , pero... voy a ver si te contesto bien y rápido:

tu estás sacando por el puerto:

outport (port,1)

este 1 es el dato de las salidas, pero realmente son 8 bits, que pueden tomar dos valores: 0/1 (lo que hagan después depende de tu electrónica).
Tomo como ejemplo que el Borland guarda los bits primero el bit más significativo y luego el menos, la verdad es que no me acuerdo cuando es una cosa en Dos y otra en Linux....

Ejemplos:

Salida 7 - 0
Salida 6 - 0
Salida 5 - 0
Salida 4 - 0
Salida 3 - 0
Salida 2 - 0
Salida 1 - 0
Salida 0 - 0

   Resultado: debes poner 0x00000000 = 0x00 = 0

Salida 7 - 0
Salida 6 - 0
Salida 5 - 0
Salida 4 - 1
Salida 3 - 0
Salida 2 - 0
Salida 1 - 1
Salida 0 - 0

   Resultado: debes poner 0x00010010 = 0x12 = 18

No necesitas dos ejecutables para nada, creo yo.

Lo mejor en estos casos, es crearte variables globales que actúen como una máscara para luego hacer las comprobaciones select/case a toda leche o asignar los valores directamente en las salidas.


P.D. Por cierto, me resulta raro que te deje acceder al puerto paralelo directamente desde el DOS del Windows XP. Será que el Borland C++ permite acceder a ellas. Si es así no está nada mal, yo todo esto lo he probado siempre desde DOS puro (FreeDOS) y en un Linux que me permita acceder al hardware.

wolver

Cita de: "zxs"No se si te he entendido bien, puesto que usas un español un poco chusquero y en este foro somos un poco puristas con el lenguaje  :lol: , pero... voy a ver si te contesto bien y rápido:

tu estás sacando por el puerto:

outport (port,1)

este 1 es el dato de las salidas, pero realmente son 8 bits, que pueden tomar dos valores: 0/1 (lo que hagan después depende de tu electrónica).
Tomo como ejemplo que el Borland guarda los bits primero el bit más significativo y luego el menos, la verdad es que no me acuerdo cuando es una cosa en Dos y otra en Linux....

Ejemplos:

Salida 7 - 0
Salida 6 - 0
Salida 5 - 0
Salida 4 - 0
Salida 3 - 0
Salida 2 - 0
Salida 1 - 0
Salida 0 - 0

   Resultado: debes poner 0x00000000 = 0x00 = 0

Salida 7 - 0
Salida 6 - 0
Salida 5 - 0
Salida 4 - 1
Salida 3 - 0
Salida 2 - 0
Salida 1 - 1
Salida 0 - 0

   Resultado: debes poner 0x00010010 = 0x12 = 18

No necesitas dos ejecutables para nada, creo yo.

Lo mejor en estos casos, es crearte variables globales que actúen como una máscara para luego hacer las comprobaciones select/case a toda leche o asignar los valores directamente en las salidas.


P.D. Por cierto, me resulta raro que te deje acceder al puerto paralelo directamente desde el DOS del Windows XP. Será que el Borland C++ permite acceder a ellas. Si es así no está nada mal, yo todo esto lo he probado siempre desde DOS puro (FreeDOS) y en un Linux que me permita acceder al hardware.


Gracias por responde zxs.
lo que quiero hacer es:
ejemplo:

encender tres salidas, 0,1,2 y manipularlas independientemente esto, es decir, que cuando encienda la salida 0 pueda prender y/o apagar la salida 1 sin que se afecten las otras salidas.
Esto es debido a que quiero controlar tres circuitos  uno por cada salida del LPT.
Esto lo estoy intentando programar en turbo c o en c++ builder 6 si fuera en el segundo mencionado seria mejor espero que puedas ayudarme con algunos ejemplos.

NOTA para acceder al puerto en windows xp utilize un software que encontre en internet que deja abiertos (literalmente) las salidas y entradas del puerto

De ante mano gracias y espero que me puedas ayudar.
PD. disculpa por el español escribí muy rapido.
i se imagina se puede

marcode

Tienes que usar las operaciones lógicas, AND, OR, y XOR

Para no liarte y entrar en detalles que tendrás que estudiar por tu cuenta, usa el OR para "encender" bits individuales sin modificar el resto, y el AND y el XOR para apagarlos.

primero define para tenerlo en cristiano las acciones o estados que vas a usar y asigna un bit a cada uno, por ejemplo en este caso para controlar las luces de la casa:

#define LUZ_COCINA 1
#define LUZ_COMEDOR 2
#define LUZ DORMITORIO 4
#define LUZ_BAÑO 8

al principio el estado es todas apagadas

BYTE estado = 0;

ahora para encender luces con OR |

estado = estado | LUZ_COCINA;
estado = estado | LUZ_COMEDOR;
estado = estado | LUZ_BAÑO;


y para apagarlas con el AND & y el XOR ^

estado = estado & ^LUZ_COCINA;
estado = estado & ^LUZ_COMEDOR;

tras estas operaciones la variable [estado] debería contener todavía la LUZ_BAÑO. Si echas un vistazo al funcionamiento de este tipo de operaciones entenderás el porqué.

Recuerda que al igual que con las operaciones aritméticas se puede abreviar cuando se opera sobre la variable destino.

estado |= LUZ_COCINA;


saludos.
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]

marcode

Perdón,  antes me he referido al XOR ^ como NOT,  lo que hace eso es un intercambio de bits, pone a 0 los 1 y vicecersa. (ya he editado el error)
size=9]afortunadamente siempre ha habido alguien dispuesto a reinventar la rueda, de lo contrario seguiríamos usando un disco de piedra con un agujero.[/size]






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.