En el memo lo que hay es hex 00 01 FE 12 0A puro hex .
Este es el programita.
Código Delphi
[-]
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, CPort, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
ComPort: TComPort;
Button1: TButton;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
ProgressBar1: TProgressBar;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
OpenDialog1: TOpenDialog;
Memo1: TMemo;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure ComPortRxChar(Sender: TObject; Count: Integer);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
Cuantos, CuentaB : Integer;
Contador : Integer;
implementation
{$R *.dfm}
type
TBuffer = array[$0000..$FFFF] of Byte;
function Insertar(Str: String; var Buffer: TBuffer): String;
var
i,j,k: Integer;
begin
Result:= EmptyStr;
Str:= Trim(Str);
if Copy(Str,1,1) = ':' then
if TryStrToInt('$' + Copy(Str,2,2),i) then
if Length(Str) = ((2*i) + 11) then
if TryStrToInt('$' + Copy(Str,4,4),j) then
if TryStrToInt('$' + Copy(Str,8,2),k) then
if k = 0 then
begin
Str:= Copy(Str,10,2*i);
for k:= j to (j + i - 1) do
begin
Buffer[k]:= StrToInt('$' + Copy(Str,1,2));
Delete(Str,1,2);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open;
comport.WriteStr(#2#0);
end;
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
Str: String;
begin
ComPort.ReadStr(Str, Count);
if length(Str)>= 8 then
ShowMessage('OK')
else if Str = #1 then begin
case Cuantos of
1: begin ComPort.WriteStr(#2#2);
Cuantos := 2;
end;
2: begin ComPort.WriteStr(#2#3);
Cuantos := 3;
end;
3: begin showmessage('Chip Borrado.. OK!')
end;
4: begin ComPort.WriteStr(#2#2);
Cuantos := 5;
end;
5: begin ComPort.WriteStr(#6#4#0#0#16#0);
sleep(100);
ComPort.WriteStr(Memo1.Text[1]);
Contador := 2;
end;
end;
end
else if Str = #2 then begin
end
else if Str = #53 then begin
if contador <= 4096 then begin
sleep(100);
ComPort.WriteStr(Memo1.Text[Contador]);
Inc(Contador);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open;
comport.WriteStr(#4#1#0#1);
Cuantos := 1;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open;
comport.WriteStr(#4#1#0#1);
Cuantos := 4;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i,j: Integer;
Str: String;
Buffer: TBuffer;
begin
if OpenDialog1.Execute then
Label1.caption:=OpenDialog1.FileName;
Memo1.Clear;
with TStringList.Create do
try
LoadFromFile(Label1.Caption);
FillChar(Buffer,Sizeof(Buffer),#0);
for i:= 0 to Count - 1 do
Insertar(Strings[i],Buffer);
j:= StrToInt(Label2.caption);
Str:= EmptyStr;
for i:= 0 to j -1 do
begin
Str:= Str + #32 + IntToHex(Buffer[i],2);
if ((i+1) mod 16 = 0) then
begin
Memo1.Lines.Add(Str);
Str:= EmptyStr;
end;
end;
if Str <> EmptyStr then
Memo1.Lines.Add(Str);
finally
Free;
end;
end;
end.
Algo le pasa a la rutina que se detiene y no continua mandando nada mas.( lo del 20 es otra cosa, el programa no debe detenerce por eso y cuando llega el primer 53 debe mandar otro byte. A no ser que el memo no lo leemos como debe ser.
Si te fijas en ese programita yo llamo un fila, intelhex lo limpiamos y se queda puro hex nada mas.
Un Saludo.