| //Funções
para leitura e escrita na Porta Paralela usando o DELPHI.
//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;
Const
Base = $378; //Endereço
base da porta LPT;
Dados = Base+0; //Endereço
para escrita dos dados;
Status = Base+1; //Endereço
para leitura dos dados;
Controle = Base+2;
//Endereço para escrita;
DadosEPP = Base+4; //ou
Base+0, lê e escreve no modo EPP.
BIT0 = $01; //
0000-0001
BIT1 = $02;
// 0000-0010
BIT2 = $04; //
0000-0100
BIT3 = $08; //
0000-1000
BIT4 = $10; //
0001-0000
BIT5 = $20; //
0010-0000
BIT6 = $40; //
0100-0000
BIT7 = $80; //
1000-0000
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 Recebe(PortaLpt:word):Byte;
//Recebe byte da P.Paralela.
Procedure
Envia(PortaLpt:word; Valor:byte); //Envia
byte p/ a P.Paralela.
end;
var Form1: TForm1;
var Lpt: TPorta;
implementation
{$R *.DFM}
//-----------------------------------------------------------
Procedure TPorta.Envia(PortaLpt:word; Valor:byte);
begin
asm
mov
dx,PortaLpt
mov
al,Valor
out dx,al end;
end;
//-----------------------------------------------------------
Function TPorta.Recebe(PortaLpt:word):Byte;
Var ret:byte;
begin
asm
mov
dx, PortaLpt
in
al,dx
mov
ret,al
end;
Recebe := ret;
end;
//-----------------------------------------------------------
procedure TForm1.Timer1Timer(Sender: TObject);
var Valor:Byte;
begin
Lpt.Envia(Controle,32);
//Habilita leitura EPP.
Valor := not Lpt.Recebe(DadosEPP);
//Lê o valor.
if (Valor and BIT0)
= BIT0 then //Verifica estado do primeiro
bit;
begin
Form1.Caption := 'Bit na posição 0 OK!';
beep();
end
else if (Valor and
BIT1) = BIT1 then //Verifica estado
do segundo bit;
begin
Form1.Caption := 'Bit na posição 1 OK!';
beep();
end
else if (Valor and
BIT2) = BIT2 then //Verifica
estado do terceiro bit;
begin
Form1.Caption := 'Bit na posição 2 OK!';
beep();
end
else if (Valor and
BIT3) = BIT3 then //Verifica
estado do quarto bit;
begin
Form1.Caption
:= 'Bit na posição 3 OK!';
beep();
end
else if (Valor and
BIT4) = BIT4 then //Verifica estado
do quinto bit;
begin
Form1.Caption := 'Bit na posição 4 OK!';
beep();
end
else if (Valor and
BIT5) = BIT5 then //Verifica estado
do sexto bit;
begin
Form1.Caption := 'Bit na posição 5 OK!';
beep();
end
else if (Valor and
BIT6) = BIT6 then //Verifica estado do
sétimo bit;
begin
Form1.Caption := 'Bit na posição 6 OK!';
beep();
end
else if (Valor
and BIT7) = BIT7 then //Verifica
estado do oitavo bit;
begin
Form1.Caption
:= 'Bit na posição 7 OK!';
beep(
);
end;
end;
//-----------------------------------------------------------
procedure TForm1.ButtonSairClick(Sender: TObject);
begin
Lpt.Envia(Controle,0); //Desabilita
leitura EPP.
Close; //Finaliza
o programa.
end;
end. |