logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Delphi COMPORT czytanie danych PROSZE O POMOC PILNE

wezyr_21 10 Kwi 2009 21:03 968 0
REKLAMA
  • #1 6398852
    wezyr_21
    Poziom 1  
    Posty: 1
    Mam poważny problem z obsługą odbiory danych przez comport. Program wysyła dane które potrafię odebrać na uC ale nie wiem co źle napisałem ponieważ w drugą stronę nie mogę tego dokonać. Wina leży najprawdopodobniej w procedurze odbioru. A dokładniej w

    procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
    var
    RevS: String;
    begin
    ComPort.ReadStr(RevS, Count);//odczytujemy String z Portu
    Memo1.Text :=Memo1.Text +Revs;//Wyswietlamy go w Memo
    end;


    program jest sprzężony z obsługą uC który wiem że na 100% działa.
    Był testowany przez HyperTerminal

    Kod, który wysyła dane do portu com z uC jest następujący.

    void
    UARTIntHandler(void)
    {
    unsigned long ulStatus;
    ulStatus = UARTIntStatus(UART0_BASE, true);
    UARTIntClear(UART0_BASE, ulStatus);

    while(UARTCharsAvail(UART0_BASE))
    {
    nowy = UARTCharGetNonBlocking(UART0_BASE); //pobiera dane
    zmienna[liczba]=nowy;
    liczba++;

    if(nowy==13)
    {
    RIT128x96x4Clear();
    zmienna[liczba-1]=0;
    sprintf(buffer, "Odebrano %s", zmienna);
    RIT128x96x4StringDraw(buffer,5,50,15);
    for (i=0;i<=(liczba-1);i++)
    {
    znak[0]=zmienna[i];
    UARTCharPutNonBlocking(UART0_BASE, znak[0]); //wysyła dane w postaci char
    }
    liczba=0;
    nowy=0;
    }
    // UARTCharPutNonBlocking(UART0_BASE, nowy);
    }
    }

    //*****************************************************************************
    //
    // Send a string to the UART.
    //
    //*****************************************************************************
    void
    UARTSend(const unsigned char *pucBuffer, unsigned long ulCount)
    {
    //
    // Loop while there are more characters to send.
    //
    while(ulCount--)
    {
    //
    // Write the next character to the UART.
    //
    UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++);
    }
    }

    Proszę o pomoc lub podpowiedź jak odczytać dane które przesyłam do tego programu. Poniżej załączam cały kod który mam.

    unit moje;

    interface

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

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    ComPort: TComPort;
    Button4: TButton;
    Button5: TButton;
    StatusBar1: TStatusBar;
    CheckBox1: TCheckBox;
    procedure Button_OpenClick(Sender: TObject);
    procedure ButtonSettingClick(Sender: TObject);
    procedure ButtonWyslijClick(Sender: TObject);
    procedure ButtonClearClick(Sender: TObject);
    procedure ButtonKoniecClick(Sender: TObject);
    procedure ComPortRxChar(Sender: TObject; Count: Integer);
    // procedure ComPortClose(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.Button_OpenClick(Sender: TObject);
    begin
    if ComPort.Connected then
    begin
    ComPort.Close;//zamknij
    Button1.Caption:='Otwórz';
    end else
    begin//jezeli nie jest to..
    ComPort.Open; //otworz..
    Button1.Caption:='Zamknij';
    end;
    end;

    procedure TForm1.ButtonSettingClick(Sender: TObject);
    begin
    ComPort.ShowSetupDialog;
    end;

    procedure TForm1.ButtonWyslijClick(Sender: TObject);
    var
    S: String;
    begin
    S:= Edit1.Text;//Pobieramy text z Edita do zmiennej
    // if CheckBox1.Checked then//jezeli checkbox jest zaznaczony
    S:= S+ #13+#10;//to wysylamy to na COM w nowej linii
    ComPort.WriteStr(S);//tu wysylamy
    end;

    procedure TForm1.ButtonClearClick(Sender: TObject);
    begin
    Memo1.Clear;//Czyscimy Memo
    Edit1.Clear;
    end;

    procedure TForm1.ButtonKoniecClick(Sender: TObject);
    begin
    Application.Terminate;//Koniec programu
    end;

    procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
    var
    RevS: String;
    begin
    ComPort.ReadStr(RevS, Count);//odczytujemy String z Portu
    Memo1.Text :=Memo1.Text +Revs;//Wyswietlamy go w Memo
    end;

    end.


    Bardzo ale to naprawdę bardzo proszę o pomoc. Jeżeli ktoś ma program który coś podobnego obsługuję to proszę zamieście go tu.

    Moderowany przez krzychoocpp:

    Regulamin 10.9, 11.1. Proszę napisać temat jeszcze raz po przeglądnięciu zasobów forum dotyczących omawianego problemu i po przeczytaniu regulaminu. Kod umieszczamy w znacznikach code.

  • REKLAMA
REKLAMA