Programando a LPT


O modo mais fácil e mais usado de se controlar um dispositivo externo ou caseiro via o PC é com a porta paralela (LPT).
Aqui descreverei como programar e mostrarei algumas informações tecnicas a respeito da LPT.


Existem definidos 5 modos de se utilizar a LPT:

1-Modo SPP (Standard Parallel Port)
2-Modo EPP (Enhanced Parallel Port)
3-Modo ECP (Extended Capabilities Port)
4-Modo Nibble
5-Modo Byte

Neste documento somente falarei do modo SPP (comum desde as mais antigas LPT até as de hoje em dia).

A LPT utiliza um conector fêmea de 25 pinos (D-Type), a tabela abaixo mostra as funçoes de cada pino:
Numero
do Pino
Sinal Direção
In/Out
Registrador
1 Strobe
In/Out
Controle
2 bit 0
Out
Data
3 bit 1
Out
Data
4 bit 2
Out
Data
5 bit 3
Out
Data
6 bit 4 
Out
Data
7 bit 5 
Out
Data
8 bit 6 
Out
Data
9 bit 7
Out
Data
10 nAck
In
Status
11 Busy
In
Status
12 Paper-Out
In
Status
13 On-Line
In
Status
14 Linefeed after CR
In/out
Controle
15 Erro da Impressora
In
Status
16  Inicializa Impressora
In/Out
Controle
17 Seleciona/ Deseleciona Impressora
In/Out
Controle
18-25 GND
GND
tabela 1


Quando ligamos o computador a BIOS determina o numero de portas presente e um endereço para elas.
A primeira LPT será atribuido o endereço 378h-37Fh (LPT1), caso exista outra LPT ela estará no endereço 278h-27Fh (LPT2)

Programando a LPT

Saída de dados

Fazer com que um byte saia pela LPT é algo bem simples. Darei exemplos em linguagem C e em Assembly.
Quando ligamos a máquina, os 8 bits apresentam estado lógico LOW (0 volts) e podemos torná-los HI (5 volts) através da descrição abaixo.
Os Bits 0 à 7 (pinos 2 à 9) são ativados através de um byte que pode variar de 0 à 255 em decimal (00000000b à 11111111b)
Através da conversão de decimal para binário podemos selecional cada bit individualmente ou conjunto deles que queremos que apresente estado HI. A tabela abaixo mostra os valores decimais para os respectivos bits.

Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
1286432168421

Exemplo:
Assumindo que estamos trabalhando com a LPT1 (378h)
Suponha que queremos que o Bit 0 seja ativado, devemos então fazer o valor 1 (00000001b) sair pelo endereço da 378h.

Em linguagem C isso fica:
outportb(0x378,1);

Em Assembly:
mov dx,0378h
mov al,1
out dx,al

Para que o Bit 5 se torne HI, o valor ao invéz de 1 deve ser 32 (veja tabela acima), e assim por diante.
Para se ter varios bits no estado HI, basta somar os valores da tabela:
Ex. tornar HI os bits 6, 2 e 1. Soma-se 64+4+2 o que resulta em 70. (01000110b)
Em C:
outportb(0x378,70);

Em ASM:
mov dx,0378h
mov al,70
out dx,al


Entrada de dados

Para entrada de dados temos apenas 5 bits para utilizar (registradores de STATUS) ver tabela 1.
O procedimento é o reverso, usando o comando inportb en C ou IN em assembly.
Exemplo:
#include 	// prototipo para inportb
#include 

void main()
{
  int i;
  i=inportb(0x378 + 1); // Endereco Base +1 (status port)
	if (i & 128) printf("Bit7 - Printer busy\n");
	if (i & 64)  printf("Bit6 - Ack\n");
	if (i & 32)  printf("Bit5 - Paper out\n");
	if (i & 16)  printf("Bit4 - On-Line\n");
	if (i & 8)   printf("Bit3 - Erro\n");

	// OBS: Bit 0 a 2 não são utilizados
}



Cuidados

Não conecte nada diretamente à saída LPT, utilize algum C.I. para buffer nas entradas e saídas pois caso ocorra algum curto ou sobrecarga seu PC não seja afetado.

Inclusões

Pretendo ainda incluir aqui um esquema eletronico com os CI de buffers e transistores para carga maiores.
Isso será adicionado conforme o tempo permitir.
Caso tenha alguma dúvida ou pergunta, mande um E-mail.

Notas

Revisei e testei toda informação que está acima, e acredito não haver erros, mas caso haja algum me envie um e-mail para que este seja corigido.
As informações desta página concluem na utilização de equipamentos externos no seu micro, você deve entender um pouco de eletrônica para criar o circuito externo de Buffer e outros para conexão do(s) equipamentos. Eu não sou responsável por danos que a má criação destes equipamentos venha a lhe causar. Para maior segurança converse com alguem que entenda de eletrônica
Geral
Sugestões| E-Mail| Procura| Links| Novidades|
Emulação
Emuladores| Utilitários| Em_Desenvolvimento| Inf._Técnicas| Discussion_Boards| DIP_Switches| Pinagem_JAMMA| Patches| Diversos
Programação
Vídeo_Modo13| Cominicação_LPT| Joystick| Teclado| Mouse| Scroll| Formatos_de_Imagem| Tabela_de_Interrupções| Compiladores 

© PRADO 1996,1997,1998
Pagina Principal.
Sugestões / Comentários E-Mail Links para outros Sites O que há de novo Emuladore de Arcades Utilitários e Acessórios para os emuladores Emuladores em desenvolvimento Processadores, conexões, placas, etc.. Configurações DIP Conexão JAMMA Informações e pedidos diversos Atualizações / Patches VGA modo 13 LPT Progr Programação do Joystick Programação do Teclado Programação do Mouse Como fazer Scroll de tela Formatos PCX , BMP Interrupções MS-DOS / x86 Compiladores