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.