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
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...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.