comunicação pc - pc via porta paralela
TRANSCRIPT
Centro Federal de Educação TecnológicaCelso Suckow da Fonseca – UnED Maria da Graça
Curso Técnico de Automação IndustrialAlunos: Camilla Vidal, Luiz Filippi Graf, Monique Barros, Sarah Diniz e Tamires de Sá.
Professor: Cristiano FuschiloTurma: 3AATMI
Comunicação PC – PC Porta Paralela
Introdução Em 1981, a IBM introduziu nos seus PCs a porta paralela, inicialmente com o objetivo de conectar as impressoras. Porém, atualmente essa realidade é diferente, vários periféricos (como exemplos: scanner, câmeras de vídeo, unidade de disco removível...) utilizam dessa porta.
O padrão adotado pela IBM partiu de um fabricante de impressora, a Centronics (conector Anphend) que havia desenvolvido um conjunto de sinais de controle que funcionava muito bem na época. Isso significa que o cabo atual de impressora é um misto do conector DB25 (padrão IBM) e o conector Centronics de 36 pinos.
A partir do sistema operacional Windows 95 tornou-se possível efetuar comunicação entre dois computadores através da porta paralela, usando um programa nativo chamado "comunicação direta via cabo". Esta rede é muito simples de ser implementada, bastando apenas a utilização de um cabo DB25, conectado entre os dois computadores. É, no entanto, necessária uma configuração específica nos cabos para que a rede possa funcionar corretamente.
Porta Vantagens Desvantagens
Paralela • Mais fácil programação;• Mais rápida;• Interface de fácil
construção.
• Via de dados (8 pinos) unidirecional PC−interface;• Entrada de sinais para
interrupção (4 pinos);• Distância máxima pequena
entre PC− interface (15m);• Sensível a ruídos.
Vantagens X Desvantagens
Conectores
PINOS DESCRIÇÃO FUNÇÃO DIREÇÃO 1 STROBE DADOS PRONTOS PARA ENVIO SAÍDA2 D0 DADO MENOS SIGNIFICATIVO SAÍDA 3 D1 DADO SAÍDA 4 D2 DADO SAÍDA 5 D3 DADO SAÍDA 6 D4 DADO SAÍDA 7 D5 DADO SAÍDA 8 D6 DADO SAÍDA 9 D7 DADO MAIS SIGNIFICATIVO SAÍDA
10 ACK PERIFÉRICO AVISA QUE DADOS FORAM RECEBIDOS ENTRADA 11 BUSY PERIFÉRICO OCUPADO (NÃO RECEBE NOVOS DADOS) ENTRADA 12 PAPER END IMPRESSORA SEM PAPEL ENTRADA 13 SLCT OUT IMPRESSORA SELECIONADA ENTRADA 14 AUTO FEED AVANÇO DE LINHA SAÍDA 15 ERROR DISPOSITIVO INCAPAZ DE EXECUTAR TAREFA ENTRADA 16 INIT SINAL DE RESET SAÍDA 17 SLCT IN SELECIONAR IMPRESSORA SAÍDA
18-25 GNG CONECTADO AO TERRA
Conector DB25
Conector CentronicsPINOS DESCRIÇÃO
1 STROBE
2-9 DADOS
10 ACK
11 BUSY
12 PAPER END
13 SELECT OUT
14 AUTO FEED
15-18 NÃO CONECTATO
19-30 GROUND
31 INIT
32 ERROR
33 GROUND
34-35 NÃO CONECTATO
36 SELECT IN
PC 1 PC 2
PINOS PINOS
CABO DB25 (PC-PC)
Tenha sempre em mente, que o comprimento máximo do cabo paralelo é de somente 3m. Não utilize um comprimento maior que este, porque terá problemas com perda de dados se tiver transmitindo em alta velocidade. Se precisar de um cabo maior utilize-o com um amplificador de sinais.
Nome Endereços LPT1 Endereços LPT2 Descrição
Registro de Dados 378h 278h Envia um byte para a impressora
Registro de Status 379h 279hLer o Status da
impressora
Registro de Controle 37Ah 27AhEnvia dados de controle para a
impressora
Nome da Porta Endereço de memória Endereço da Porta Descrição
LPT1 0000:0408 378 hex. 888 dec. Endereço base
LPT2 0000:040A 278 hex. 632 dec. Endereço base
Endereços da porta paralela& Registradores
Envio de Dados
OUTPORTB (ENDEREÇO,VALOR)
OUTPORTB (0x378,1)
Pinagem (Dados)
ID Pino Decimal Binário
D7 9 128 10000000
D6 8 64 01000000
D5 7 32 00100000
D4 6 16 00010000
D3 5 8 00001000
D2 4 4 00000100
D1 3 2 00000010
D0 2 1 00000001
Cada bit do byte enviado à Porta Paralela está relacionado com um pino do DB25; e um fio do cabo paralelo, fisicamente. Pinos de 2 à 9 normais, nível lógico alto (1) ativo. A letra D significa registrador de DADOS, e o número significa a posição do bit no byte.
Pinagem (Controle)
ID NENHUMA C3 C2 C1 C0
PINO NENHUM 17 (Slct In) 16 (Init) 14 (Auto Feed) 1 (Strobe)
POSIÇÃO 7 6 5 4 3 2 1 0
BYTE 0 0 0 0 1 1 1 1
C0, C1, C3 são invertidos, ou seja, nível lógico baixo (0), ativo. Apenas o C2é normal, nível lógico alto (1), ativo. A letra C significa registrador de CONTROLE, e o número significa a posição do bit no byte.
Recebimento de Dados
VARIAVEL=INPORTB (ENDEREÇO)VAR = INPORTB (0x379)
Pinagem (Status)
ID S7 S6 S5 S4 S3 NENHUMA
PINO 11 (Busy) 10 (Ack) 12 (Paper End) 13 (Slct out) 15 (Erro) NENHUM
POSIÇÃO 7 6 5 4 3 2 1 0
BYTE 0 1 1 1 1 1 1 1
S7 é invertido, ou seja, nível lógico baixo (0) ativo. Os outros (S6, S5, S4 e S3) são normais, nível lógico alto (1) ativo. A letra S significa registrador de STATUS, e o número significa a posição do bit no byte.
Por questões de segurança algumas versões do windows não permitem o acesso direto ao hardware, é necessário um driver que "converse" com o kernel desse sistema para ter acesso às portas físicas do computador. Nas versões do windows 95/Me e 98 não há restrição, e o acesso pode ser direto, portanto, não há necessidade do uso de drives. A maneira mais fácil de resolver este problema é através da DLL: Inpout32.dll Dentro dessa DLL já estão inclusas as rotinas: in e out para acesso as portas, e também o driver que faz a comunicação com o núcleo do sistema operacional. Está tudo em um único arquivo de 32KB. Quando criar um programa executável baseado na DLL Inpout32 para acessar a Porta Paralela no windows, é importante que essa DLL esteja na mesma pasta do programa executável.
DLL
Veja um exemplo de mensagem de erro irritante, exibida quando tentamos executar um programa que não tem auxílio de um driver para rodar nas versões do windows NT/2000 e superiores.
#include <stdio.h> #include <conio.h>#include <stdlib.h> #include <windows.h>
Programação
typedef short _stdcall (*PtrInp)(short EndPorta);
typedef void _stdcall (*PtrOut)(short EndPorta, short valor);
Programação
int main(void){ HINSTANCE hLib; PtrInp inportb; PtrOut outportb; int op=0, valor=0;
hLib = LoadLibrary("inpout32.dll");
Programação
if(hLib == NULL){ printf("Erro. O arquivo inpout32.dll não foi encontrado.\n"); getch(); } inportb = (PtrInp) GetProcAddress(hLib, "Inp32");
if(inportb == NULL){ printf("Erro. A função Inp32 não foi encontrada.\n"); getch(); }
Programação
outportb = (PtrOut) GetProcAddress(hLib, "Out32");
if(outportb == NULL) { printf("Erro. A função Out32 não foi encontrada.\n"); getch(); }
Programação
printf("Deseja enviar agora?\n 1 - SIM;\n 0 - NAO."); scanf ("%d", &op); while (op != 0){ outportb(0x378,1); printf ("\nEsta enviando sinal!\n"); getch (); outportb(0x378,0); system("cls"); printf("Deseja enviar novamente?\n 1 - SIM;\n 0 - NAO."); scanf ("%d", &op); }
Programação (Enviando)
Programação (Recebendo)while (op != 0){ valor=inportb(0x379); while (valor != 1){ printf ("Nao esta havendo comunicacao!\n"); } if (valor == 1){ printf ("\n\nEsta havendo comunicacao!\n\n"); getch(); } system ("cls"); printf ("\nDeseja continuar?\n 1 - SIM\n 2 - NAO.\n"); scanf ("%d", &op); }
Programação
FreeLibrary(hLib); return 0; }
Dúvidas?
A Porta Paralela está ligada diretamente à placa mãe de seu computador. Muito cuidado ao conectar circuitos ele-trônicos a essa porta, pois, uma descarga elétrica ou um componente com a polaridade invertida, poderá causar danos irreparáveis ao seu computador, seja coerente.
ATENÇÃO!!!