| Introdução à Porta Paralela |
|||
| Por:
Antônio
Rogério Messias
|
|||
| Para uso particular ou educacional. Copyright(c) 1999-2006 ROGERCOM.COM Todos os direitos reservados. |
Introdução
Modelos de Porta Paralela
Extensão do Cabo Paralela
Endereços da Porta Paralela
Registradores
O conector DB25
O conector Centronics 36 pinos
Lista dos componentes utilizados para desenvolver
os circuitos
Classes e funções em C/C++,
para implementar seus programas
Acessando a Impressora através da
BIOS
Ligando e desligando aparelhos externos através
da Porta Paralela
Recebendo sinais externos através
da Porta Paralela
INTRODUÇÃO
A
porta paralela é uma interface de comunicação entre o computador e um periférico.
Quando a IBM criou seu primeiro PC (Personal Computer) ou Computador Pessoal,
a idéia era conectar a essa Porta uma impressora, mas atualmente, são vários
os periféricos que utilizam-se desta Porta para enviar e receber dados para
o computador (exemplos: Scanners, Câmeras de vídeo, Unidade de disco removível
e outros).
Se você conhece um pouco de eletrônica
e domina uma linguagem de programação como: C/C++/C++Builder, Pascal/Delph ou
mesmo o Visual Basic, poderá desenvolver um programa que controle um aparelho
conectado à Porta paralela, ou um programa de transferência de arquivos entre
dois computadores, utilizando um cabo paralelo como meio de transmissão. O seu
conhecimento de Eletrônica servirá para você desenvolver sua própria placa Eletrônica,
que será conectada ao DB25 da porta paralela.
Está página lhe fornecerá conhecimentos
sobre a porta paralela, que o fará compreender e utilizá-la, de uma maneira
não convencional, isto é, não somente para ser utilizada com uma impressora,
mas também como qualquer outro aparelho, que o usuário tenha conhecimento sobre
seu funcionamento, desejando controlá-lo através de seu Personal Computer, como
diz a IBM.
Atenção!
A
Porta Paralela está ligada diretamente à placa mãe de seu computador. Muito
cuidado ao conectar circuitos eletrônicos a essa porta, pois, uma descarga elétrica
ou um componente com a polaridade invertida, poderá causar danos irreparáveis
ao seu computador, seja coerente.
TERMO DE RESPONSABILIDADE
Não
me responsabilizo por nenhum dano causado tanto no equipamento,
como na montagem/instalação inadequada dos circuitos.
***
Boa
pesquisa...
MODELOS
DE PORTA PARALELA
Transmissão unidirecional
A
porta paralela SPP (Standard Parallel Port) pode chegar a uma taxa de transmissão
de dados a 150KB/s. Comunica-se com a CPU utilizando um BUS de dados de 8 bits.
Para a transmissão de dados
entre periféricos são usado 4 bits por vez.
Transmissão bidirecional
A
porta avançada EPP ( Enhanced Parallel Port ) chega a atingir uma taxa
de transferência de 2 MB/s. Para atingir essa velocidade, será necessário
um cabo especial.
Comunica-se com a CPU utilizando um BUS de dados de 32 bits.
Para a transmissão de dados entre periféricos são usado
8 bits por vez.
A porta avançada ECP (Enhanced Capabilities Port) tem as mesmas características que a EPP, porém, utiliza DMA (acesso direto à memória), sem a necessidade do uso do processador, para a transferência de dados. Utiliza também um buffer FIFO de 16 bytes.
EXTENSÃO
DO CABO PARALELO
A extensão do cabo para interligar um computador a um periférico, é de no máximo 8m. Na prática, utiliza-se um cabo com extensão menor. Quanto maior a extensão do cabo, maior é a interferência na transmissão dos dados.
ENDEREÇOS
DA PORTA PARALELA
O
seu computador nomeia as Portas Paralelas, chamando-as de LPT1, LPT2, LPT3 etc,
mas, a Porta física padrão de seu computador é a LPT1, e seus endereços são:
378h ( para enviar um byte de dados pela Porta), 378+1h (para receber um valor
através da Porta) e, 378+2h (para enviar dados). Às vezes pode está disponível
a LPT2, e seus endereços são: 278h, 278+1h e 278+2h, com as mesmas funções dos
endereços da porta LPT1 respectivamente.
| Nome
da Porta |
Endereço
de memória |
Endereço
da Porta |
Descrição |
|
| LPT1 |
0000:0408 |
378 hexadecimal |
888
decimal |
Endereço
base |
| LPT2
|
0000:040A |
278 hexadecimal |
632
decimal |
Endereço
base |
REGISTRADORES
Utilizando
a Porta Paralela conectada a uma impressora, os endereços terão nomes sugestivos,
como segue abaixo:
| Nome |
Endereços
LPT1 |
Endereços
LPT2 |
Descrição |
| Registro de Dados | 378h |
278h |
Envia
um byte para a impressora |
| Registro de Status | 379h |
279h |
Ler
o Status da impressora |
| Registro de Controle | 37Ah |
27Ah |
Envia
dados de controle para a impressora |
O
CONECTOR DB25
O
DB25 é um conector que fica na parte de trás do gabinete do computador, e é
através deste, que o cabo paralelo se conecta ao computador para poder enviar
e receber dados.
No DB25, um pino está em nível
lógico 0 quando a tensão elétrica
no mesmo está entre 0 à
0,4v. Um
pino se encontra em nível lógico 1
quando a tensão elétrica no mesmo está acima de 3.1
e até 5v.
A
figura abaixo mostra o conector padrão DB25, com 25 pinos, onde cada pino tem
um nome que o identifica:
DB25
que fica atrás do Micro
Conector
Macho do Cabo Paralelo

Foto
do conector DB25 macho do cabo Paralelo
Esquema de funcionamento do DB25 no modo SPP
O
CONECTOR MACHO CENTRONICS 36 PINOS
O
conector macho Centronics 36 pinos faz parte do cabo da impressora, é através
deste cabo que a impressora é conectada ao computador.
Quando desenvolvemos uma projeto que
utilize uma interface para conectarmos ao computador, poderemos utilizar um
conector centronics 36 pinos fêmea, isso faz com que nossa interface aproveite
o cabo da impressora, onde poderemos conseguir com facilidade em lojas de Informática.
A figura abaixo mostra o conector
Centronics 36 pinos e sua descrição:
| Número
do Pino |
Descrição |
| 1 |
Strob |
| 2
ao 9 |
Dados
(D0...D7) |
| 10 |
Ack |
| 11 |
Busy |
| 12 |
Paper End |
| 13 |
Select Out |
| 14 |
Auto Feed |
| 15
ao 18 |
Não
conectato |
| 19
ao 30 |
GROUND |
| 31 |
Init |
| 32 |
Error |
| 33 |
GROUND |
| 34
a 35 |
Não
conectato |
| 36 |
Select In |
LISTA
DOS COMPONENTES UTILIZADOS PARA DESENVOLVER OS CIRCUITOS
Para desenvolver os circuitos, você precisará adquirir os componentes eletônicos, e poderá encontrar em lojas que vendam materiais de Eletrônica, componentes como: cabo Paralelo, resistores, transistores, diodos, LEDs etc.
| Descrição |
Componentes |
|
Cabo Paralelo (o mesmo utilizado pela impressora) |
![]() |
| LEDs
|
|
| Resistores |
|
| Diodos |
|
| Capacitores |
|
| Circuitos
Integrados |
![]() |
Motor de
passo |
![]() |
| Transistores |
|
| Relê |
|
| Foto-transistors e |
![]() |
| Matriz de contato |
![]() |
| Distplay |
![]() |
| Fios
para a interligação dos componentes |
|
| Ferro
de soldar componentes, fonte de alimentação de 0 a 12v, solda, multímetro
etc. |
|
CLASSES
E FUNÇÕES EM C/C++, PARA IMPLEMENTAR SEUS PROGRAMAS
Utilize
a classe em C++ abaixo, caso queira desenvolver programas para serem executados
nos Sistemas Operacionais Windows.
Código fonte em C/C++
//Classe TPorta com seus métodos: Envia e Recebe |
Código
fonte em C/C++
// Objetivo: Converter um Byte em uma string binária de caracteres. //www.rogercom.com |
Já
para desenvolver programas no Sistema Operacional MS-DOS, utilize as funções
descritas abaixo, encontradas nos compiladores da Borland com: Turbo C e o Borland
C++.
|
ACESSANDO
A IMPRESSORA ATRAVÉS DO BIOS
Você
pode acessar a impressora através da interrupção de número 17h, fornecida pelo
BIOS (Basic Input
Output System), ou
Sistema Básico de Entrada e Saída, que executa as funções elementares de funcionamento
de seu computador.
O BIOS fornece três serviços através
desta interrupção: o serviço 00, que tem como objetivo
enviar um byte à impressora; 01,
inicializa a impressora, limpando seu buffer e o 02,
retorna ao computador o Status da impressora (um byte codificado em bits), informando
seu estado atual, ou seja, se tem papel ou não na bandeja, se está pronta para
receber dados do computador e outras informações de controle.
Código
fonte em C/C++.
O
exemplo abaixo mostra duas funções escritas em linguagem C++, utilizando o BIOS
para interagir com uma impressora. A primeira função tem o objetivo de enviar
um byte à impressora, e a outra, de ler seu status.
//Funções: PrintValor() e StatusPrint() |
LIGANDO
E DESLIGANDO APARELHOS EXTERNOS ATRAVÉS DA PORTA PARALELA
Como
já comentado, a Porta Paralela não é usada somente com uma impressora, você
pode desenvolver um circuito eletrônico e acoplá-lo a essa porta e, através
de um programa específico, enviar-lhe sinais digitais para controlá-lo.
Abaixo
temos três circuitos: o circuito-1, o circuito-2 e o circuito-3 que podem ser
acoplados à Porta Paralela através de um cabo Paralelo e, controlados por um
programa.
CIRCUITO-1
A princípio o objetivo do circuito-1 é de ligar e desligar oito LEDs, conectados
através de uma cabo à Porta Paralela.
No esboço abaixo, observe que o terminal
do catodo (K) dos LEDs estão ligados aos terminais dos resistores, que estes
por si, estão ligados através do cabo aos pinos do DB25. Se invertidos, o circuito
não funcionará. Observe a enumeração da pinagem do conector DB25.
Circuito-1
Lista
de componentes:
1 (um)
Cabo Paralelo - o mesmo utilizado pela impressora;
8 (oito) Resistores (R1 a R8)
todos de 470 ohm (amarelo, violeta e marrom);
8 (oito) LEDs (L1 a L8) comuns
de qualquer cor.
Geral:
fios, fero de soldar, solda etc.
Código
fonte em C/C++
O
programa abaixo pode ser compilado e executado para acender e apagar os LEDs
do circuito-1.
|
//www.rogercom.com |
Este
programa, envia à Porta Paralela oito bytes, um a cada vez que o usuário pressionar
uma tecla. A sequência de bytes geradas é vista na tabela abaixo:
| Decimal |
Hexadecimal |
Binário |
Pino/Fio
ativo (5V) |
Comentário |
| 128 |
80 |
10000000 |
9
- D7 |
Cada
bit do byte enviado à Porta Paralela está relacionado com um pino do DB5,
e um fio do cabo paralelo, fisicamente. Ao enviar um byte, que o(s) bit(s)
esteja(m) ligado(s) ou desligado(s), os LEDs acende(rão) ou apaga(rão)
conforme os estados dos bits. |
| 64 |
40 |
01000000 |
8
- D6 |
|
| 32 |
20 |
00100000 |
7
- D5 |
|
| 16 |
10 |
00010000 |
6
- D4 |
|
| 8 |
8 |
00001000 |
5
- D3 |
|
| 4 |
4 |
00000100 |
4
- D2 |
|
| 2 |
2 |
00000010 |
3
- D1 |
|
| 1 |
1 |
00000001 |
2
- D0 |
Para saber como o computador agrupa os bits num byte,
observe o esquema abaixo:
BYTE
No
esquema acima observe que cada nibble equivale a 4 bits; e a contagem dos bits
é feita da direita para a esquerda (0,1,2,3...).
CIRCUITO-2
Com
o circuito-2, você pode controlar através da Porta Paralela mais quatro aparelhos
eletro/eletrônico, enviando sinais para o registrador 37Ah. Ao enviar um byte
para este registrador, mantenha os 4 últimos bits (nibble alto) inalterados,
para não interferir no registrador 378h.
Quando for trabalhar com o endereço
do registrador 37Ah, tenha sempre em mente que para ativar os sinais Slct
In, AutoFeed e Strob,
será necessário colocar os bits em 0 (zero), porque eles trabalham de forma
invetida, 0 (zero) ativa, 1 (um) desativa. Somente o Init
trabalha na sua forma normal.
Os bits do byte de CONTROLE também
são conhecidos como; C3 (Slct In), C2
(Init), C1 (Auto Feed) e C0
(Strob). A letra C significa registrador de CONTROLE,
e o número significa a posição
do bit no byte; juntos, formam um nome sugestivo para os sinais.
OBS.: Quando o nome de um bit de Controle estiver com uma linha em cima, indica
que o sinal será ativo com 0 (zero).
__ __ __
Ex.: C3
(Slct In), C1 (Auto Feed) e C0 (Strob).
|
Descrição/número
dos pinos: |
nenhum pino relacionado | __ C3 |
C2 |
__ |
__ C0 |
|||
| 17 |
16 |
14 |
1 |
|||||
| Posição dos bits: | 7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| Byte em binário: |
0 |
0 |
0 |
0
|
1 |
1 |
1 |
1 |
| Byte em Decimal: |
15 |
|||||||
Circuito-2

Lista
de componentes:
1 (um)
Cabo Paralelo - o mesmo utilizado pela impressora;
4 (quatro) Resistores (R1 a
R4) todos de 470 ohm (amarelo, violeta e marrom);
4 (quatro) LEDs (L1 a L4) comuns
de qualquer cor.
Geral:
fios, fero de soldar, solda etc.
Código fonte em C/C++.
O
programa abaixo testa o circuito-2. O seu funcionamento é simples. Ao executá-lo,
em primeiro lugar será enviado um byte à Porta Paralela que ligará todos os
LEDs. Em seguida você pressionará uma tecla para enviar mais outro byte, agora
este ligará somente o LED 1 e assim sucessivamente, até seja enviado o último
byte, que apagará todos os LEDs.
|
//www.rogercom.com |
CIRCUITO-3
A princípio, o objetivo do circuito-3, é de ligar e desligar aparelhos eletro/eletrônicos como: motores, portas e portões elétricos, fechaduras elétricas, rádios, televisões, etc. Mas você pode muito bem através de um programa de computador controlar braços de robôs, temporizadores, controles automáticos e muito mais.
Circuito-3
No
circuito acima, o chip 74LS541 é usado para proteger a Porta Paralela de altas
correntes. Ele é alimentado com 5v, diferente da outra parte do circuito que
controla o relê, que precisa de 12v para ser acionado. Os contatos do relê devem
suportar 220v/10A, para que você possa acionar aparelhos de potência.
Neste circuito você pode controlar
até oito aparelhos simultaneamente, a partir das saídas S1 a S8.
Se você desejar controlar mais que um aparelho,
adicione mais circuitos, idênticos ao da saída S1, às demais saídas (S2 a S8).
Atenção!
O circuito acima
trabalha ligado a Rede elétrica 110/220v. Tome muito cuidado ao conectar os
componentes, um fio ligado na posição errada é fatal, tanto para você como para
seu computador. Seja coerente, se você não conhece o suficiente de eletro/eletrônica,
solicite a ajuda de um profissional.
Lista
de componentes:
1
(um) Cabo Paralelo - o mesmo utilizado pela impressora;
1
(um) LED verde;
1
(um) diodo 1N4148;
1
(um) Resistor R1: 2,2K ohm (vermelho, vermelho e vermelho);
1
(um) Resistor
R2: 470 ohm (amarelo, violeta e marrom);
1
(um) Transístor BD 137;
1 (um) Circuito integrado buffer
74LS541;
1 (um) Relê 12 volts na bobina
- cargas até 220v/10A
1
(uma) fonte de alimentação estabilizada de 5 a 12volts;
Geral: fios, fero de soldar,
solda etc.
RECEBENDO
SINAIS EXTERNOS ATRAVÉS DA PORTA PARALELA
A
Porta Paralela, no modo padrão, têm cinco entradas. Isso é útil quando você
precisa capturar sinais do mundo externo para dentro do computador. Como por
exemplo, saber se um sensor esta ativo ou não; se um alarme foi disparado, etc.
As cinco entradas através do conector
DB25 são: Ack no pino 10, Busy no pino 11, Paper end no pino 12, Slct out no
pino 13 e Error no pino 15. Portanto você poderá enviar para o computador cinco
bits de uma só vez.
Os bits do byte de STATUS também
são conhecidos como; S7 (Busy), S6
(Ack), S5 (Paper end), S4
(Slct out), e S3 (Error). A letra S
significa registrador de STATUS, e o número
significa a posição do bit no byte; juntos, formam um nome sugestivo
para os sinais.
OBS.: Quando o nome de um bit de Status estiver com uma linha em cima, indica
que o sinal será ativo com 0 (zero).
__
Ex.: S7 (Busy).
Usando as funções inportb()
ou Recebe() da classe TPorta,
já comentadas nesta página, você poderá ler o registrador de Status da Porta
Paralela, e saber se o sinal em um determinado pino está alto ou baixo (0-zero
ou 1-um) no sistema binário.
As funções inportb()
e Recebe() lêem um byte através da Porta
Paralela. Se você quiser saber se um determinado pino está com o sinal alto
ou baixo, terá de converter este byte em binário para saber o estado do mesmo.
Nem todos os bits do byte recebido
através das funções inportb() ou Recebe()
são válidos, como eu já mencionei, são somente cinco as entradas no registrador
de Status da Porta Paralela, e cada entrada está relacionada com um bit.
Ao ler o registrador de Status, os bits
nas posições 0, 1 e 2 não devem ser levados em conta, porque não estão relacionados
com nenhum pino do DB25, mesmo assim fará parte do byte recebido.
A tabela abaixo mostra o significado
de cada bit do byte recebido, através das funções inportb( ) ou Recebe(
), usando o Circuito 4 conectado à Porta
Paralela. Observe que os bits, Ack,
Paper end, Slct
out e Error,
trabalham de maneira normal, diferente de Busy,
que só é ativado quando tiver um sinal 0 (zero) no pino 11:
|
Descrição/número
dos pinos: |
__ S7 |
S6 | S5 | S4 | S3 |
Nenhum
pino relacionado nestas posições do byte |
||
| 11 |
10 |
12 |
13 |
15 |
||||
| Byte
lido em binário: |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
|
Byte
lido em Decimal: |
126 |
|||||||
CIRCUITO-4
Com
o circuito-4 conectado à Porta Paralela você poderá enviar sinais para dentro
de seu computador através das entradas E1 a E 5.
Para enviar um bit através da entrada
E1, ligue-a direto ao negativo da fonte de alimentação (0v), ou instale um interruptor
para ficar mais prático.
Como o circuito abaixo utiliza um
Circuito Integrado buffer, que tem o poder de amplificar o sinal recebido, você
poderá estender os cabos conectados as entradas (E1 a E5) a mais ou menos 20m
de distância. Faça testes.
Circuito-4
Atenção!
Para enviar
dados para dentro de seu computador através do circuito acima, use as entradas
E1 a E5, com tensão elétrica negativa (0V)
da fonte de alimentação em uso.
Para enviar um bit com valor (1),
ligue a respectiva entrada ao negativo.
Para enviar um bit com valor (0),
desligue a respectiva entrada do negativo.
Lista
de componentes:
1
(um) Cabo Paralelo - o mesmo utilizado pela impressora;
5 (cinco) Capacitores cerâmicos
de (C1 a C5) todos de 100nF;
1 (um) Circuito Integrado 74LS541
(buffer);
1 (uma) fonte de alimentação
estabilizada de 5 volts;
Geral: fios, fero de soldar,
solda etc.
Código
fonte em C/C++.
O
programa abaixo, lê a Porta Paralela LPT1 ininterruptamente enquanto nenhuma
tecla seja pressionada, e exibe na tela do computador, o valor recebido em decimal.
|
//www.rogercom.com |
Código
fonte em C/C++.
O
programa abaixo, foi escrito para o Sistema Operacional MS-DOS, mas pode ser
adaptado para outros sistemas.
Ele lê a Porta Paralela LPT1 ininterruptamente
enquanto nenhuma tecla for pressionada, e exibe na tela do computador o estado
de cada bit do byte recebido a cada ciclo do laço while().
|
//www.rogercom.com |

![]()
http://www.rogercom.com
©
Copyright, 1999-2006 ROGERCOM - Antonio Rogério Messias - rogercom@rogercom.com
Todos os Direitos Reservados - All Rights Reserved.