Para comandar dispositivos através de um computador é necessário saber colocar sinais ou níveis lógicos na porta paralela. Já descrevemos diversos projetos que permitem aproveitar estes sinais no comando de dispositivos externos, mas não ensinamos o leitor como utilizar o hardware adequado para fazer isso. Neste artigo, mostramos como é possível acessar a porta paralela usando comando em diversas linguagens comuns.
Na porta paralela temos 8 linhas de sinais, conforme exemplo dado na figura 1, que podem ser utilizadas para emitir sinais de controle para dispositivos externos por meio de uma interface.
Interfaces usando acopladores ópticos, circuitos integrados, transistores e outros dispositivos já foram descritas em artigos deste site.
Elas se baseiam no fato de que as saídas da porta paralela permanecem no nível baixo (0 V) na ausência de sinal ou quando o nível lógico é zero (0), e apresentam uma tensão de 5 V quando o nível lógico é alto ou 1, veja a figura 2.
Como gerar os comandos que colocam os níveis 0 ou 1 nas portas de acordo com o que desejamos controlar externamente? O acesso à porta paralela a partir de software tem sido exigido por nossos leitores que perguntam qual é a maneira mais adequada de fazer isso.
Na realidade, a melhor maneira ou melhor programa é aquele que o leitor domina bem.
Para os que desejam uma interface gráfica com um visual melhor ou mais sofisticado, programas em Delphi ou Visual Basic (VB) são os indicados.
Todavia, outras linguagens como o Pascal, C++, QuickBasic e até mesmo o Debug podem ser usadas para se acessar a porta paralela.
Nas linhas que seguem daremos o blocos básicos de programa para acesso à porta paralela em diversas linguagens, que podem ser aproveitados como parte de programas de controle mais complexos.
Observamos que o endereço da porta paralela (LPT1), que normalmente é dado como 378 na maioria dos computadores, pode variar.
Assim, ao testar ou usar seu programa, verifique no seu computador qual é o endereço usado para acessar a porta paralela.
TURBO PASCAL
O acesso às portas I/O dos microprocessadores da linha 80x86 é obtido através de dois arrays: Port e PortW/
var Port: array[0..65535) of byte;
PortW: array[0..65534] of word;
Os elementos indexados de cada array casam com o endereço correspondente da porta I/O. Agregando um valor a um elemento de Port ou PortW faz-se com que este valor apareça na saída da porta correspondente.
const Data = $5378;
Status = Data + 1;
Control = Data + 2
var Bits: Byte;
port(Data) := Bits; (output data)
Bits := Port(Status); (input data)
VISUAL C++
As funções pré-definidas para acesso às portas I/O dos microprocessadores da série 80x86 são _inp/_inpw e _outp/_outpw.
int _inp(unsigned portid) ; /* retorna a leitura do byte na variável portid da porta I/O*
unsigned _inpw(unsigned portid, int value); /* retorna à leitura de palavra da variável portid na porta I/O*
int_outp(unsigned portid, int value) ; /* escreve um valor de byte a partir da variável portid e retorna aos dados realmente escritos*
unsigned _outpw(unsigned portid, unsigned value); /* escreve o valor da palvra na porta I/O em portid e retorna aos dados realmente escritos*
Portid pode ser qualquer inteiro entre 0 e 65 535.
# include <conic.h> /* necessário somente para declaração de função*
# define Data 0x378
# define Status 0x379
# define Control 0x37a
int Bits, /* 0 ,= Bits <= 255*/
Dummy;
Dummy = _output(Data,Bits); /* dados de saída*/
Bits = _inp(Status); /* dados de entrada */
DEBUG
Através do Debug também é possível ter acesso de forma muito simples à porta paralela.
Começamos por entrar no Debug:
c:\debug /?
Debug [[drive:][path]filename [testfile-parameters]]
[drive:][path]filename Especifica o arquivo que desejamos testar.
testfile-parameters Especifica a linha de comando necessária pelo arquivo que deve ser testado.
Depois que o Debug carrega, digite ? para ter uma lista de comandos.
O Debug pode proporcionar comandos de entrada e saída:
i port_address
o port_address byte_value
c:\>debug
-o 378 2b
-i 379
3E
-q
C:\>
TURBO C
Também é válido para o Borland C e C++.
O Turbo C e o Borland C/C++ proporcionam acesso às portas I/O dos microprocessadores da série 80x86 via funções pré-definidas: inportb/inport e outportb/outport.
int inportb(int portid); /* retorna um bit lido como portid na porta I/O*/
int inport(int portid); /*retorna uma palavra lida na porta I/O como portid */
void outportb(int portid, unsigned char value); /* escreve o valor do byte portid na porta I/O */
void outpor(int portid, int value); /* escreve o valor da palavra portid na porta I/O)
#include <stdio.h>
#include <dos.h>
#define Data 0x378
#define Status 0x379
#define control 0x37a
unsigned char Bits;
outport(Data,Bits); /* dados de saída*/
Bits = inportb(Status); /*dados de entrada*/
QBASIC
O acesso à porta paralela pelo QuickBasic (QB ou QBasic) é feito pelas instruções IN e OUT.
IN(portid) "retorna com o byte lido como portid na porta I/O"
OUT portid, value "escreve na saída I/O o valor do byte portid".
portid pode ser qualquer número inteiro na faixa de 0 a 65535, enquanto que value pode ser qualquer inteiro na faixa de 0 a 255.
pdata = &H378
status = &H379
control= &H37A
OUT pdata, bits "dados de saída"
bits = INP(status) "dados de entrada"
CONCLUSÃO
Evidentemente, o leitor que domina as diversas formas de programação não terá dificuldades em desenvolver seus programas de controle de dispositivos via interfaces externas.
A posse de uma interface simples com LEDs igual à que já descrevemos em edições anteriores, pode ser muito útil no desenvolvimento para obter os pulsos nas saídas corretas bem como o tempo de duração desses pulsos.(Veja em outros artigos deste site quanto de corrente você pode obter nos pinos desta porta e como usá-los para acionar dispositivo externos.)
Obs: Este artigo foi escrito em 1998 quando a principal maneira de se interfacear o PC com o mundo exterior era a porta paralela. A USB ainda não existia e trabalhar com a porta serial não era tão simples. Este artigo é ainda atual, pois muitos podem ter computadores usados disponíveis em seus laboratórios com esta porta e utilizá-la para controlar seus projeto de automação, mecatrônica, robótica e muito mais, daí o artigo ainda ser muito atual.