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.