Hola amigo [JoseFco], bienvenido al foro abierto, como acostumbramos te invito a que leas nuestra
guia de estilo, por otro lado, necesitamos mas datos para una respuesta adecuada, por ejemplo, que errores te muestra al compilar el programa.
Otra de las cosas que te sugiero es que uses las etiquetas delphi para que el código se vea mejor.
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Timer1: TTimer;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Edit1Change(Sender: TObject);
private
public
end;
var
Form1: TForm1;
data,status:byte;
const
base = $3f8;
lcr = 3;
dll = 0;
dlh = 1;
lsr = 5;
implementation
{$R *.dfm}
Procedure Initserial;
begin
asm
mov dx,base+lcr; {address line control register}
mov al,$80 ; {10000000b = access bit divisor lacht}
out dx,al;
mov dx,base+dll; {address divisor lacht low byte}
mov al,$30 ; {DLLB = 30h}
out dx,al;
mov dx,base+dlh; {address divisor lacht high byte}
mov al,$00 ; {DLLH = 00h}
out dx,al;
{In this case Port Serial have};
{ baud rate = 2400 bps}
mov dx,base+lcr;{address line control register}
mov al,$03 ; {00000011b =}
out dx,al ; {bit 7=0, access to Rx buffer & Tx;
{bit 6=0, set break disable;
{bit 5-4-3=000, no parity;
{bit 2=0, one stop bit;
{bit 1-0=11,data lenght 8 bit}
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
initserial;
timer1.enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Repeat
asm
mov dx,base+lsr; { address line status register }
in al,dx
and al,$01 ; {LSR = 00000001b, deteksi bit 0}
mov status,al ; {bit 0 = data ready}
end;
until status = $01 ;
Receive_Data_Serial;
edit1.text:=inttostr(data);
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
edit1.text:=inttostr(data);
end;
end.
Salud OS