Professor: Carlos Sica - 27/11/98
Palavras Chave: Impressora, Porta Paralela, Entrada e Saída
DESCRIÇÃO DA PORTA PARALELA DA IMPRESSORA
Cada dispositivo paralelo tem sua própria interface e uma interface paralela é controlada
através dos registradores de entrada e saída. O endereço desses registradores é diferente
para cada interface . No sistema operacional DOS, o BIOS tem uma área de dados que
contém o endereço base para cada conjunto de registradores. Endereço base é o endereço
do primeiro registrador, a partir do qual pode-se calcular os e ndereços seguintes. Para a
interface de impressora conhecida como LPT1 o endereço base dela está no endereço BIOS
0040:0008 e para a LPT2 no endereço 0040:000A.
Por exemplo, o endereço do registrador de saída de dados da LPT1, é o 378h, os próximos
registradores, estado e controle, vem seqüencialmente nos endereços 379h e 37Ah.
Portanto, o que conhecemos popularmente como porta paralela da impressora, na verdade é
um conjunto de três portas de comunicação de entrada e saída que permitem o
estabelecimento de um protocolo de comunicaç&at ilde;o entre o computador e a
impressora, sendo que, estas portas de comunicação também são conhecidas na literatura
como registradores.
Porta da impressora
saída estado controle
Figura 1. Relação da porta com os registradores
Descrição dos registradores
Registrador ou porta de saída (saída = impressora recebe do computador)
Este é o mais simples de todos, ele vai guardar a palavra de 8 bits a ser enviada para o
dispositivo externo, no caso da impressora, o código ascii da letra a ser impressa ou o
código gráfico a ser impresso.
Registrador ou porta de controle (saída = impressora recebe do computador)
Baixo (0)
Alto (1)
0
Normal
Causa saída de um byte de dados (strobe)
1
Normal
Pula linha (LF) automaticamente após um return
(CR)
2
2
Inicializa a porta da impressora
Normal
23
Impressora não selecionada
Seleciona a impressora
Desabilita a interrupção da impressão
Habilita interrupção
Não utilizado
Não utilizado
Bit
2
2
24
5
7
2 a2
Registrador ou porta de estado (entrada = impressora envia para o computador)
Baixo (0)
Alto (1)
Não utilizado
Não utilizado
2
Sinaliza erro
Operação normal
24
Bit
0
2
2 a2
3
Fora de linha (off line)
Em linha (on line)
5
Com papel
Sem papel
6
Reconhece que recebeu o caracter
Normal
7
Ocupada (imprimindo)
Livre
2
2
2
As Conexões
C
O
M
P
U
T
A
D
O
R
DB25
Símbolo
1
-strobe
2
Significado
Bit Sentido
0
↔
0
→
1
→
2
→
3
→
Centronics I
M
1
P
R
2
E
S
3
S
O
4
R
5
A
Avisa a impressora que o dado é válido
2
+data bit0
Saída de dados
2
3
+data bit1
Saída de dados
2
4
+data bit2
Saída de dados
2
5
+data bit3
Saída de dados
2
6
+data bit4
Saída de dados
2
4
→
6
7
+data bit5
Saída de dados
25
→
7
8
+data bit6
Saída de dados
2
6
→
8
9
+data bit7
Saída de dados
2
7
→
9
10
-acknowledge
Impressora reconhece caracter recebido
2
6
←
10
11
12
+busy
+out of paper (PE)
13
14
15
+select output
-auto feed
-error
Impressora avisa que esta imprimindo
Impressora avisa que está sem papel
Impressora indica que esta selecionada
Pula folha automaticamente
Impressora avisa que ouve erro
27
←
11
5
←
12
4
←
13
1
↔
14
3
←
32
2
↔
31
3
↔
36
2
2
2
2
16
-initialize printer
Inicializa impressora
2
17
-select input
Seleciona impressora
2
18-25
ground
Terra
Os sinais de "+" e "- " precedendo o sinal, significa respectivamente, lógica positiva ou
negativa (ativo quando alto ou quando baixo).
Os sinais são padronizados para todas as portas de conexão com a impressora, porém, a
maioria das impressoras, principalmente as modernas, não utilizam todos.
Strobe: é um pulso com largura de mais de 5 us (micro segundos)
Protocolo de comunicação entre o computador e a impressora
Passo 1 – Computador escreve no registrador de dados
Mov
al,dado
;al recebe dado a ser enviado
Mov
dx,378h
;ajusta endereço da saída de dados para a impressora
Out
dx,al
;envia dado para a porta de saída
Passo 2 – Computador avisa impressora que o dado está pronto na saída
Neste ponto deve-se levar em consideração, que a os bits de "impressora selecionada" e
"inicializa impressora" devem ser ligados, resultando em uma palavra binária igual a 0000
1100 ou 12 em decimal.
Mov
dx,37Ah
;ajusta endereço de saída de controle para a impressora
Mov
al,12
;ajusta o bit 20 (strobe) em ZERO para gerar uma
transição do nível baixo par alto, mantendo os bits 22 e
2 3 em nível alto
Out
dx,al
;envia o nível alto para a linha strobe
Mov
al,13
;ajusta o bit 20 (strobe) para nível alto
Out
dx,al
;envia o novo valor, gerando a transição, para encerrar o
sinal de sincronização (strobe)
19-30
Passo 3 – Verifica se a impressora terminou de imprimir um caractere
Mov
dx,379h
;ajusta endereço da entrada de estado (status) da
impressora
al,dx
;recebe byte que descreve o estado da impressora
test
al,80h
;pergunta se a impressora esta ocupada (busy)
jz
vv
;se sim, volta e aguarda até desocupar (busy=0)
vv: in
;chegar aqui significa que o caracter foi impresso
Ao sair de laço, espera-se que o caracter tenha sido impresso, porém alguns pontos devem
ser considerados: a impressora, em geral, utiliza um buffer que armazena um determinado
número de bytes antes de imprimir. Para experimentar este código com poucos caracteres,
aconselha-se repetir o processo enviando o caracter de controle 1010 (line feed), que
simbolizará o final do texto e a impressora deslocará a cabeça de impressão para a próxima
linha.
Opcional – Verifica se há erros através do registrador de estado
test
al,08h
;pergunta se a impressora esta com algum erro
jnz
erro1
;desvia para rotina de tratamento de erro
test
al,10h
;pergunta se a impressora esta em linha (on line)
jnz
erro2
;desvia para rotina de tratamento
test
al,20h
;pergunta se a impressora esta com papel (has paper)
jz
erro3
;desvia para rotina de tratamento
test
al,40h
;pergunta se a impressora reconhece que está
recebendo o caracter (acknowledges)
jz
erro4
;desvia para rotina de tratamento
UTILIZANDO A PORTA DA IMPRESSORA PARA CONEXÃO DO PC
COM DISPOSITIVO EXTERNO ESPECÍFICO
A porta paralela da impressora poder ser usada como um conjunto de entradas e saídas
digitais para interfacear o computador com outros dispositivos.
Esta interface, como discutido no capítulo anterior, é composta por um conjunto formado
por dois registradores de saída sendo um de 8 bits (dados) e um de 4 bits (controle) e,
finalmente, um de entrada de 5 bits (estado).
Escrever "1" no nos bits desta porta, significa fornecer o nível lógico TTL alto nos pinos do
conector DB25.
Tomaremos como base a porta LPT1 cujos endereços são:
Saída de dados
378h
8 bits
Entrada de estado
379h
5 bits
Saída de controle
37Ah
4 bits
Saída (micro para impressora: registrador de dados)
ENDEREÇO: 378H
27
26
25
24
23
22
21
20
21
20
Todos os bits são válidos
Entrada (impressora para micro: registrador de estado)
ENDEREÇO: 379H
27
26
25
24
23
22
Os três bits menos significativos são inutilizados e ajustados em 1.
Valor efetivamente
lido
Valor contido na porta 379h
11 10 12 13 15 decimal Hexa 27
26
25
24
23
22
21
20
0
0
0
0
0
135
87
1
0
0
0
0
1
1
1
0
0
0
0
1
143
8F
1
0
0
0
1
1
1
1
0
0
0
1
0
151
97
1
0
0
1
0
1
1
1
0
0
0
1
1
159
9F
1
0
0
1
1
1
1
1
0
0
1
0
0
167
A7
1
0
1
0
0
1
1
1
0
0
1
0
1
175
AF
1
0
1
0
1
1
1
1
0
0
1
1
0
183
B7
1
0
1
1
0
1
1
1
0
0
1
1
1
191
BF
1
0
1
1
1
1
1
1
0
1
0
0
0
199
C7
1
1
0
0
0
1
1
1
0
1
0
0
1
207
CF
1
1
0
0
1
1
1
1
0
1
0
1
0
215
D7
1
1
0
1
0
1
1
1
0
1
0
1
1
223
DF
1
1
0
1
1
1
1
1
0
1
1
0
0
231
E7
1
1
1
0
0
1
1
1
0
1
1
0
1
239
EF
1
1
1
0
1
1
1
1
0
1
1
1
0
247
F7
1
1
1
1
0
1
1
1
0
1
1
1
1
255
FF
1
1
1
1
1
1
1
1
1
0
0
0
0
007
07
0
0
0
0
0
1
1
1
1
0
0
0
1
015
0F
0
0
0
0
1
1
1
1
1
0
0
1
0
023
17
0
0
0
1
0
1
1
1
1
0
0
1
1
031
1F
0
0
0
1
1
1
1
1
1
0
1
0
0
039
27
0
0
1
0
0
1
1
1
1
0
1
0
1
047
2F
0
0
1
0
1
1
1
1
1
0
1
1
0
055
37
0
0
1
1
0
1
1
1
1
0
1
1
1
063
3F
0
0
1
1
1
1
1
1
1
0
0
0
0
071
47
0
0
0
0
0
1
1
1
1
1
0
0
1
079
4F
0
1
0
0
1
1
1
1
1
1
0
1
0
087
57
0
1
0
1
0
1
1
1
1
1
0
1
1
095
5F
0
1
0
1
1
1
1
1
1
1
1
0
0
103
67
0
1
1
0
0
1
1
1
1
1
1
0
1
111
6F
0
1
1
0
1
1
1
1
1
1
1
1
0
119
77
0
1
1
1
0
1
1
1
1
1
1
1
1
127
7F
0
1
1
1
1
1
1
1
As colunas com o título valor efetivamente lido, composto por cinco linhas de entrada,
representam os valores fornecidos pelo sistema externo e será lido pelo computador através
dos pinos especificados.
As colunas contidas no título valor constante na porta 379h, significam os valores lidos das
cinco linhas advAindas do sistema externo. Elas são colocadas, respectivamente, nos cinco
bits mais significativos da porta, os três bits menos significativos são mantidos com nível
alto, ou em baixo, caso a porta da impressora esteja configurada na BIOS como ECP, neste
caso, subtraia 7 de cada valor das colunas seis e sete.
Um detalhe: apenas o bit mais significativo passa internamente por um inversor, como
pode-se ver na tabela, quando o sistema externo envia (1) a porta 379h lê (0).
Saída (micro para impressora: registrador controle)
ENDEREÇO: 37AH
27
26
25
24
23
22
21
20
Os três bits mais significativos são inutilizados
Este registrador possui entrada digital de 5 bits, sendo que, 4 deles estão disponíveis no
conector DB25 da impressora. O quinto bit é utilizado para habilitar/desabilitar o pedido de
interrupção no nível 7 (ve ja capítulo sobre o controlador de interrupções 8259),
indisponível portanto, no conector.
Este registrador tem uma característica muito especial. Visto que, estas quatro saídas são
construídas utilizando o "coletor aberto" (veja literatura específica), torna-se possível
utilizá- las também como entradas, utilizando o seguinte artifício:
se os bits do registrador de saída forem ajustados com um valor que produz
o nível TTL alto na saída, estes podem ser levados para o nível baixo por um
sinal de entrada aplicado à esses pinos. Assim, um circuito exter no pode
controlar o nível desses pinos e eles seriam utilizados co mo entrada e, desta
forma, seus estados seriam sentidos pelo computador. Programando então,
os bits de saída para nível alto, eles podem ser utilizados como bits de
entrada nesta porta.
Construção do cabo para conexões genéricas
Figura 2. Conector e cabeamento
Enganando o computador para utilizar as funções de alto nível
Quando se utiliza uma função de escrita na impressora como o write do Pascal ou o printf
do C, elas disparam um processo de comunicação, pré-programado pela linguagem, entre o
computador e a impressora que envolve escrita e leitura na porta, bem como, espera de
sinais de controle da impressora, daí a necessidade de entender o protocolo de conversação
entre os dois. Como não podemos alterar as funções de uma linguagem, em geral utilizamos
outra de acesso direto aporta como a inport, outport ou port(), pois, quando você utiliza
estas últimas, apenas escreve ou le na porta ao seu total comando.
Porém, como desejamos "enganar" o sistema, basta ligar o pino correspondente (busy) a
resposta da impressora ao terra, daí vai parecer que tudo que se manda para a porta, a
impressora aceita e devolve o sinal dizendo que está pronta para receber o próximo dado.