Você está na página 1de 6

Controle de dispositivos externos atravs da porta paralela utilizando C#

Publicado em: 03/02/2004

Em nosso artigo vamos aprender a controlar dispositivos externos, atravs da porta paralela do
PC, utilizando a linguaguem C#. Esses dispositivos podem ser desde de simples leds at motores
e mquinas de potncia.
Antes de comearmos precisamos entender alguns conceitos importantes.
Porta Paralela
Modos de Operao
A porta paralela atualmente possui trs modos de operaes. So eles:
SPP bits de dados unidirecional
EPP bits de dados biderecional
ECP bits de dados bidericional
Estes modos de operao so configurados pelo BIOS Setup.
A diferena entre EPP e ECP que esta ltima utiliza DMA(acesso direto a memria).
Endereos da Porta Paralela
Para enviarmos ou recebermos dados da porta paralela precisamos saber o seu endereo base.

Nome da Porta no SO Endereo


LPT1

378 hexadecimal / 888 decimal

LPT2

278 hexadecimal / 632 decimal

Pinagem
Pinagem da porta paralela DB-25.

A pinagem no conector DB25 dividida em trs grupo, so eles:


1. Pinos de Dados (Data Register)
2. Pinos de Controle (Control Register)
3. Pinos de Status (Status Register)

Em nosso projeto utilizaremos apenas os pinos de dados (D0 a D7) para controlar dispositivos
externos. E como estaremos apenas enviando sinal de sada (unidirecinoal), o projeto funcionar
independente do modo de operao definido no BIOS Setup.
Observe tambm que D0 a D7 representam 8 bits (1 byte). Ento o valor de sada pode variar
entre 00000000 (0 decimal) e 11111111(255 decimal).
Software
Bem, agora que j temos um embasamento tcnico sobre o hardware da porta paralela, iremos
nos concentrar no software que ir control-la.
Nos sistemas operacionais da famlia Windows 9x , a maioria das linguagens de programao
acessavam com facilidade a porta paralela atravs de funes nativas da prpria linguagem ou via
cdigo assembler.
Sistemas operacionais como o Windows NT/2000/XP no permitem o acesso direto a este tipo de
porta. Nesse caso necessrio um driver de sistema.
Para contornar este problema usaremos a Inpout32.dll que pode ser adquirida em
http://www.logix4u.net/.
Veja o funcionamente bsico da Inpout32.dll na figura abaixo:

A Inpout32.dll possui duas funces: Out32 e Inp32. A primeira para escrever um valor (byte)
num endereo de I/O e a segunda para ler um valor (byte) de um endereo de I/O.
Como no se trata de uma dll .NET devemos utiliz-la como Cdigo No-Gerenciado (UnManage
Code).
Aplicativo
Vamos ento ao nosso software. Inicie o VS.NET e crie uma nova aplicao C# Windows Forms.

Vamos ento criar uma classe de nome Paralela.cs para manipular a dll. Veja figura abaixo.

Escreva o seguinte cdigo para a classe:


using System;
using System.Runtime.InteropServices;
namespace automacao
{
/// <summary>
/// Summary description for Paralela.
/// </summary>
public class Paralela
{
// Escreve um byte no endereo
[DllImport("Inpout32.dll", EntryPoint="Out32")]
public static extern void Escrever(int endereco, byte valor);

// L um byte do endereo
[DllImport("Inpout32.dll", EntryPoint="Inp32")]
public static extern byte Ler(int endereco);
}

No esquea de declarar o namespace que permite a utilizao de dlls no gerenciadas.


using System.Runtime.InteropServices;
Embora o nosso projeto utilize apenas o mtodo de escrita (enviar dados para um dispositvo
externo), decidi importar tambm o mtodo de leitura. Ento nossa classe possuir dois mtodos
estticos que so:
public static extern void Escrever(int endereco, byte valor);
public static extern byte Ler(int endereco);
Como deu pra perceber os endereos so do tipo inteiro e o valor escrito/lido do tipo byte. Dessa
forma podemos garantir que o valor lido/escrito estar sempre entre 0 e 255.
Agora vamos retornar ao nosso formulrio e deix-lo conforme a figura abaixo:

Vamos definir o seguinte cdigo para o boto Escrever:


private void btnEscrever_Click(object sender, System.EventArgs e)
{
int endereco = Convert.ToInt32(txtEndereco.Text.Trim(), 16);
byte dados = Convert.ToByte(txtDados.Text.Trim(), 2);
Paralela.Escrever(endereco,dados);
MessageBox.Show("O byte " + txtDados.Text.Trim() +
" foi enviado para o endereo " + txtEndereco.Text.Trim()
, "Automao");
}
Observe que utilizamos os mtodos estticos da classe Convert para converter os valores
fornecidos para inteiro e byte.
Pronto! Com isso nossa aplicao j est pronta para enviar dados para a porta paralela. Para
testarmos nossa aplicao vamos construir um hardware bem simples.
Hardware
Como o nosso objetivo apenas didtico, iremos montar um circuito com 8 leds que sero
acionados de acordo com a sada de dados de nossa aplicao. Observe que nada impede de
utilizarmos um circuito com rels para acionar dispositivos mais potentes. Aconselho a pedir a
ajuda de um tcnico caso voc no possua conhecimentos em eletrnica suficientes para montar

o circuito. Se no desejar montar o circuito voc poder medir com um multmetro os valores de
tenso diretamente nos pinos da porta paralela. Onde:
0 = 0 Volts
1 = 5 Volts
Circuito

Componentes
8 Resistores de 470R
8 LEDs
1Conector DB25 macho
Cabos, placa, etc...
Exemplos do circuito montado:
1 Circuito montado numa matriz de contato

2 Circuito montado dentro do conector do cabo paralelo

Ateno. A autor do artigo no se responsabiliza por qualquer dano que venha a ocorrer
porta paralela ou ao PC, utilizando o projeto apresentado ou pelo manuseio indevido
dos mesmos.

Autor: Eric Cavalcanti

Você também pode gostar