www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sereille Daten mit uC empfangen


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Aleksej Kiselev (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Aleksej Kiselev (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was ist mit der Taktfrequenz?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
11,0592 MHz für 9600 Baud

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.