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: 57.198 ]

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

Dynamic libraries com libtool

Ponteiros - Saindo de Pesadelos

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

Desenvolvendo um plugin de visualização para o XMMS (Parte 1)

Como funcionam os alocadores de memória do STD C?

  
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