Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > ASM y Microcontroladores
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2008
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 18
MaMu Va por buen camino
Técnica Básica de acceso a puertos en XP

-----------------------------------------------------------------
Nota:
Esta mini guía está orientada al uso del Puerto Paralelo desde Delphi
-----------------------------------------------------------------


La problemática surge, con la llegada de sistemas operativos basados en Windows NT donde la premisa fundamental es una cuestión de Seguridad.
Sabemos que un programa (y no escapan a éstos los que realizamos con Delphi) en sistemas operativos como XP, se ejecutan en modo Kernel o en modo Usuario, siendo este último el que nos compete. En el modo Kernel, es posible lograr un control sobre los periféricos mediante el diálogo entre la aplicación y su controlador (driver), ya que dicho modo, supone un acceso directo a recursos del sistema. Pero en el modo Usuario, por una cuestión muy simple, la seguridad, esto no nos es posible, por lo que dependeremos para acceder a un periférico de un controlador que corra sobre el modo Kernel, ya que en modo Usuario, tenemos si al menos acceso a los drivers.
Nos bastará con emplear un driver que este corriendo en nuestro Kernel.
Anterior a la aparición de los sistemas basados en NT, podíamos (y aún podemos si los tenemos instalados o lo seguimos usando) acceder a los puertos directamente, ya que no eran instrucciones de privilegio del modo Kernel. Las rutinas clásicas que empleabamos eran las siguientes:

Código Delphi [-]
procedure EscribePuerto(direccion:word;valor:byte);
begin
  asm
   mov dx,direccion
   mov AL,valor
   out DX,AL
  end;
end;

function LeePuerto(direccion:word):byte;
begin
  asm
   mov dx,direccion
   in al,dx
   mov Result,al
  end;
end;

En XP, podemos utilizar un driver, por ejemplo, podemos descargar http://www.logix4u.net/inpout32.htm (incluye un OCX y no ahorramosde distribuir la dll). Y hacer uso de dos funciones de esta librería estaticamente en nuestro programa:

Código Delphi [-]
implementation 
function Inp32(wAddr:word):byte; stdcall; external 'inpout32.dll';
function Out32(wAddr:word;bOut:byte):byte; stdcall; external 'inpout32.dll';

Obviamente, para evitar excepciones, queda a criterio de cada uno de queforma cargar la librería en nuestra aplicación. Luego bien, su uso es muy básico y sensillo:

Código Delphi [-]
....
byteLeido:byte;
begin
 //Enviar 8 al puerto $300
 Out32($300,8) //Puerto=$300 - byte=8
 //Leer el puerto $300
 byteLeido:=Inp32($300); //Puerto=$300 - byte=8end;
end;
....

La alternativa que opté yo en su momento, es importar el OCX desdeDelphi que se incluye en la descarga, THWinterface, ya que meolvido de tener que distribuir la dll en otro archivo. Espero que les ayude esta mini guía, y se animen a retocar ymodificar esos programas que les han dejado de funcionar en XPdebido a las Funciones de Privilegio.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;

Última edición por MaMu fecha: 22-04-2008 a las 09:45:43.
Responder Con Cita
  #2  
Antiguo 23-04-2008
mario2000 mario2000 is offline
Miembro
 
Registrado: abr 2007
Posts: 109
Poder: 17
mario2000 Va por buen camino
Thumbs up

Muy agradecido por la informacion.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta técnica... con gratificación! charmelo Firebird e Interbase 7 28-01-2008 14:56:58
Como obtener Acceso Remoto con VNC Sin Conf. Puertos y Sin Tener Página web ???? AGAG4 Redes 22 11-09-2007 16:29:07
Consulta basica Albano SQL 4 02-07-2005 09:24:49
Ayuda Tecnica Esau Varios 6 23-05-2005 17:40:22
pregunta tecnica tutuk Conexión con bases de datos 4 26-02-2004 08:21:10


La franja horaria es GMT +2. Ahora son las 15:11:52.


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
Copyright 1996-2007 Club Delphi