A Porta Paralela, no modo padrão, têm cinco entradas. Isso é útil quando você precisa capturar sinais do mundo externo para dentro do computador. Como por exemplo, saber se um sensor esta ativo ou não; se um alarme foi disparado, etc.
As cinco entradas através do conector DB25 são: Ack no pino 10, Busy no pino 11, Paper end no pino 12, Slct out no pino 13 e Error no pino 15. Portanto você poderá enviar para o computador cinco bits de uma só vez.
Os bits do byte de STATUS também são conhecidos como; S7 (Busy), S6 (Ack), S5 (Paper end), S4 (Slct out), e S3 (Error). A letra S significa registrador de STATUS, e o número significa a posição do bit no byte; juntos, formam um nome sugestivo para os sinais.
OBS.: Quando o nome de um bit de Status estiver com uma linha em cima, indica que o sinal será ativo com 0 (zero).
__
Ex.: S7 (Busy).
Usando as funções inportb() ou Recebe() da classe TPorta, já comentadas nesta página, você poderá ler o registrador de Status da Porta Paralela, e saber se o sinal em um determinado pino está alto ou baixo (0-zero ou 1-um) no sistema binário.
As funções inportb() e Recebe() lêem um byte através da Porta Paralela. Se você quiser saber se um determinado pino está com o sinal alto ou baixo, terá de converter este byte em binário para saber o estado do mesmo.
Nem todos os bits do byte recebido através das funções inportb() ou Recebe() são válidos, como eu já mencionei, são somente cinco as entradas no registrador de Status da Porta Paralela, e cada entrada está relacionada com um bit.
Ao ler o registrador de Status, os bits nas posições 0, 1 e 2 não devem ser levados em conta, porque não estão relacionados com nenhum pino do DB25, mesmo assim fará parte do byte recebido.
A tabela abaixo mostra o significado de cada bit do byte recebido, através das funções inportb( ) ou Recebe( ), usando o Circuito 4conectado à Porta Paralela. Observe que os bits, Ack, Paper end, Slct out e Error, trabalham de maneira normal, diferente de Busy, que só é ativado quando tiver um sinal 0 (zero) no pino 11:
As cinco entradas através do conector DB25 são: Ack no pino 10, Busy no pino 11, Paper end no pino 12, Slct out no pino 13 e Error no pino 15. Portanto você poderá enviar para o computador cinco bits de uma só vez.
Os bits do byte de STATUS também são conhecidos como; S7 (Busy), S6 (Ack), S5 (Paper end), S4 (Slct out), e S3 (Error). A letra S significa registrador de STATUS, e o número significa a posição do bit no byte; juntos, formam um nome sugestivo para os sinais.
OBS.: Quando o nome de um bit de Status estiver com uma linha em cima, indica que o sinal será ativo com 0 (zero).
__
Ex.: S7 (Busy).
Usando as funções inportb() ou Recebe() da classe TPorta, já comentadas nesta página, você poderá ler o registrador de Status da Porta Paralela, e saber se o sinal em um determinado pino está alto ou baixo (0-zero ou 1-um) no sistema binário.
As funções inportb() e Recebe() lêem um byte através da Porta Paralela. Se você quiser saber se um determinado pino está com o sinal alto ou baixo, terá de converter este byte em binário para saber o estado do mesmo.
Nem todos os bits do byte recebido através das funções inportb() ou Recebe() são válidos, como eu já mencionei, são somente cinco as entradas no registrador de Status da Porta Paralela, e cada entrada está relacionada com um bit.
Ao ler o registrador de Status, os bits nas posições 0, 1 e 2 não devem ser levados em conta, porque não estão relacionados com nenhum pino do DB25, mesmo assim fará parte do byte recebido.
A tabela abaixo mostra o significado de cada bit do byte recebido, através das funções inportb( ) ou Recebe( ), usando o Circuito 4conectado à Porta Paralela. Observe que os bits, Ack, Paper end, Slct out e Error, trabalham de maneira normal, diferente de Busy, que só é ativado quando tiver um sinal 0 (zero) no pino 11:
Tabela descritiva dos sinais de STATUS
Descrição/número dos pinos: | __ S7 | S6 | S5 | S4 | S3 | Nenhum pino relacionado nestas posições do byte | ||
11 | 10 | 12 | 13 | 15 | ||||
Byte lido em binário: | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
Byte lido em Decimal: | 126 |
CIRCUITO-4
Com o circuito-4 conectado à Porta Paralela você poderá enviar sinais para dentro de seu computador através das entradas E1 a E 5.
Para enviar um bit através da entrada E1, ligue-a direto ao negativo da fonte de alimentação (0v), ou instale um interruptor para ficar mais prático.
Como o circuito abaixo utiliza um Circuito Integrado buffer, que tem o poder de amplificar o sinal recebido, você poderá estender os cabos conectados as entradas (E1 a E5) a mais ou menos 20m de distância. Faça testes.
Circuito-4
Para enviar dados para dentro de seu computador através do circuito acima, use as entradas E1 a E5, com tensão elétrica negativa (0V) da fonte de alimentação em uso.
Para enviar um bit com valor (1), ligue a respectiva entrada ao negativo.
Para enviar um bit com valor (0), desligue a respectiva entrada do negativo.
Para enviar um bit com valor (1), ligue a respectiva entrada ao negativo.
Para enviar um bit com valor (0), desligue a respectiva entrada do negativo.
Lista de componentes:
1 (um) Cabo Paralelo - o mesmo utilizado pela impressora;
5 (cinco) Capacitores cerâmicos de (C1 a C5) todos de 100nF;
1 (um) Circuito Integrado 74LS541 (buffer);
1 (uma) fonte de alimentação estabilizada de 5 volts;
Geral: fios, fero de soldar, solda etc.
Código fonte em C/C++.
O programa abaixo, lê a Porta Paralela LPT1 ininterruptamente enquanto nenhuma tecla seja pressionada, e exibe na tela do computador, o valor recebido em decimal.
#include <stdio.h>#include <conio.h> #include <dos.h>int main(void){ unsigned char RetByte; //Para armazenar o valor recebido da Porta Paralela. while( ! kbhit( ) ) //Faz enquanto nenhuma tecla for pressionada. { RetByte = inportb(0x379); //Ler um byte da Porta Paralela (0x379)LPT1. printf("%u\n",RetByte); } } |
Código fonte em C/C++.
O programa abaixo, foi escrito para o Sistema Operacional MS-DOS, mas pode ser adaptado para outros sistemas.
Ele lê a Porta Paralela LPT1 ininterruptamente enquanto nenhuma tecla for pressionada, e exibe na tela do computador o estado de cada bit do byte recebido a cada ciclo do laço while().
Ele lê a Porta Paralela LPT1 ininterruptamente enquanto nenhuma tecla for pressionada, e exibe na tela do computador o estado de cada bit do byte recebido a cada ciclo do laço while().
#include <stdio.h>#include <conio.h> #include <dos.h> #define BIT0 0x01 // Não usado #define BIT1 0x02 // Não usado #define BIT2 0x04 // Não usado #define BIT3 0x08 // Error #define BIT4 0x10 // Slct out #define BIT5 0x20 // Paper End #define BIT6 0x40 // Ack #define BIT7 0x80 // Busy int main(void){ int x=10, y=5; //Coluna e Linha do vídeo unsigned char Byte; //Para armazenar o byte recebido da Porta Paralela clrscr(); gotoxy(30,1); printf("RECEBENDO SINAIS..."); gotoxy(30,20); printf("Pressione uma tecla para sair..."); gotoxy(x, y); printf("Bit 3 - Error....:"); gotoxy(x,y+1); printf("Bit 4 - Slct out.:"); gotoxy(x,y+2); printf("Bit 5 - Paper End:"); gotoxy(x,y+3); printf("Bit 6 - Ack:.....:"); gotoxy(x,y+4); printf("Bit 7 - Busy.....:"); while( ! kbhit() ) //Executa enquanto nenhuma tecla for pressionada. { Byte = inportb(0x379); //Ler um byte da Porta Paralela if((Byte & BIT3) == 0){ // Error: 0000-1000 gotoxy(x+20,y); printf("INATIVO"); }else{ gotoxy(x+20,y); printf("ATIVO "); } if((Byte & BIT4) == 0){ // Slct out: 0001-0000 gotoxy(x+20,y+1); printf("INATIVO"); }else{ gotoxy(x+20,y+1); printf("ATIVO "); } if((Byte & BIT5) == 0){ // Paper end: 0010-0000 gotoxy(x+20,y+2); printf("INATIVO"); }else{ gotoxy(x+20,y+2); printf("ATIVO "); } if((Byte & BIT6) == 0){ // Ack: 0100-0000 gotoxy(x+20,y+3); printf("INATIVO"); }else{ gotoxy(x+20,y+3); printf("ATIVO "); } if((Byte & BIT7) == 0){ // Busy: 1000-0000 gotoxy(x+20,y+4); printf("INATIVO"); }else{ gotoxy(x+20,y+4); printf("ATIVO "); } } clrscr(); } |
Fonte: rogercom.com
0 comentários:
Postar um comentário