Einzelnen Beitrag anzeigen

Manado

Registriert seit: 30. Jan 2007
Ort: Frankfurt/M.
34 Beiträge
 
#17

Re: UART Terminal-Programm zur Kommunikation mit ATmega8 µC

  Alt 8. Feb 2007, 17:44
Ok, das mit den Daten rausfiltern klappt!
Ich hab hier mal mein Programm und den Quellcode reingestellt!
@ Der Unwissende: Vielen Dank!!!!!!

Mit meinem ATmega8 über UART geht das Programm köstlich.
Man kann die Länge und das "Zwischen-den-Daten--Byte" angeben (Eventchar).

Ok, hier der Quellcode:

Delphi-Quellcode:
unit Steuerung;

interface

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

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    connbutton: TButton;
    portbutton: TButton;
    Button3: TButton;
    ComPort: TComPort;
    Button1: TButton;
    Memo1: TMemo;
    CheckBox1: TCheckBox;
    Edit2: TEdit;
    Label2: TLabel;
    Button2: TButton;
    Button4: TButton;
    procedure Button4Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ComPortAfterOpen(Sender: TObject);
    procedure ComPortAfterClose(Sender: TObject);
    procedure portbuttonClick(Sender: TObject);
    procedure connbuttonClick(Sender: TObject);
    procedure ComPortRxFlag(Sender: TObject);
    procedure wertrausfiltern(var bote:string);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;
  botschaft:string;
 eve:string; evec:char; los:boolean;
  laenge:integer;
implementation

{$R *.dfm}

procedure TForm2.ComPortRxFlag(Sender: TObject);
var tat:integer;
begin
comport.ReadStr(botschaft,1);
if botschaft= evec then los:=true;
if los=true then begin
comport.ReadStr(botschaft,laenge);
Memo1.Lines.Add(botschaft);
end;
end;

procedure TForm2.wertrausfiltern(var bote:string);
//var i,v:integer;
begin
//i:=0;
//v:=0;
//repeat i:=i + 1 until bote[i] = chr(15);
//Showmessage(bote[i]+ bote[i+1]);
//if i<>1 then delete(bote,1,i);
//i:=0;
//repeat i:=i + 1 until ((bote[i] = evec) or (i=length(bote))) ;
//Showmessage(bote[i]+ bote[i+1]);
//Delete(bote,i,length(bote));
end;


procedure TForm2.ConnButtonClick(Sender: TObject);
begin
Comport.Connected := not comport.Connected;
los:=false;
botschaft:='';
Memo1.Lines.Add('---STOP---');
end;

procedure TForm2.ComPortAfterOpen(Sender: TObject);
begin
  ConnButton.Caption := 'Disconnect';
end;

procedure TForm2.ComPortAfterClose(Sender: TObject);
begin
  ConnButton.Caption := 'Connect';
end;

procedure TForm2.PortButtonClick(Sender: TObject);
begin
  ComPort.ShowSetupDialog;
end;


procedure TForm2.Button3Click(Sender: TObject); //übernehmen button vom Eventchar

begin
if checkbox1.Checked =false then begin
if length(Edit1.Text)>0 then begin
eve:=Edit1.Text;
evec:= eve[1];
comport.eventchar:= evec;
end;
end
else
if length(Edit1.Text)=2 then begin
eve:=Edit1.Text;
evec:= chr(strtoint(eve));
comport.eventchar:= evec;
end;
edit1.Text := evec;
end;

procedure TForm2.Button2Click(Sender: TObject); //übernehmen button von länge
begin
if Edit2.Text <> 'then laenge :=strtoint(Edit2.Text);
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
comport.eventchar:= #15;
evec:=#15;
laenge:= 16;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
close;
end;


procedure TForm2.Button4Click(Sender: TObject);
begin
Memo1.Clear;
end;

end.

//übrigens: "Stormy Encryption Products" ist nur von mir aus Spass an der Freude so ein Label, keine Firma oder sowas, hat dann immer nur sonen proffessionelleren Touch!!


Grüsse
Moritz
Angehängte Dateien
Dateityp: exe stormy_encryption_products_--_uart_data_terminal_248.exe (538,5 KB, 27x aufgerufen)
  Mit Zitat antworten Zitat