Você está na página 1de 14

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 In Leitura 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

Você também pode gostar