Ver Mensaje Individual
  #1  
Antiguo 13-04-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Reputación: 0
JoseFco cantidad desconocida en este momento
Recibir data por el serial port.

Hola amigos.

Estoy tratando de recibir una cadena de data (4096 bytes de data por el serial port.) La tendre que alojar temporalmente en un buffer imagino y despues usando un procedimiento modificado como este:
Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type buffer=array of byte;  //assign as Dynamic array
var HexBufOut:buffer;
type
  TForm1 = class(TForm)
    SaveDialog1: TSaveDialog;
    Button1: TButton;
  procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
 function writeline(ADDR,RECLEN,RECTYPE:integer;
            var buf:buffer):string;
 var i:integer;
CHKSUM:byte;
begin
CHKSUM:=0;
result:=':'+inttohex(RECLEN,2)+   inttohex(ADDR,4)+inttohex(RECTYPE,2);
CHKSUM:=RECLEN+lo(ADDR)+hi(ADDR);
for i:=0 to RECLEN-1 do begin
result:=result+inttohex(buf[ADDR+i],2);
 CHKSUM:=CHKSUM+buf[ADDR+i];
end;
result:=result+inttohex(256-CHKSUM,2);
end;
function write_eof:string;
begin
result:=':00'+'0000'+'01'+'FF';  // :00000001FF
end;
 

procedure TForm1.Button1Click(Sender: TObject);
 var Fname,line:string;
 Fp : textfile;
 ErrorCode,StartAddr,ByteCnt:integer;
  A_Line,EOF_HEX:string;
begin
  StartAddr:=$0000;  // start address
  ByteCnt:=16;    // 16 bytes
  SetLength(HexBufOut,ByteCnt);
  HexBufOut[0]:=$00;
  HexBufOut[1]:=$12;
  HexBufOut[2]:=$00;
  HexBufOut[3]:=$72;
  HexBufOut[4]:=$12;
  HexBufOut[5]:=$00;
  HexBufOut[6]:=$7E;
  HexBufOut[7]:=$B4;
  HexBufOut[8]:=$80;
  HexBufOut[9]:=$04;
  HexBufOut[10]:=$80;
  HexBufOut[11]:=$34;
  HexBufOut[12]:=$80;
  HexBufOut[13]:=$F6;
  HexBufOut[14]:=$75;
  HexBufOut[15]:=$A0;
Fname:='C:\Documents and Settings\XP\My Documents\test1.hex';
AssignFile(Fp,Fname); { File selected in dialog }
 Rewrite(Fp);
// write 16 bytes in HexBuf
 A_Line:=writeline(StartAddr,ByteCnt,$00,HexBufOut);
   EOF_HEX:=':00'+'0000'+'01'+'FF';// write end of HEX file
     writeln(Fp,A_Line);
   writeln(Fp,EOF_HEX);
 closefile(Fp);
end;

end.

Guardarla en un fichero dentro de la PC.(en formato intel hex)
Este codigo que mostre esta trabajando y crea bien el intelhex.
Esta data que llegara desde el serial port, es leida de un chip y mandada al serial port por utro chip master(esta parte esta funcionando bien,la puedo ver en un monitor.)

Me hace falta una orientacion para poder alojarla en un buffer y posteriormente guardarla en un fichero.

Un Saludo.
Responder Con Cita