You are on page 1of 12

Interfaceando Periféricos Através da Porta Paralela Padrão do PC

Indice

0 - Apresentação
1 - Apanhado Geral
2 - Convenções Usadas Neste Documento
3 - Endereços, Nomes, BIOS e DOS
4 - Endereços dos Registradores Internos das Portas Paralela
5 - Pinos, Sinais e Registradores de Bits
6 - Características Elétrica
7 - Como Imprimir em Uma Impressora Padrão
8 - Suporte de Impressão da BIOS
9 - As IRQ's
10 - Portas Bi-Direcionais
11 - Portas Avançadas
12 - Hardlock de Proteção Contra Cópias
13 - Transferência de dados Através da Porta Paralela
14 - Modos de Transferência e Cabos
15 - Capturando Dados Enviados Para a Impressora a Partir de Outro Computador
16 - Controlando Cargas Com as Saídas da Porta Paralela
17 - Lendo o Estado de Interruptores

0 - Apresentação:

Este documento foi feito visando aqueles que já possuem algum conhecimento de eletrônica ( digital e
analógica ) e programação. Aqui são explicados os princípios de funcionamento da porta paralela do computador tipo PC
a qual pode ser usada para trocar informações com periféricos diferentes de uma impressora. Se você tem um projeto na
qual a comunicação com um PC faça parte, então acredito que você achará este documento interessante.

Este material é baseado no documento "Interfacing the IBM PC Parallel Printer Port" do autor Zhahai Stewart
( zstewart@hisys.com ). Por ser de interesse geral, resolvi disponibilizar este material em português. Estou aberto para
sugestões e críticas relacionadas a este documento através do e-mail jjowens@del.ufms.br ( James J. Owens ).

--------------------------------------------------------------------------------------------------------------------------
ESCLARECIMENTO

UTILIZE AS INFORMAÇÕES DESTE DOCUMENTO POR SUA PRÓPRIA CONTA E RISCO. NÃO SEREI
RESPONSÁVEL POR QUAISQUER DANOS CAUSADOS DIRETA OU INDIRETAMENTE PELAS
INFORMAÇÕES CONTIDAS NESTE DOCUMENTO.
--------------------------------------------------------------------------------------------------------------------------

1 - Apanhado Geral

Este documento pode ser chamado de FAQ porque ele responde as perguntas mais comuns feitas sobre a porta
paralela do PC, no entanto sua formatação é mais próxima de um tutorial. Leia este documento pelo menos duas vezes
antes de solicitar maiores informações, as quais poderão ser dirigidas ao nosso grupo de discussão online.

Começando com o PC original em 1980, a IBM definiu um padrão para a porta paralela das impressoras. Esta
porta usa um connector fêmea DB-25S no computador , e, no cabo, um conector DB-25P macho e um conector
Centronics macho de 36 pinos, usado para ser conectado em impressoras paralelas de padrão Centronics. Esta diferença
nos conectores do cabo é possível porque apenas a mentade os pinos do conector Centronics são usados, o restante
constitui-se de conexões terra.
2 - Convenções Usadas neste Documento:

Um sinal elétrico "alto" ( em um pino ou num sinal ) é equivalente a um sinal TTL alto, ou seja, com um nível
de tensão entre +2,4V e +5V. Um sinal elétrico "baixo" é equivalente a um sinal TTL baixo, ou seja, com um nível de
tensão entre 0V e +0,8V.

Um dado "alto" é equivalente a 1, um dado "baixo" é equivalente a 0.

Em sinais com nomes como "-Strobe" ou "+Busy", o prefixo "-" implica que o sinal é "ativo em baixo", isto é, o
sinal está em seu estado ativo quando estiver eletricamente "baixo". O prefixo "+" singnifica "ativo em alto".

Os nomes dos sinais e pinos de dados são especificados como D0, D1, ..., D7, onde D0 é o bit menos
significativo e D7 o bit de dados mais significativo. Os bits de controle de saída, são chamados de C0, C1, ..., C5, onde
C4 é usado quando a IRQ é ativada e C5 é usado para a seleção da direção dos dados, quando do uso de portas bi-
direcionais. Os bits de status são chamados de S3 a S7.

Números em notação hexadecimal são precedidos por um "0x", de acordo com a convenção adotada pela
linguagem C.

3 - Endereços, Nomes, BIOS e DOS:

A IBM definiu três endereços base de I/O para a porta paralela. A porta paralela padrão usa o endereço de I/O
0x378, em versões mais antigas era usado o enderço 0x278, enquanto a porta paralela usada em adaptadores de vídeo
monocrmático usam o endereço 0x3BC.

A BIOS do PC armazena em memória RAM os endereços de até 4 portas paralelas, na forma de 4 words de 16
bits, a partir do endereço 0x408 (0x0000:0x0480) da RAM. Durante o BOOT, a BIOS procura pela existência de portas
paralelas nos endereços base 0x3BC, 0x378 e 0x278, nesta ordem, e armazena os endereços das portas encontradas,
consecutivamente, na memória RAM ( esta área é também chamada de "área de dados da BIOS" ). As entradas não
usadas são na maioria das vezes preenchidas com zero, no entanto, algumas BIOS armazenam nestas posições o endereço
base da primeira porta encontrada. A maioria dos programas ignoram esta tabela, preferindo usar a função da BIOS 0x17
( INT 0x17 ) ou funções do DOS para a obtenção do endereço das portas paralelas instaladas do computador.

A BIOS detecta estes endereçoes ecrevendo o número 0xAA para o registrador "Data Output" ( no endereço base
+ 0 ), lendo o dado no registrador "Data Feedback" ( vários endereços ), e comparando o valor lido com o valor 0xAA,
que, se for igual, indica a existência da porta. Este processo pode ser falho se os sinais da porta paralela são alterados
externamente por algum periférico ou se houver algum periférico usando o mesmo endereço de I/O da porta paralela. A
BIOS também conta o número de portas paralelas encontradas, armazenando em um contador nos dois bits de mais alta
ordem do byte 0x411 da memória RAM.

Aviso: Exatamente antes da tabela da BIOS que contém os endereços das portas paralelas, existe uma outra
tabela de 4 words contendo os endereços base das portas seriais instaladas ( COM ). Caso você tenha mais do que 4
portas seriais instaladas em seu computador poderá ocorrer uma sobreposição dos endereços das portas paralelas. Mas não
se preocupe, isso é bastante raro.

O DOS mapeia as portas paralelas como periféricos LPTn. O nome dado ao endereço de I/O varia dependendo
de se tratar de uma porta paralela contida em um adaptador monocormático ou não. A primeira entrada da BIOS, no
endereço 0x408, é a LPT1, a segunda entrada LPT2 e a terceira LPT3, se houver uma. O periférico do DOS chamado de
PRN nada mais é do que um sinônimo da LPT1, o que pode ser alterado através do comando MODE. A tabelas a seguir
apresenta as associações mais comuns.

Note que trocando os endereços na tabela de dados da BIOS, você estará trocando as associações entre as portas
paralelas e os nome LPT1, LPT2 ou LPT3. Os programas que fazem a troca da porta de impressão nada mais fazem do
que alterar o endereço das portas diretamente na tabela de dados da BIOS.

Associações Típicas entre endereços de I/O e Nomes do DOS


---------------------------------------------------------------------------------------------------------------------
Endereço Com Adaptador Monocromático Sem Adaptador Monocromático
0x3BC LPT1 -
0x378 LPT2 LPT1
0x278 LPT3 LPT2

Associações típicas entre nomes do DOS e endereços de I/O


-----------------------------------------------------------------------------------------------------------------------
Nome Com Adaptador Monocromático Sem Adaptador Monocromático
LPT1 0x3BC 0x378
LPT2 0x378 0x278
LPT3 0x278 -

4 - Endereços dos Registradores Internos das Portas Paralela:

Porta Leitura/Escrita Endereço de I/O Bits Função


----------------------------------------------------------------------------------------------------------------
Data Out Escrita Base + 0 D0 - D7 8 bits TTL de saída
Status InLeitura Base + 1 S3 - S7 5 bits TTL de entrada
Control Out Escrita Base + 2 C0 - C3 4 bits TTL com coletor em aberto
Control Out Escrita Base + 2 C4 interno, habilita IRQ
Control Out Escrita Base + 2 C5 interno, dado Tristate [ PS/2]
Data Feedback Leitura Base + 0 D0-D7 o mesmo que Data Out
Control Feedback Leitura Base + 2 C0-C3 o mesmo que Control Out
Control Feedback Leitura Base + 2 C4 interno, leitura do status da IRQ

Os registradores de Feedback são usados para fins de diagnósticos ( exceto em portas bidirecionais, onde Data
Feedback é usado para entrada de dados )

5 - Pinos, Sinais e Registradores de Bits:

<= Entrada Pino no Pino no Nome do Bit do Observações


=> Saída DB-25 Centronics Sinal Registrador
--------------------------------------------------------------------------------------------------------------------------------
=> 1 1 -Strobe C0- Envie um pulso > 0,5us
para enviar o dado
=> 2 3 Data 0 D0 Bit menos significativo
=> 3 3 Data 1 D1
=> 4 4 Data 2 D2
=> 5 5 Data 3 D3
=> 6 6 Data 4 D4
=> 7 7 Data 5 D5
=> 8 8 Data 6 D6
=> 9 9 Data 7 D7
<= 10 10 -Ack S6+ IRQ Enviar um pulso baixo de
aproximadamente 5us, depois de
aceitar a interrupção
<= 11 11 +Busy S7- Alto para Ocupado/Fora de
Linha/Erro
<= 12 12 +PaperEnd S5+ Alto para impressora sem papel
<= 13 13 +Select In S4+ Alto pra impressora selecionada
=> 14 14 -AutoFd C1- Envie um sinal baixo para avançar
uma linha
<= 15 32 -Error S3+ Baixo para Erro/Fora de
Linha/Sem Papel
=> 16 31 -Init C2+ Envie um pulso baixo com mais de
50us para iniciar a impressora
=> 17 36 -Select C3- Envie um pulso baixo para
selecionar a impressora
== 18-25 19-30, 33, 17, 16 Terra
Obs.: 1 - Alguns cabos, portas, ou conectores podem não conectar todos os pinos de terra. O pino 17 do
conector Centronics é o terra de chassi e o pino 16 é o terra lógico.
2 - As direções dos sinais são adotadas em relação ao computador, não da impressora. A linha de
IRQ ( -Ack/S6+ ) é acionada na transição para o nível positivo, sendo ativa apenas quando C4 for
1.

6 - Características Elétrica

Os pinos de saída de dados ( Data Out D0-D7 ) são interfaceados através de um latch octal 74LS374, o qual
pode fornecer até 2,6mA e drenar até 24mA de corrente em cada pino. Entre cada um dos pinos e o terra existe um
capacitor de 100nF visando reduzir transientes no sinal. O manual da IBM diz: "é essencial que o periférico conectado na
porta paralela não tente levar os pinos de dados ao terra", pois isto faz com que seja drenada mais corrente do que o
74LS374 possa fornecer sem danos.

A porta de entrada Data Feedback consiste de um buffer tri-state 74LS244, não invertido. Note que esta porta é
somente para diagnósticos - se em qualquer momento o buffer do 74LS244 não corresponder aos dados sendo enviados
através de Data Out, isto significa que houve um erro. A exceção ocorre em portas bi-direcionais que permitem que o
74LS374 fique em tri-state, permitindo que a porta Data Feedback seja usada como uma porta de entrada legítima.

Os sinais Control Out ( C0-C3) são manipulados por uma porta inversora 7405 com coletor em aberto, sendo
levado ao nível TTL alto de +5v através de resistores de 4,7K em pull-up. Todas os sinais são invertidos antes de saírem
através da porta, exceto C2, que é invertido duas vezes antes de ser colocado no pino 16 do DB25.

A porta de entrada Control Feedback também inverte todos os sinais, com exceção de C2, cujo sinal não passa
por nenhum inversor. É possível usar alguns ou todos os sinais de controle como entrada, bastando para isso programar o
sinal correspondente para um nível alto ( lembre-se que ocorre uma inversão nas portas C0, C1 e C3 ), uma vez que as
saídas do Control Feedback são com coletor em aberto e o nível de tensão mantido por um pull-up de resistores de 4,7K.
Desta forma, qualquer sinal alto aplicado externamente nestes pinos será mantido em nível alto até que o sinal aplicado
seja levado para um nível baixo. O sinal pode ser lido através do registrador de feedback correspondente.

Dentre os sinais de status, apenas o S7 é invertido.

A implementação LSI ( Integração em Larga Escala ), usado em quase todos os computadores de hoje, possui
um sério problema com descargas eletrostáticas ( incluíndo descargas estáticas ), também conhecido por ESD
( Eletrostatic Discharge ). O fabricante de componentes National e outros tem procurado adicionar internamente diversos
circuitos anit-ESD nos chips de controle das portas paralelas. No entanto, existem diversos fabricantes no mercado que
fornecem placas controladoras sem esses circuitos de proteção, de modo que não é raro que estas portas paralelas sejam
destruidas quando você, por exemplo, liga a impressora sem que o micro esteja ligado.

7 - Como Imprimir em Uma Impressora Padrão:

Isto é o que era definido para as impressoras matriciais da IBM, o que, ainda hoje, é compatível com a maioria
das impressoras com interface Centronics de 36 pinos.

a) Espere por um sinal baixo no +Busy ( +Busy baixo );


b) Envie os bits de dados através de Data Output (D0-D7) e mantenha o dado por
aproximadamente 0,5us
c) Envie um pulso através do -Strobe por pelo menos 0,5us

Após algum tempo a impressora enviará o sinal -Ack baixo por pelo menos 5us, indicando que o dado foi
recebido. Modifique os outros sinais de controle ou verifique os outros sinais de status como desejar.

8 - Suporte de Impressão da BIOS:

A ROM BIOS do computador detecta e inicializa as portas paralelas durante o boot. Ela também provê suporte
para impressão através da INT 0x17 ( indiretamente também através da INT 0x5 - "Print Screen" ). O processo de
detecção e armazenamento dos dados das portas paralelas foi discutido anteriormente.

Para controlar a impressora através da BIOS, faça uma chamada para a INT 0x17 com o número da porta de
impressão no registrador DX ( 0 a 3, indexado de acordo com as entradas na tabela de dados da BIOS no endereço 0x408,
conforme explicado anteriormente ), e a função desejada em AH.

As funções disponíveis são:

Valor Ação
----------------------------------------------------------------------------------------------------------
AH=0 imprima o caractere em AL
AH=1 reinicialize a porta, retornando o status em AH
AH=2 retorne o status da impressora em AH

Notas:

- A BIOS normalmente mantém o registrador Control Out com o valor 0x0C:


C5 = 0 saida habilitada ( para portas bidirecionais apenas )
C4 = 0 IRQ desabilitada
C3 = 1 pino -Select baixo ( impressora selecionada )
C2 = 1 pino -Init alto ( a impressora não está sendo inicializada )
C1 = 0 pino -AutoFeed alto ( sem avanço automático de linha )
C0 = 0 pino -Strobe alto ( sem strobe )

Assumindo que a impressora esteja pronta para imprimir, A BIOS imprime um caractere ( função AH=0 ) da
seguinte forma:

- Envia o caractere através de Data Out ( D0-D7 )


- Verifica o sinal S7 ( -Busy ) e caso ele esteja baixo ( nivel lógico 0 ) aguarda por
alguns milisegundos que este vá para o nível alto, isto é aguarda enquanto a
impressora está ocupada. Se este tempo for muito longo, a função da BIOS retornará
um erro de Time Out.
- Envia um sinal alto pra C0 ( -Strobe ) por alguns microsegundos ( pulso )

Para inicializar a impressora a BIOS faz o seguinte:

- Envia um sinal baixo através de C2 por uns 500us, isto é, envia um pulso baixo
através de -Init

A BIOS retorna o status da impressora ( função AH=1 ou AH=2 ) através do registrador AH. A tabela abaixo
descreve o significado de cada um dos bits retornados:

Bits do Descrição
Reg AH
-------------------------------------------------------------------------------------------------------------------
bit 0 Time Out, ocorre quando a impressora demora a responder
bit 1 Não usado
bit 2 Não usado
bit 3 Erro de I/O, pino S3 baixo
bit 4 Impressora Selecionada, pino S4 alto
bit 5 Sem Papel, pino S5 alto
bit 6 Acknolodge, pino S6 baixo
bit 7 Não Ocupado ( Not Busy ), pino S7 baixo

Os 5 bits de mais alta ordem nada mais são do que os bits lidos diretamente no registrador Status In, sendo os
bits 3, 6 e 7 invertidos em relação a este registrador, uma vez que eles são ativos em baixo. O bit 0 é gerado pela BIOS
após um tempo de Time Out, no qual a impressora não respondeu a solicitação de impressão.

9 - As IRQ's:

O adaptador primário de impressão original da IBM ( endereço base 0x378 ) e as portas de impressão que
acompanhavam os adaptadores monocromáticos de vídeo ( endereço base 0x3BC ) alocavam a linha de interrupção de
hardware 7 ( IRQ 7 ), a qual é manipulada pela INT 0x0F. Quando o bit C4 do registrador Control Out é alto então o sinal
-Ack ( pino 10 do DB 25, ou S6 ) será interconectado com a linha 7 de IRQ do computador. Desta forma, uma transição
de nível baixo para alto irá gerar um pedido de interrupção para o controlador de interrupções 8259 do PC. Os dois tipos
de adaptadores de porta paralela utilizavam a mesma interrupção e, uma vez que o bus ISA não é capaz de manipular
adequadamente o compartilhamento de interrupções, apenas uma destas portas podem ser usados ao mesmo tempo ( caso
contrário os chips 74LS125, responsáveis pela seleção interna do bus ISA podem "pifar" ).

Os adaptadores secundários de impressão ( endereço base 0x278 ) utiliza a IRQ 5 ( INT 0x0D ) para sua
interrupção de hardware. Observe que hoje em dia esta interrupção é "roubada" para outros usos, como vídeo EGA,
placas de som, placas de rede, e outros.

Aparentemente a idéia era fazer com que as IRQ's de impressão fizessem parte dos Drivers de Impressora
( programa responsável pela comunicação com a impressora ), da mesma forma que acontece com as IRQ's associadas as
portas de comunicação serial. Infelizmente a temporização típica de uma impressora não permitem o uso adequado destas
IRQ's, desta forma quase todos os programas de impressão para o DOS não usam a IRQ para imprimir. Hoje, com a
utilização de sistemas multitarefa, como o Windows 95/98, é feito um uso extenso da IRQ pelos drivers da impressora,
permitindo o gerenciamento de eventos de impressão enquanto reallizam outras tarefas com o computador. A IRQ da
porta de impressão também é bastante utilizado por alguns programas de transferência de dados para aumentar o
desempenho desta trasferência.

10 - Portas Bi-Direcionais:

A série de computadores IBM PS/2 acrescentou uma nova característica às portas paralelas: bi-direcionalidade.
Isto foi feito pelo acréscimo de mais um bit no registrador Control Out (C5), responsável por colocar a porta Data Out em
tri-state. Quando o bit C5 é 0, a porta Data Output opera como qualquer porta paralela, quando o bit C5 é 1 a porta Data
Out é colocada em tri-state, o que, essencialmente, é como se os pinos estivessem eletricamente disconectados, ou em
estado de alta impedância , não apresentando nem um nível baixo nem um nível alto. Isto permite que o registrador Data
Feedback seja efetivamente usado para ler sinais TTL externamente colocados na porta de dados ( D0-D7 ), fazendo com
que, seja usada para a leitura de dados.

É interessante observar que os IBM PC originais e seus clones tinham tudo o que é necessário para implementar a bi-
direcionalidade nas suas portas paralelas. O chip 74LS374 possui um pino "Enable" o qual pode ser usado para colocar
seus oito bits de saída em tri-state, no entanto, este pino era normalmente conectado ao terra, fazendo com que o chip
permanecesse permanentemente habilitado. O latch 74LS174 usado nos pinos C0-C4 é um latch de 16 bits, sendo seu
pino de entrada 6 conectado à linha 5 de seleção do bus. Este bit é chaveado ( latched ) quando você escreve para o
registrador Control Register, no entanto a saída correspondente ( Q6 no 74LS174 ) não é usada por nada. Se você cortar a
conexão com o terra no pino 1 ( /OE ) do 74LS374, e conectar este no pino 15 (Q6) do 74LS174, então, EURECA, você
terá uma porta paralela bi-direcional. Isto só vai funcionar nas antigas portas paralelas com componentes TTL discretos.
A teoria é que inicialmente a IBM tinha o plano de diponibilizar a bi-direcionalidade na porta paralela desde o início, mas
no último momento decidiu omitir esta característica.

Hoje a maioria das portas paralelas são bi-direcionais, mas montadas em um único chip LSI. No entanto, você
deve certificar-se de que sua porta é bi-direcional antes de tentar usá-la como tal.

Observe que por muito tempo as pessoas utilizaram as portas paralelas não bi-direcionais como uma porta de
entrada de dados. Para isso, basta enviar o dado 0xFF ( todos os bits em 1 ) para o registrador Data Out, desta forma,
qualquer sinal que seja externamente levado a um nível baixo poderá ser lido como um 0 no registrador Data Feedback,
isto porque o nível TTL baixo tende a ser mais "forte" do que um nível TTL alto, vencendo quando existem dois sinais
"brigando" na mesma linha. Um sinal externa alto, ou a ausência de sinal, manterá o pino correspondente em nível alto
( 1 ). Este procedimento NÃO É RECOMENDADO, pois causa estresse no 74LS374 ( ou equivalente ) além dos níveis
para o qual ele foi feito, podendo danificar o componente. De qualquer forma, algumas pessoas dizem que fazeram isso
por anos, sem problema. Observe que atualmente as portas paralelas são implementadas em um único chip LSI,
apresentando diferentes níveis de capacidade, margens de segurança e custos de substituição. Além disso esses chips
normalmente englobam outras funções, como controlador de vídeo, controlador de portas seriais ou controlador de disco.
Leve estes fatores em consideração antes de tentar este procedimento. Se sua porta paralela for constituida de portas TTL
discretas ( com um chip 74LS374, de preferência em soquete ), será fácil trocar o componente caso ele pare de funcionar.
Recomenda-se adquirir alguamas placas controladoras antigas ( com componentes discretos ) em lojas de "sucata" para se
poder fazer experiências com a porta paralela.

Uma última observação: se você utiliza sua porta paralela para leitura de dados, tenha certeza de colocar o
registrador Data Out em tri-state antes de conectar qualquer periférico que altere os níveis lógicos nos pinos de dados.
Quando eu estou trabalhando com este tipo de periféricos eu coloco um pequeno programa no meu AUTOEXEC.BAT
para colocar as portas paralelas em tri-state toda vez que inicio meu computador. Você também pode usar resistores em
linha para, pelo menos, diminuir a corrente nas portas para valores aceitáveis.

Steven M. Scharv ( scharf@mirage.nsc.com ) observou que alguns chips controladores de portas paralelas
travam o bit de seleção de direção ( C5 ) para evitar que algum programa "descuidado" troque acidentalmente a direção
da porta. Especificamente ele disse que o bit 7 do registrador PTR da controladora universal da National Semicondutores
deve ser 1 antes de você poder alterar a direção do bit de seleção da direção ( C5 ). Eu não tenho a documentação deste
chip e não sei qual é este registrador PTR; por hora considere apenas este alerta: alguns chips podem "travar" o bit de
controle de direção da comunicação, e isso pode variar de uma controladora para outra.

11 - Portas Avançadas:

Existem pelo menos dois tipos novos de portas paralelas, a EPP ( Enhanced Parallel Port - Porta Paralela
Avançada ) e a ECP ( Enhanced Cabability Port - Porta com Capacidades Avançadas ), com características mais
avançadas.

Para maiores informações sobre o funcionamento específico destas portas, consulte os documentos:
Interfaceando o PC Através da Porta Paralela Avançada ( EPP ) e Interfaceando o PC Através da Porta Paralela de
Capacidades Avançadas ( ECP ).

12 - Hardlock de Proteção Contra Cópias:

Os Hardlocks tipicamene monitoram a linha de dados em busca de um padrão de bits enviados sem o
correspondentes sinal de -Strobe. Isto é, o programa de proteção contra cópias envia diversos padões de bits para a linha
de dados, sem enviar qualquer pulso de -Strobe, fazendo com que a impressora ignore todos os dados enviados. Apesar de
este ser o método mais comum, nem todos os hardlocks funcionam desta maneira.

Existem casos de portas paralelas que colocam a porta em estado de tri-state entre cada byte enviado. O hardlock
que estiver conectado nesta porta, vai então encontrar um padrão de bits 0xFF entre cada dado enviado para este, sendo
para ele impossível reconhecer o padrão de dados usado para destravar o programa.

Os hardlocks também drenam corrente das linhas de sinal. Todos ele são projetados para operar com o mínimo
consumo, no entanto algumas vezes a porta paralela não é capaz de suprir esta corrente, fazendo com que o hardlock não
funcione.

Se a impressora conectada na porta funcionar normalmente e, no entanto, o hardlock não funcionar,


provavelmente o problema será com alguma incompatibilidade entre sua porta paralela e o hardlock.

13 - Transferência de dados Através da Porta Paralela:

Existem três formas básicas de conectar dois computadores através da porta paralela. A forma mais comum é
conectar os pinos D0 a D4 ( ou D3 a D7 ) de uma porta, aos pinos S3 a S7 da porta paralela do outro computador, e vice-
versa. Desta maneira, 4 bits de dados podem ser enviados de um computador ( através dos pinos D0 a D4 ou D3 a D7 ) e
lidos pela porta paralela do outro computador nos pinos S3 a S7. Um pino extra pode ser usado para a sincronização da
transferência, simulando um sinal Data Ready ( Dado Pronto ). Neste esquema, você deve lembrar-se que os sinais S3-S6
são lidos invertidos em relação aos bits que foram enviados através dos pinos D0-D3 do outro computador. O sinal S7 não
é invertido, mantendo o mesmo valor do bit enviado em D4 ( ou D3-D6 e D7 respectivamente, para o outro modo de
conexão ).

14 - Modos de Transferência e Cabos:

Modo 1A: Modo Nibble, usando a conexão dos pinos de Data Out ao Status In.
Esta versão funciona em todos os tipos de portas paralelas e é usada em diversos programamas comerciais de
transferência de dados.

Lado 1 Pino Direção Pino Lado 2 Conexão


---------------------------------------------------------------------------------------------------------------------
D0 2 => 15 S3+ direta
D1 3 => 13 S4+ direta
D2 4 => 12 S5+ direta
D3 5 => 10 S6+ direta
D4 6 => 11 S7- invertida
S7- 11 <= 6 D4 invertida
S6+ 10 <= 5 D3 dirata
S5+ 12 <= 4 D2 direta
S4+ 13 <= 3 D1 direta
S3+ 15 <= 2 D0 direta

Terra 25 == 25 Terra -

Modo 1B: Modo Nibble, usando os pinos Data Out conectados aos pinos Status In
Esta versão funciona com todos os tipos de portas paralelas.

Lado 1 Pino Direção Pino Lado 2 Conexão


---------------------------------------------------------------------------------------------------------------------
D3 5 => 15 S3+ direta
D4 6 => 13 S4+ direta
D5 7 => 12 S5+ direta
D6 8 => 10 S6+ direta
D7 9 => 11 S7- invertida

S7- 11 <= 9 D7 invertida


S6+ 10 <= 8 D6 direta
S5+ 12 <= 7 D5 direta
S4+ 13 <= 6 D4 direta
S3+ 15 <= 5 D3 direta

Terra 25 == 25 Terra -

Modo 1C: Modo Nibble, usando os pinos Data Out conectados aos pinos Status In. Neste modo são usados pinos
de controle adicionais para permitir um protocolo de transferência de dados mais eficiênte. Esta versão funciona com
todos os tipos de portas paralelas.

Lado 1 Pino Direção Pino Lado 2 Conexão


---------------------------------------------------------------------------------------------------------------------
D3 5 => 15 S3+ direta
D4 6 => 13 S4+ direta
D5 7 => 12 S5+ direta
D6 8 => 10 S6+ direta
D7 9 => 11 S7- invertida

S7- 11 <= 9 D7 invertida


S6+ 10 <= 8 D6 direta
S5+ 12 <= 7 D5 direta
S4+ 13 <= 6 D4 direta
S3+ 15 <= 5 D3 direta

C0- 1 <=>* 1 C0- direta


C1- 14 <=>* 14 C1- direta
C2+ 16 <=>* 16 C2+ direta
C3- 17 <=>* 17 C3- direta

Terra 25 == 25 Terra -

*Nota: Os bits de Control Out do receptor devem ser setados em alto, isto é, C0=0, C1=0, C3=0 e
C2=1. Desta forma, o receptor poderá ler os bits enviados pelo transmissor a partir do
registrador Control Feedback. Veja o item 6 ( Características Elétrica ) para maiores
informações
Modo 2: 8 bits, usando portas paralelas bidirecionais
Esta versão funciona somente com portas paralelas bidirecionais nas quais os pinos Data Out podem ser
colocados em estado de tri-state. O lado receptor deve estar em estado de tri-state para que os dados possam ser lidos no
seu registrador Data Feedback.

Lado 1 Pino Direção Pino Lado 2 Conexão


---------------------------------------------------------------------------------------------------------------------
D0 2 <=>* 2 D0 direta
D1 3 <=>* 3 D1 direta
D2 4 <=>* 4 D2 direta
D3 5 <=>* 5 D3 direta
D4 6 <=>* 6 D4 direta
D5 7 <=>* 7 D5 direta
D6 8 <=>* 8 D6 direta
D7 9 <=>* 9 D7 direta

C0- 1 => 13 S4+ invertida


C1- 14 => 12 S5+ invertida
C2+ 16 => 10 S6+ direta
C3- 17 => 11 S7- direta

S4+ 13 <= 1 C0- invertida


S5+ 12 <= 14 C1- invertida
S6+ 10 <= 16 C2+ direta
S7- 11 <= 17 C3- direta

Terra 25 == 25 Terra -

* Nota: Apenas em portas bi-direcionais; o lado receptor deve estar em tri-state, com o sinal C5
em 1.

Se duas portas bi-direcionais são conectadas desta forma, e se ambas estiverem habilitadas ao mesmo tempo
( logo após o boot por exemplo ) com sinais diferentes nos pinos de dados, então o 74LS374, ou equivalente, poderá
queimar. Seja cuidadoso. Uma forma de evitar este problema seria conectar resistores de 8K ou 10K em série com os
pinos de dados para limitar a corrente nestes casos (atualmente são usados resistores em linha ( SIP ) ou encapsulados no
formato DIP, os quais podem ser inseridos dentro do conector do DB25 utilizado) . Os resistores devem ter um valor alto
o suficiente para evitar uma sobrecorrente de uma porta para outra quando ambas estiverem habilitas, e, ao mesmo
tempo, baixos o suficiente para permitir que quando uma das portas estiver desabilitada ( tri-state ), o sinal TTL seja
reconhecido pela porta do receptor.

Modo 3A: 8 bits, usando os pinos do Control Output ( com coletor em aberto ) como entrada de dados. Esta
versão utiliza 4 pinos do Control Output mais 4 pinos do Status Input como entrada e funciona em todos os tipos de porta
paralela.

Lado 1 Pino Direção Pino Lado 2 Conexão


---------------------------------------------------------------------------------------------------------------------
D0 2 =>* 1 C0- invertida
D1 3 =>* 14 C1- invertida
D2 4 =>* 16 C2+ direta
D3 5 =>* 17 C3- invertida
D4 6 => 13 S4+ direta
D5 7 => 12 S5+ direta
D6 8 => 10 S6+ direta
D7 8 => 11 S7- invertida

C0- 1 <=* 2 D0 invertida


C1- 14 <=* 3 D1 invertida
C2+ 16 <=* 4 D2 direta
C3- 17 <=* 5 D3 invertida
S4+ 13 <= 6 D4 direta
S5+ 12 <= 7 D5 direta
S6+ 10 <= 8 D6 direta
S7- 11 <= 9 D7 invertida

Terra 25 == 25 Terra -

* Nota: Os pinos do Control Output utilizados devem ser programanos para o nível alto, isto é,
C0=0, C1=0, C3=0 e C2=1.

Modo 3B: 8 bits, utilizando os pinos do Control Output ( com coletor em aberto ) como entrada de dados. Esta
versão utiliza 3 pinos do Control Output e 5 pinos do Status In como entrada. Lembre que a porta Control Output é
bidirecional, ou seja, desde que mantida internamente em nível alto, poderá ser aplicado um nível baixo externamente e
este sinal poderá ser lido na porta Control Output Feedback.

Lado 1 Pino Direção Pino Lado 2 Conexão


---------------------------------------------------------------------------------------------------------------------
D0 2 =>* 1 C0- invertida
D1 3 =>* 14 C1- invertida
D2 4 =>* 16 C2+ direta
D3 5 =>* 15 S3+ direta
D4 6 => 13 S4+ direta
D5 7 => 12 S5+ direta
D6 8 => 13 S6+ direta
D7 9 => 11 S7- invertida

C0- 1 <=* 2 D0 invertida


C1- 14 <=* 3 D1 invertida
C2+ 16 <=* 4 D2 direta
S3+ 15 <=* 5 D3 direta
S4+ 13 <= 6 D4 direta
S5+ 12 <= 7 D5 direta
S6+ 10 <= 8 D6 direta
S7- 11 <= 9 D7 invertida
C3- 17 <=> 17 C3- direta ( saída compartilhada )

*Nota: As saídas do Control Output devem ser programadas para nível alto, isto é, C0=0, C1=0,
C2=1 e C3=0

15 - Capturando Dados Enviados Para a Impressora a Partir de Outro Computador:

Um computador com uma porta paralela bi-direcional, conectada com um cabo de Modo 2, é potencialmente
capaz de caputurar qualquer dado enviado para a porta. Para isso é necessário configurar a porta de dados e setar os
valores corretos no Control Output para simular uma impressora através das linhas de status do outro computador. Num
caso geral o problema está em detectar por software o pulso de -Strobe, que ocorre muito rapidamente. Você poderia
colocar um latch acionado por transição conectado ao -Strobe, desta forma você poderia manter o nível do -Strobe por um
tempo suficiente para a leitura. É necessário manter um controle sobre o -Busy para evitar a sobreposição de dados na
porta.

16 - Controlando Cargas Com as Saídas da Porta Paralela:

O controle de cargas através dos pinos de saída da porta paralela é muito simples, você pode usar os sinais TTL
do Data Out para controlar quaisquer circuitos de lógica TTL. Infelizmente as linhas da porta paralela não são capazes de
fornecer muita corrente ( no máximo 2,6mA ) e você deve tomar muito cuidado para não exceder este limite. Alguns
circuitos implementados em lógica LSI podem permitir mais ou menos corrente, mas em geral permitem menos.
Se você tiver uma fonte externa de +5v, existem duas opções: usar o Data Output para drenar até 24mA da sua
fonte de +5v ou usar chips de buferização para controlar níveis mais elevados de corrente ou tensão. Uma idéia seria usar
uma fonte externa de +5v ( regulada de preferência ) mais fotoaclopadores de estado sólido para fazer a interface com a
carga, permitindo o controle de tensões alternadas ( obviamente, é importante manter tensões alternadas bem isoladas dos
seus circuitos de lógica digital ).

Utilize resistores em série se você precisar limitar a corrente. Digamos que a sua carga seja constituida de LED's
( ou fotoaclopadores ) através dos quais você deseja passar 20mA. As saídas Dn possuem uma queda de tensão de
aproximadamente 0,7v para o dreno, o LED possui uma queda de tensão típica de 1,9v ( verifique as características do
LED que você está usando para verificar a queda de tensão ), assim: 5v - 0,7v - 1,9v = 2,4v. Deste modo, um resistor de:
2,4v/20mA = 120ohms deverá ser colocado em série com o LED para que a corrente se limite a 20mA.

Você também pode usar os pinos do Control Output. Eles não são capazes de fornecer muita corrente ( cerca de
1mA através dos resistores de 4,7K em +5v ). A corrente de dreno situa-se na ordem de 7mA. As características elétricas
de cada porta paralela variam bastante quanto ao Control Output, desta forma, seja cuidadoso em não ultrapassar os
limites máximos de corrente. A porta Control Output é indicado para a leitura de níveis TTL externos, sendo capaz de
operar diretamente com um fotoaclopador de estados sólido no modo de dreno.

Uma aplicação muito comum consisite no uso de dois latches 74ACT374, os quais podem fornecer até 48mA e
drenar até 64mA. Você pode conectar as 8 entradas dos latches aos pinos do Data Output e ligar o pino de Clock a dois
pinos do Control Output. No progrma, envie o dado através de Data Output, envie um pulso no pino Cn para um latch,
coloque outro dado na porta e envie um pulso para o outro latch 74ACT374 e pronto: você tem uma porta de 16 bits de
saída, capazes de fornecer até 48mA. É claro que você precisa de uma fonte externa de +5v para acionar alimentar os
latches.

18 - Lendo o Estado de Interruptores:

Existem diversas maneiras de ler os estado de interruptores através da porta paralela. Até quatro interruptores
( botoeiras, chaves de contato, red-switch, etc ) podem se diretamente conectados entre pinos do Control Output e o terra
( pinos 1, 14, 16 e 17 ), o programa de controle deve colocar todos os bits do Control Output em 1 e usar o Control Output
Feedback para ler o estado dos interruptores ( não esqueça de considerar a inversão existente nestes sinais ).

Outra forma seria utilizar 5 resistores de pull-up ( 4,7K ) entre as linhas de status e uma fonte externa de +5v. O
interruptor, conectado entre a linha de status e o terra, é utilizado então para levar o nível da linha de status para 0. Uma
desvantagem deste método é que você precisa utilizar uma fonte externa de +5v.
Você pode usar este mesmo esquema para as oito entrada das linha de dados de uma porta paralela bidirecional -
lembre-se de ter certeza de que as linhas de dados estão em tri-state antes de aplicar qualquer sinal externo, ou o
74LS374 ( ou equivalente ) irá estragar, isto é especialmente inportante após o boot do computador, onde o estado inicial
dos pinos de dados é desconhecido. Uma forma de resolver este problema é com a colocaçã de resistores limitadores de
corrente em série ( 1K ) com as linhas de dados. Melhor ainda seria colocar também resistores de pull-up nas linha de
dados.

--------------------------------------------------------------------------------------------------------------------------------
Versão 0.96 01/09/94 Zhahai Stewart zstewart@hisys.com
Versão 0.96.1 24/02/99 James J. Owens jjowens@del.ufms.br

You might also like