Sereille Daten mit uC empfangen

Gast #271346
Lesenswert?
• ▲
▼
Hallo,
Ich möchte gerne ein Byte über die serielle Schnittstelle versenden und
anschließend einlesen (zum Testen). Ich hab mir ein Java Programm
geschrieben mit dem es funktioniert, wenn ich bei meinem Port RxD und
TxD einfach miteinander verbinde.
Ich hab folgendes Programm mit uVision 2 für den uC geschrieben:

void main(void)
{
  while(1)
  {
    unsigned char byte;

    if(RI)
    {
      RI = 0;
      byte = SBUF; //Byte im seriellen Buffer speichern

      delay(100);

      SBUF = byte; //Zurückschreiben
      while(TI == 0)
        ; //Und Byte wieder zurücksenden
      TI = 0;
    }
    delay(200);
  }
}

Diese Funktion macht doch im Prinzip das Selbe wie wenn ich RxD mit TxD
verbinde oder nicht?
Java wirft immer eine Exception und sagt, dass ein Fehler beim
Schreiben vorliegt. Das Senden vom uC aus und auch das Einlesen mit dem
Programm funktioniert einwandfrei, ich muss also irgendetwas beim
Einlesen falsch gemacht haben.

Kann mir bitte jemand helfen und sagen, welchen ich Fehler ich gemacht
habe?

Vielen Dank im Voraus,
Alex
Gast #271347
Lesenswert?
• ▲
▼
Wie hast du denn deine Schnittstelle bei dem Mikrocontroller
konfiguriert (im Programm ist es nicht zu sehen, hast du es ueberhaupt
gemacht?)? Wie hast du den MC angeschlossen (wenn du es ohne spez.
Treiber machst, z.B. MAX232, dann ist es natuerlich klar - man kann ja
nie sagen, was da am RX von dem Rechner liegt, also meint dein Rechner,
dass mit der Schnittstelle was nicht in Ordnung ist)? Ohne diese
Information kann dir keiner helfen. Also man braucht die Einstellungen
von dem UART und deine Schaltung...
Gast #271348
Lesenswert?
• ▲
▼
Ich hab das ganze mit dem MAX232 beschalten. Die genaue Parametrierung
hab ich rauskopiert, passt aber mit Sicherheit, da das Senden vom uC
aus ja auch klappt!

Konfiguration:
TMOD = 0x20;  //Timer1, Mode 2
TH1  = 0xFD;
SCON = 0x40;
TI   = 0;
TR1  = 1;

Gruss,
Alex
Gast #271351
Lesenswert?
• ▲
▼
Ich hab das ganze jetzt mit Interruptsteuerung gelöst, funktioniert aber
auch nicht!
Was mich verwundert ist, dass wenn ich mein Programm kompiliere und
SBUF vor dem Befehl "byte = SBUF" auf z.B. 5 setze, byte danach immer
noch 0 ist.
Die Fehlermeldung von Java erscheint nun nicht mehr, da ich die Bits EA
(Interrupt Enable) und ES (Serieller Interrupt) gesetzt habe. Das
Programm hängt sich aber trotzdem auf, warum auch immer ?!

Ich poste euch meinen Source, um den Fehler ausfindig machen zu
können.

Danke,
Alex
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.