Forum: Mikrocontroller und Digitale Elektronik Sereille Daten mit uC empfangen


von Alex (Gast)


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

von Aleksej Kiselev (Gast)


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...

von Alex (Gast)


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

von Aleksej Kiselev (Gast)


Lesenswert?

Und was ist mit der Taktfrequenz?

von Alex (Gast)


Lesenswert?

11,0592 MHz für 9600 Baud

von Alex (Gast)


Angehängte Dateien:

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.