FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
APrender sobre puertos seriales y paralelo
Hola quisiera saber si hay info como para exmpezar a ver como se usan las comunicaciones entre delphi y los puertos, para enviar senales y realizar x tareas.
Gracias!! |
#2
|
||||
|
||||
Hola Dalmie,
ya respondí a tu pregunta en el truco 355. En cuanto a lo de usar los puertos, si estamos hablando de Windows XP/2000 o posteriores la cosa esta complicada, ya que no esta permitido acceder a ellos de forma directa. En el caso del puerto serie, como ya comprobaste, se pueden usar las lineas RTS y DTR para mandar señales con la función EscapeCommFunction. Y también hay funciones para realizar una transmisión serie, hasta ahí no hay problema. La cosa se complica si lo que queremos es utilizar los pines del puerto a nuestro antojo tanto del puerto serie como del paralelo, entonces necesitaremos de algún tipo de driver que tendremos que instalar. Busca por internet, hay varios drivers gratuitos que podrás utilizar. |
#3
|
|||
|
|||
Yo Lo He Hecho Con El Lenguaje C
Hola. Yo Tambien Estoy Tratando De Aprender A Activar Los Pines De Datos Del Puerto Paralelo. Lo Que Yo Quiero Es Activar Y Desactivar Aparatos Electrónicos O Electrodomésticos Mediante El Encendido O Apagado De Uno De Estos Pines, Y Por Medio De Una Placa Electrònica Y Un Relé... Si Ya Aprendiste Algo, Por Favor Pasalo No? Podemos Aprender Muchos Ambos. Tengo Un Proyecto Muy Bueno Con Esto... Amigos?
|
#4
|
||||
|
||||
Hola Vanessa, no se si le echaste ya un vistazo al truco 355, se utiliza el puerto serie y no el paralelo, pero aun así se pueden manejar hasta dos relés. La ventaja es que no es necesario ningún tipo de driver para acceder al puerto serie, mientras que para acceder al puerto paralelo si es necesario.
|
#5
|
||||
|
||||
Cita:
Código:
procedure OutPort(PortAddress:smallint;Value:smallint); var ByteValue:Byte; begin ByteValue:=Byte(Value); asm mov dx,PortAddress mov al, ByteValue out dx,al end; end; function InPort(PortAddress:smallint):smallint; var ByteValue:byte; begin asm mov dx, PortAddress in al,dx mov ByteValue,al end; Inp32:=smallint(ByteValue) and $00FF; end; Código:
procedure OutPort(direccion:smallint;dato:smallint); var ByteDato:Byte; begin ByteDato:=Byte(dato); asm push dx mov dx,direccion mov al, ByteDato out dx,al pop dx end; end; function InPort(direccion:smallint):smallint; var ByteDato:byte; begin asm push dx mov dx, direccion in al,dx mov ByteDato,al pop dx end; InpPort:=smallint(ByteDato) and $00FF; end; Escritura en el Puerto Paralelo - BUS de DATOS($378) y BUS CONTROL ($37A) Código:
OutPort($378,50); //enviamos 50 al puerto 378 de nuestro LPT Código:
mi_variable:=InPort($379); //leemos el valor de nuestro LPT INPOUT32.DLL - OPEN SOURCE Código:
{Source code for inpout32.dll. Enables 32-bit Visual Basic programs to do direct port I/O (Inp and Out) under Windows 95. To be compiled with Borland's Delphi 2.0.} library inpout32; uses SysUtils; procedure Out32(PortAddress:smallint;Value:smallint);stdcall;export; var ByteValue:Byte; begin ByteValue:=Byte(Value); asm push dx mov dx,PortAddress mov al, ByteValue out dx,al pop dx end; end; function Inp32(PortAddress:smallint):smallint;stdcall;export; var ByteValue:byte; begin asm push dx mov dx, PortAddress in al,dx mov ByteValue,al pop dx end; Inp32:=smallint(ByteValue) and $00FF; end; Exports Inp32, Out32; begin end. Espero que te sirva, Saludos.
__________________
Última edición por MaMu fecha: 04-09-2006 a las 03:20:02. |
#6
|
||||
|
||||
Esas funciones ¿te funcionan en Windows XP? a mi me sigue dando el error (Privileged instruction) ¿hay que hacer algún otro cambio? ¿instalar algún driver adicional?
|
#7
|
||||
|
||||
Cita:
Por las dudas te dejo la DLL compilada, utilizarla es muy sencillo: Código:
implementation function Inp32(wAddr:word):byte; stdcall; external 'inpout32.dll'; function Out32(wAddr:word;bOut:byte):byte; stdcall; external 'inpout32.dll'; Código:
Enviar 65 al puerto 378 hexadecimal} Out32($378,65); {Leer del puerto 379 hexadecimal} ShowMessage( 'Lectura del puerto $379:'+IntToStr(Inp32($379)) );
__________________
Última edición por MaMu fecha: 19-05-2008 a las 00:45:26. |
#8
|
||||
|
||||
Entonces si que es necesario instalar un driver adicional para acceder a los puertos, y ya que el compilador de delphi no puede generar drivers, este tiene que estar creado con alguna otra herramienta diferente. Te preguntaba por curiosidad, no sabia de nadie que fuera capaz de acceder a los puertos sin utilizar drivers en XP y pensé que tu habías encontrado la forma. Por mi parte yo me conformo con la comunicación serie y los dos pines de salida que puedo manejar solo con funciones de la API.
|
#9
|
||||
|
||||
Si, entiendo el punto, quizas no me he expresado bien. Hasta donde yo se, siempre es necesario utilizar un driver para acceder a los puertos, ya que de forma nativa no se puede. Lo que se hace comunmente, es agregar el driver al programa y compilarlos juntos. Una libreria muy completa es la del PortTalk, a mi gusto, muy superior a inpout32.dll, y que tambien se encuentra el source por internet.
Saludos.
__________________
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
leer desde los puerto seriales. | G.A.R.S | API de Windows | 10 | 24-05-2005 23:54:25 |
Generador de Seriales | wpolanco | Varios | 0 | 26-01-2005 23:12:47 |
Como Leer y escribir puertos Seriales | sandragm | API de Windows | 1 | 28-04-2004 05:42:00 |
sobre el puerto paralelo en windows 2000, Xp... | redlyon13 | Varios | 1 | 01-12-2003 14:50:46 |
puertos serial y paralelo... | emeceuy | Varios | 2 | 05-06-2003 10:29:10 |
|