Acesso à porta paralela do PC

Adaptado de: Eduardo D. D. Vilela -Revista Saber Eletrônica No. 319/99


Conteúdo


Introdução

O computador se comunica com o meio externo através de dispositivos acessados pela CPU, com endereçamentos específicos denominados “portas”. Um PC geralmente possui como configuração básica dois tipos de portas: a Paralela, usada principalmente por periféricos de acesso local que exigem maior capacidade de tráfego de informações (impressoras, scaners, etc.); e a Serial, usada principalmente por periféricos de acesso a longas distâncias (via linha telefônica/MODEM), ou dispositivos que não necessitam de grande tráfego de informações, como é o caso do mouse.

A capacidade de transmitir ou receber dados de forma paralela, ou seja, ler ou escrever vários bits simultaneamente, torna o uso da porta paralela mais adequado a aplicações “caseiras” de interfaceamento com circuitos eletrônicos.

Características Gerais do Hardware

A porta paralela (conexão para impressora) é um dispositivo de acesso externo relativamente fácil via programação, disponibilizando até 8 bits de saída, 4 de entrada, e outros 4 que podem operar como entrada ou saída. Ela é constituída de três registradores, endereçados seqüencialmente. Geralmente o endereço base (o endereço do primeiro registrador) é o 378h (o ‘h’ significa ‘em hexadecimal’), mas existem casos em que esse endereço é 278h. Para saber qual é o caso especificamente, deve-se consultar as configurações do PC. A menos que se tenha alterado manualmente essa configuração, um destes endereços deve corresponder à porta paralela.

O registro é a posição do mapa de memória em que a CPU escreve o dado. Assim, ao escrevermos no registro, o hardware controlador da porta paralela trata de enviar estes dados para os respectivos pinos do DB-25. Os registros são dispostos da seguinte forma na Tabela-1.

 

Tabela-1 - Endereçamento e formas de acesso aos registradores

End(1)

End(2)

Registro de

No. bits

Direção

Read/Write

378h

278h

Dados

8

OUT

R/W

379h

279h

Estado

5

IN

R

37ah

27ah

Controle

4

IN/OUT

R/W

 

A partir deste ponto, será utilizado o endereço 378h nas análises que seguem.

É importante atentar para o fato de que podem existir outros conectores DB-25 em um PC padrão. Por exemplo, e freqüente a presença de um conector DB-25 macho, que é uma segunda porta serial, e que não possui naturalmente nenhuma compatibilidade com a porta da impressora.

A Fig. 1 mostra como os sinais estão disponíveis através do conector DB-25. Os pinos 18 a 25 são todos GND (i.e. aterrados). Os sinais obedecem a níveis de tensão TTL, mas a capacidade de fornecer/drenar (source/sink) corrente varia, dependendo do tipo de circuito lógico que foi adotado na implementação do circuito da porta. A maioria das portas paralelas são atualmente implementadas em ASICs, podendo fornecer e drenar cerca de 12mA. Entretanto, existem Data Sheets que citam capacidades de Sink/Source 6mA, Sink 20mA/Source 12mA, Sink 16mA/Source 4mA, etc.

 

  Fig. 1 – Conector DB-25 da porta paralela

 

Dessa forma, por precaução, deve-se fazer experiências utilizando circuitos que forneçam/drenem no máximo 4 mA, satisfazendo assim o pior dos casos possíveis.

Caso seja necessária maior capacidade de corrente, deve-se utilizar buffers e até mesmo acoplamento óptico, assegurando a integridade dos circuitos do PC, independente do que possa vir a ocorrer no circuito externo.

 

Tabela-2 - Descrição dos Registros

Endereço 

Bit

Pino

Direção

378h

D7

9

OUT

D6

8

OUT

D5

7

OUT

D4

6

OUT

D3

5

OUT

D2

4

OUT

D1

3

OUT

D0

2

OUT

379h

S7

11

IN

S6

10

IN

S5

12

IN

S4

13

IN

S3

15

IN

37Ah

C4

-

IRQ7

/C3

17

IN/OUT

C2

16

IN/OUT

/C1

14

IN/OUT

/C0

1

IN/OUT

 

Descrição dos Registros

Data Register

(378h - saída de 8 bits)

Este é o registrador de saída de dados. Escrever 1 em um bit dele (endereço 378h - vide Tabela-2) resulta em nível TTL alto na saída. Como este registrador é um latch, pode-se ler o seu conteúdo, e a leitura resulta no último dado escrito. Entretanto, não se deve confundir latch com bidirecional: este registrador não pode ser utilizado como entrada.

State Register

(379h - entrada de 5 bits)

A leitura no endereço 379h retorna o estado dos 5 bits deste registrador. Dessa forma, é possível acessar o estado de um conjunto de chaves externas (circuito aberto ou curto-circuito), realizar a leitura de 5 bits de um conversor A/D que monitora um processo, enfim, levar a informação para dentro do PC e processá-la de forma conveniente.

Deve-se ter um conta que a entrada do bit S7 é invertida (representado por /S7), isto é, se houver nível alto na entrada, será lido ‘0’; e se houver nível alto na entrada, será lido nível lógico ‘1’. Isto é característica do circuito da porta, e deve ser considerado no momento de tratar as informações obtidas através da leitura da porta.

Outro ponto importante a respeito deste registro é que o pino 10 do Status Register (S6) foi definido para também ser utilizado pela impressora com pedido de interrupção (IRQ 7) à CPU do PC. A interrupção ocorrerá quando, no pino 10 (bit S6), houver uma transição de nível baixo para nível alto, e a habilitação da interrupção estiver ativa ( a interrupção estará habilitada se o bit 4 do control register estiver em nível lógico alto (nível 1).

Observe que não há um pino correspondente a este bit no conector DB-25. Portanto, esteja atento ao escrever neste registrador.

Assim sendo, para utilizar convenientemente o bit S6 como entrada, deve-se primeiro desabilitar a interrupção através do bit 4 do control register, pois caso contrário, quando ocorrer uma transição de forma a gerar a interrupção, a CPU do PC (‘pensando’ que foi uma impressora que gerou a interrupção) poderá ser interrompida e chamará a rotina do driver da impressora para tratar do problema, podendo até mesmo causar conflitos danosos aos circuitos que estiverem conectados na porta.

Control Register

(37Ah - bidirecional de 4 bits)

Como citado no item anterior, o bit 4 (C4) deste registro é usado para controlar a habilitação da interrupção IRQ7. Deve ser sempre programado para nível baixo, para que a interrupção não possa acontecer pela mudança de nível lógico na respectiva entrada do Status Register.

Os pinos que externam o conteúdo desse registro são circuitos TTL/open colector, o que torna possível utilizá-los como entrada ou saída. Estes pinos do circuito da porta paralela são dotados de resistores de pull-up internos de 4K7.

Dessa forma, para utilizar este registrador como saída, basta escrever no endereço 37Ah os 4 bits disponíveis.

Para utilizar como entrada, deve-se primeiramente fazer a escrita de forma a se ter um nível alto em todos os pinos de saída. Note que deve-se ter nível alto nos pinos, o que significa escrever nível alto no bit C2 e nível baixo nos bits C0, C1 e C3, pois a saída desses pinos é invertida. Setar os pinos de saída para nível alto permitirá os elementos externos forçarem ou não este nível para baixo, obtendo assim o valor instantâneo de cada pino ao se fazer a leitura do registrador.

Um último ponto a ressaltar é que este registro, quando trabalhando como saída, apresenta um pequeno retardo nas transições de nível baixo para alto devido ao circuito ser open colector, pois há um tempo de carga através dos resistores de pull up. Assim, sempre que possível, é conveniente utilizar esse registrador como entrada.

Resumindo, são disponíveis até 12 saídas (8 em 378h + 4 em 37Ah) e até 9 entradas (5 em 379h + 4 em 37Ah), o que já dá um bom número de possibilidades no desenvolvimento de controles externos (acionamentos e sensoreamentos).


Hosted by www.Geocities.ws

1