Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-12-2007
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Mi primer programita en Delphi

Hola amigos.

Estoy tratando de copilar este programita y me da tres errores.

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
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
data,status:byte;
const
base = $3f8;{base address port serial}
lcr = 3; {line control register}
dll = 0; {divisor lacht low byte}
dlh = 1; {divisor lacht high byte}
lsr = 5; {line status register}
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 ;{ jika bit 0 = 1 then data ready}
Receive_Data_Serial;
edit1.text:=inttostr(data);
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
edit1.text:=inttostr(data);
end;
end.


Creo que tengo algunas cosas fuera de lugar.Cuales son?

Gracias por la ayuda.

Última edición por dec fecha: 29-12-2007 a las 17:18:07.
Responder Con Cita
  #2  
Antiguo 29-12-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
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
     { Private declarations }
       public
     { Public declarations }
  end;
 
var
  Form1: TForm1;
  data,status:byte;
 
const
  base = $3f8;{base address port serial}
  lcr = 3; {line control register}
  dll = 0; {divisor lacht low byte}
  dlh = 1; {divisor lacht high byte}
  lsr = 5; {line status register}
 
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 ;{ jika bit 0 = 1 then data ready}
  Receive_Data_Serial;
  edit1.text:=inttostr(data);
end;
 
procedure TForm1.Edit1Change(Sender: TObject);
begin
  edit1.text:=inttostr(data);
end;
 
end.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 29-12-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Mirando el código, veo una pequeña omisión, te falta un end en el procedimiento InitSerial, es por eso la importancia de poner las etiquetas.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #4  
Antiguo 29-12-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
De estas cosas no se pero por curiosidad lo he copiado a ver que hace.
Bueno, los errores que daba se eran mas que nada de escritura, pero quedo uno, el programa compila y corre, pero inmediatamente se detiene y da este error:
Cita:
exception class EPrivilige with message 'Privileged instuction' Process stopped.
Aqui esta el codigo:
Código Delphi [-]
unit Unit1;

interface

uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  data,status: byte;

const
  base = $3f8;{base address port serial}
  lcr = 3; {line control register}
  dll = 0; {divisor lacht low byte}
  dlh = 1; {divisor lacht high byte}
  lsr = 5; {line status register}

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;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   initserial;
  timer1.enabled:=true;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
   edit1.text:=inttostr(data);
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 ;{ jika bit 0 = 1 then data ready}
 // Receive_Data_Serial;
  edit1.text:=inttostr(data);
end;

end.
Saludos
Responder Con Cita
  #5  
Antiguo 29-12-2007
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Gracias egostar, Caral y al amigo LGarcia.

Ya copile el programita siguiendo las instruciones del amigo LGarcia y lo que el codigo que me facilito Caral.
Esta rodando bien, por el momento no me da error alguno.Lo rodare con el microcontrolador y su respectivo programita a ver que pasa.

Les dejo saber como fue la cosa y que es lo que hace, el resto de este proyecto de estudio.


Saludos y mil gracias.
Responder Con Cita
  #6  
Antiguo 30-12-2007
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Mi abuela decia que lo que no funciona se tira a la basura y eso es lo que hare con este programita

Instale el Package de CPortLib y me hace falta una ayudadita.
Quiero usar dos componentes TComled uno que trabajara cuando el puerto este abierto y el otro cuando no encuentre respuestas del microcontrolador,quiero que me de un error.Se puede hacer esto?



Saludos.
Responder Con Cita
  #7  
Antiguo 02-01-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola amigos.

Que tiene este codigo mal?





Código Delphi [-]
procedure TForm1.FormCreate( Sender: TObject );
begin
EnumPorts( cbPorts.Items );
if cbPorts.Items.Count > 0 then
cbPorts.ItemIndex := 0; // show first available port

end;
Un Saludo y Feliz Año 2008.
Responder Con Cita
  #8  
Antiguo 02-01-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
Mi abuela decia que lo que no funciona se tira a la basura y eso es lo que hare con este programita

Instale el Package de CPortLib y me hace falta una ayudadita.
Quiero usar dos componentes TComled uno que trabajara cuando el puerto este abierto y el otro cuando no encuentre respuestas del microcontrolador,quiero que me de un error.Se puede hacer esto?
Bueno, si vas a usar un componente para leer el puerto serial yo te recomiendo el Async Pro.

Para verificar el estado de las comunicaciones, podriamos "jugar" con las señales DTR y DSR en los TComLed para verificar si el estado de la señal está lista para aceptar datos.

Cita:
Empezado por JoseFco Ver Mensaje
Hola amigos.

Que tiene este codigo mal?
No se si EnumPorts sea una función del mismo componente CPortLib, si es así creo que deberia ser de esta forma:

Código Delphi [-]
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  EnumComPorts(cbPorts.Items);
  if cbPorts.Items.Count > 0 then
     cbPorts.ItemIndex := 0; // show first available port
end;

Te sugiero que trates de comentarnos el error que te muestra para poder ayudarte mejor.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 02-01-2008 a las 04:41:07.
Responder Con Cita
  #9  
Antiguo 04-01-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Saludos egostar.

Creo que EnumPorts es un API.No creo que sea parte de TComPort.
El codigo es asi como lo pucistes, lo he mirado en tres diferentes programas y esta exactamente asi escrito.Tengo que estudiar el EnumPorts un poco mas profundo.Por el momento solo se que su funcionamiento es chequear los puertos disponibles y ponerlos en un formulario.
Tengo una preguntica. Cuando ponemos.
Código Delphi [-]
uses
Windows,Messages,SysUtils,Classes.ComPort;

Yo no tengo ComPort, solo me deja poner en ese lugar CPorTLib.de lo contrario me da un error al copilar algo.Yo tengo Delphi 7, es esto normal o al instalar esta libreria lo configure mal?

Gracias.
Responder Con Cita
  #10  
Antiguo 04-01-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Cuando tu colocas un componente de tipo ComPort automaticamente te aparece CPort en la Uses de tu Unit. Si lo haces todo por codigo debes añadirla "a mano"

Código Delphi [-]
uses
  SysUtils, Classes, CPort, IniFiles, ActnList, Dialogs, StrUtils;
Responder Con Cita
  #11  
Antiguo 04-01-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
Saludos egostar.

Creo que EnumPorts es un API.No creo que sea parte de TComPort.
El codigo es asi como lo pucistes, lo he mirado en tres diferentes programas y esta exactamente asi escrito.Tengo que estudiar el EnumPorts un poco mas profundo.Por el momento solo se que su funcionamiento es chequear los puertos disponibles y ponerlos en un formulario.
Yo uso Delphi4 y TurboDelphi for win32 y no encuentro ninguna referencia a esa función EnumPorts, investigando en internet encontré que esta función forma parte de cWindows.pas de la unidad Delphi Fundamentals la cual se encuentra disponible en sourceforge.net.

Puede ser que me equivoque y en ese caso que alguien me corrija por favor.

Como te comentaba yo uso los componentes de Apro y me han funcionado de maravilla, de hecho el sector donde yo me manejo es en la de crear interfaces seriales para comunicarme con PBX (centrales telefonicas, conmutadores) y a otros dispositivos a través de puertos seriales y los uso frecuentemente.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #12  
Antiguo 05-01-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Solo por no dejar el hilo inconcluso existe otros componentes llamados TComPort uno de ellos esta aqui y es freeware tambien.
Responder Con Cita
  #13  
Antiguo 05-01-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola egostar.
El famoso EnumPorts es un componente de otro TComPort, diferente al que tenia yo instalado. El de Dejan Crnila no trae este componente.Encontramos otro TComPort, que si tiene el EnumPorts.

Este es el url.

http://users.pandora.be/dirk.claessens2/software.htm

Tiene otras cosas mas que no tiene el de Dejan Crnila. Por ejemplo:
procedure ComPort1ReceiveCallBack(Data:String);

Es cosa de seguir investigando.
PD: Se llaman igual los dos. (TComPort)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Mi primer trabajo en delphi lucasarts_18 La Taberna 9 24-06-2006 21:14:41
Hacer un programita Delphi REHome OOP 9 26-05-2006 20:21:50
Mi primer contacto con Delphi 2006 mazinger Noticias 1 12-12-2005 14:07:08
soy nuevo y me urge crear un programita en DELPHI ferchmon Impresión 6 01-03-2005 13:19:59
Mi primer programa en delphi el, el .exe en otros ordenadores no va Daltor Varios 3 02-04-2004 15:21:00


La franja horaria es GMT +2. Ahora son las 21:40:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi