Acessando a porta paralela via Linux

A porta paralela vai além da comunicação com uma impressora, podemos conectar qualquer tipo de dispositivo, tanto para controle e transmissão, como para aquisição e recuperação de dados. Para manipular esse dispositivo tão interessante podemos usar a poderosa linguagem C/C++, porém existem algumas particularidades para acessar as portas paralelas via Windows e Linux.

[ Hits: 56.588 ]

Por: Daniel Gurgel Pinheiro em 31/10/2006


Funções



A função ioperm()


A função ioperm() dá permissões para uma faixa de endereços de portas. Aceita três parâmetros:

int ioperm( 0x378, 3, 1 );
  • 0x378 - Endereço inicial para permissão de acesso (endereço do registro de dados);
  • 3 - Total de endereços permitidos para acesso, respectivamente: (0x378, 0x379, 0x37A);
  • 1 - Permite que o programa acesse a porta especificada. Retorna um inteiro 1 se permite acesso, 0 senão.

A função outb()


A função outb() tem as mesmas características de funcionamento da função outportb(). É utilizada para enviar um byte para uma porta especifica de um determinado dispositivo.

void outb( Byte, 0x378 );
  • 0x378 - Endereço da porta paralela (LPT1);
  • Byte - Valor do tipo unsigned char que desejamos enviar para a para a paralela.

Se desejar receber valores de um determinado registro da porta paralela use a função inb():

Exemplo:

unsigned char byte = inb(0x379); //Lê um byte do Registro de Status e armazena-o na variável byte.

Compilando os programas


Para compilar os programas, primeiramente certifique-se que esteja logado no Linux como superusuário (root).

Para compilar o programa lptliga.c usando o compilador gcc:

$ gcc lptliga.c -o lptliga.exe

Para compilar o programa lptliga.cpp usando o compilador g++:

$ g++ lptliga.cpp -o lptliga.exe

Rodando o programa:

$ ./lptliga.exe

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Funções
   3. Restrições
Outros artigos deste autor

Alocação dinâmica

Leitura recomendada

Projeto Icecream (parte 1)

Desenvolvendo aplicativo para autenticação biométrica utilizando a Libfprint

Linguagem C - Funções Variádicas

SDL - Ótimo para criação de jogos

Programação de Jogos com SDL

  
Comentários
[1] Comentário enviado por lnunesx em 01/11/2006 - 11:09h

ótimo artigo, com tudo o que precisa!

alguém que tiver problema aí... pode contar comigo também para ajudar

msn: lmnx@hotmail.com

[2] Comentário enviado por mpinho em 02/11/2006 - 17:20h

Olá,

Parabéns pelo artigo. É legal ver artigos sobre o uso de linux em Eletrônica.

Gostaria de contribuir com mais alguns links sobre porta paralela e sobre uma biblioteca para uso no linux

http://www.lvr.com/parport.htm

http://parapin.sourceforge.net/

parapin -- a Parallel Port Pin Programming Library for Linux

Parapin has two ``personalities'': it can either be used as a user-space C library, or linked as part of a Linux kernel module. There is also a device driver that provides access to the kernel module from user-space, allowing the administrator to use filesystem permissions to control access to the port. Parapin was written with efficiency in mind, so that Parapin can be used in time-sensitive applications. Using Parapin should be very nearly as fast as writing directly to the parallel port registers manually.


http://www.linux.com/howtos/IO-Port-Programming.shtml

Linux I/O port programming mini-HOWTO


[3] Comentário enviado por danilorlima em 30/05/2007 - 21:41h

Olá,
Tentei rodar com a LPT1 definida no endereço 0x378 da acesso negado mas se uso 0x03bc dá certo, isso pode acontecer mesmo ou é só em windows ? vi isso aqui http://et.nmsu.edu/~etti/fall96/computer/printer/printer.html

[4] Comentário enviado por jborda em 08/10/2007 - 13:41h

Interessante, gostei, Parabens!

[5] Comentário enviado por gabriel.bezerra em 07/02/2008 - 14:52h

Para quem programa em C++ há a API para Linux e rWindows libPortaParalela
http://sourceforge.net/projects/portaparalela/

É bem facil de usar e o codigo fica bem limpo.

[6] Comentário enviado por fag_oliv em 26/02/2009 - 13:45h

Para a leitura de portas seriais, funciona da mesma maneira? ...

[7] Comentário enviado por victorsartori em 04/09/2009 - 17:01h

no include: #include <asm/io.h>
troque por #include <sys/io.h>
pq ele não consegue encontrar essa lib.... testei em um ubuntu 9.04 com o source do kernel default e compilou belezinha

[8] Comentário enviado por arqeverton em 17/01/2016 - 22:50h

Amigos, em pascal como seria o acesso à paralela? uso lazarus no debian


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts