Informações sobre o curso.
Ativando o modo
EPP
Por: Antônio Rogério Messias
Página 1 de 1     Home  Índice  
ATIVANDO O MODO EPP PARA ENVIAR E RECEBER DADOS 8 BITs POR VEZ
Para uso particular ou educacional.
Copyright(c) 1999-2006 ROGERCOM.COM
Todos os direitos reservados.


       A partir do PENTIUM 100MHz, o hardware de controle da Porta Paralela está onbord (já incluso na própria placa mãe).
       Temos outros modos de controle, além do antigo e mais utilizado modo de acesso SPP (Porta Paralela Padrão), o modo EPP. O modo EPP, é um modo bidirecional que utiliza 8 vias para enviar e receber os dados. São enviados ou recebidos 8 bits (1 byte) de cada vez. Para controlar a direção dos dados, é necessário manipularmos o Bit 5 (C5) do byte do REGISTRADOR DE CONTROLE, localizado na porta LPT1 (378+2)h ou na porta LPT2 (278+2)h. Se colocarmos esse bit no estado lógico baixo 0 (zero), poderemos como já estamos habituados, escrever no REGISTRO DE DADOS; LPT1 (378)h ou LPT2 (278)h, conforme a porta padrão instalada em seu computador. Para podermos receber 8 bits de uma só vez, o que precisamos fazer é colocar o Bit 5 (C5) no estado lógico alto 1 (um). Os dados no modo EPP também poderão ser escritos ou lidos no registrador LPT1 (378+4)h ou LPT2 (278+4)h automaticamente.
       De imediato, ao ativarmos o modo EPP para leitura, alterando o bit5 do Registrador de Controle para 1 (um), todos os bits do Registrador de Dados estarão no nível lógico alto 1 (um), portanto, para enviarmos dados através desse registrador devemos mandar sinais aos pinos (D0...D7) no nível lógico baixo 0 (zero). Nesse caso, a porta trabalhará com lógica invertida.

Estado inicial do byte lido no modo EPP

       Nenhuma experiência de envio de dados para dentro do computador deverá ser feita, usando as vias de dados do DB25 (D0, D1, D2...D7), sem antes ter certeza que seu computador disponibiliza o modo EPP e se ele está ativo.

Como fazer para verificar/ativar o modo EPP:

  1. Reinici o computador.
  2. Quando for exibida a mensagem "Press DEL for enter setup" (Pressione a tecla DEL) ou outra conforme for solicitada;
  3. Procure por um item semelhante a; "Onbord Parallel Mode";
  4. Selecione o modo EPP ou ECP, os dois trabalham da mesma forma;
  5. Salve as configurações.

Pronto, o modo EPP está ativo.

OBS.: Ao reiniciar o computador, se necessário, o Windows tentará instalar os Drivers apropriados, requisitando o CD-ROM de instalação.

Esquema de funcionamento do DB25 no modo EPP

No modo EPP alguns pinos do DB25 forma nomeados, veja a relação abaixo
Pinos
Descrição no Modo SPP
Descrição no Modo EPP
1
Strob
Write
14
Auto Feed
Data Strobe
16
Init
Reset
17
Slct In
Address Strobe
10
Ack
Interrupt
11
Busy
Wait

 

O esboço abaixo identifica o bit que deverá ser manipulado para ativar/desativar o modo de leitura EPP.

Como ler/escrever no modo EPP

 

  Código fonte em C/C++.
       O programa abaixo, lê a Porta LPT1 no modo EPP ininterruptamente enquanto nenhuma tecla seja pressionada, e exibe na tela, o valor recebido do registrador de Dados, em decimal.

//Leitura e Escrita no modo EPP
//Por Antonio Rogério Messias
//www.rogercom.com
//rogercom@rogercom.com
//--------------------------------------------------------

#include "iostream.h"
#include "dos.h"
#include "conio.h"
#define BIT0  0x01 // 0000-0001  C0 - Strob
#define BIT1  0x02 // 0000-0010  C1 - Auto Feed
#define BIT2  0x04 // 0000-0100  C2 - Init
#define BIT3  0x08 // 0000-1000  C3 - Slct In
#define BIT4  0x10 // 0001-0000
#define BIT5 0x20 // 0010-0000  Habilita o modo EPP p/ Leitura/Escrita
#define BIT6  0x40 // 0100-0000
#define BIT7  0x80 // 1000-0000
#define LPT                          0x378  /LPT1. LPT2 = 0x278.
#define REGDADOS            LPT+0  //ou LPT+4.
#define REGSTATUS           LPT+1
#define REGCONTROLE     LPT+2
int main(void)
{
      int ByteRecebido; //Variável para armazenar o byte lido do REGDADOS.
      clrscr( ); //Limpa a tela.
      outportb(REGCONTROLE, BIT5); //Habilita modo EPP para leitura; BIT5=00100000.
      while( !kbhit( ) ){ //Executa enquanto nenhuma tecla for pressionada.
             ByteRecebido = inportb(REGDADOS); //Lê o byte (D0...D7).
             gotoxy(10,5); //Posiciona coluna, linha na tela.
             cout << "Leitura do registro de Dados: " << ByteRecebido;
      }
      outportb(REGCONTROLE, 0); //Desabilita modo EPP para leitura; 00000000.
      return 0;
} //FIM.

 

  Código fonte em DELPHI.
       O programa abaixo, escrito em Delphi, lê a Porta LPT1 no modo EPP ininterruptamente enquanto nenhuma tecla seja pressionada, e exibe na tela, o valor recebido do registrador de Dados, em decimal.

//Leitura e Escrita no modo EPP
//Por Antonio Rogério Messias
//Compile no DELPHI.
//www.rogercom.com
//rogercom@rogercom.com

//--------------------------------------------------------

unit Unit1;
interface
uses
       Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type
       TForm1 = class(TForm)
       Timer1: TTimer;
       Label1: TLabel;
       ButtonSair: TButton;
       procedure Timer1Timer(Sender: TObject);
       procedure ButtonSairClick(Sender: TObject);
       private { Private declarations }
       public { Public declarations }
end;

type
       TPorta = class(TForm)
       Function RecebeDadosEPP(PortaEnd:Word):Byte;
       Procedure EnviaControle(PortaEnd:Word; Valor:byte);
end;

var Form1: TForm1;
var Porta1: TPorta;

implementation
{$R *.DFM}
//-----------------------------------------------------------
Procedure TPorta.EnviaControle(PortaEnd:Word; Valor:byte);
begin
      asm
           mov dx, PortaEnd
           mov al, Valor
           out dx, al
end;
end;

//-----------------------------------------------------------
Function TPorta.RecebeDadosEPP(PortaEnd:Word):Byte;
Var ret:byte;
begin
      asm
          mov dx, PortaEnd
          in al, dx
          mov ret, al
end;
RecebeDadosEPP := ret;
end;
//-----------------------------------------------------------
Procedure TForm1.Timer1Timer(Sender: TObject);
var Valor:Byte;
begin
          Porta1.EnviaControle($37A,32); //Habilita leitura EPP (0010-0000).
          Valor := Porta1.RecebeDadosEPP($378); //Lê o valor.
          Label1.Caption := IntToStr(Valor); //Exibe valor lido.
end;
//-----------------------------------------------------------
Procedure TForm1.ButtonSairClick(Sender: TObject);
begin
       Porta1.EnviaControle($37A,0); //Desabilita leitura EPP (0000-0000).
       Close; //Finaliza o programa.
end;
end.

 


Volta à página principal. 
 

Índice dos artigos.

http://www.rogercom.com
© Copyright, 1999-2006 ROGERCOM - Antonio Rogério Messias - rogercom@rogercom.com
Todos os Direitos Reservados - All Rights Reserved.