Hallo. Ich habe einen MSP 430 per Max 232 an die COM1 Schnittstelle des PCs angeschlossen. Dafür nutze ich die USART0 (also die erste USART Schnittstelle). An der zweiten USART-Schnittstelle (USART1) hängt ein Funkmodul. Die wesentliche Aufgabe des ängehängten Programms soll die sein, dass der MSP den ankommenden Buchstaben (einen Character) vom PC (über den MAX232) von der RX Leitung des USART0 auf die Transmitleitung des USART1 bringt.Also einfach weiterreicht. Das klappt. Auf der RX-Leitung des USART1 kommt hingegen ein String mit vier Stellen an. (Kommt von einem anderen Funkmodul+MSP430) Dieser String soll auf die RX-Leitung des USART0 gechoben werden. Von da aus geht es dann wieder per MAX 232 zum PC. Nur leider kommt vom String nur die letzte Stelle an. Die ersten drei sind futsch. Was kann ich dagegen machen? PC-MAX232-USART0-USART1-Funkmodul <> Funkmodul-MSP430
In der while(1)-Hauptschleife hast du die TX-Flag-Abfrage zwei mal drin. Die habe ich ja schon in der SendUSARTc() eingebaut, die brauchst du nicht noch mal. Und wieso ein wait(5000)? Das ist überflüssig, da die USART-Synchronisation auch ohne Delays funktioniert (RS232 geht ja alles in Hardware beim MSP430).
Du meinst so: while (1) { // Hauptroutine while (!(IFG1 & URXIFG0)); // warten, bis zeichen vom PC ankommt SendUSART1c(RXBUF0); wait (5000); // warten, bis zweites Funkmodul den String gesendet hat //while (!(IFG1 & UTXIFG0)); // warten, bis USART0 TX-buffer sendebereit SendUSART0c(RXBUF1); } Das bringt aber auch nicht den ganzen vierstelligen String zum Vorschein. Es erscheint nur die letzte Stelle. wait (5000) muss sein, denn vorher ist der RXBUF1 noch leer.
Um das Problem etwas einzugrenzen, will ich erstmal auf den USART1,Funnkmodul,zweiter MSP usw. verzichten. Wie gesagt, um die Sache überschaubar zu halten, möchte ich einen String (zB: 3456) per Terminal an den MSP430 weitergeben. Dieser String landet dann im Buffer RX0.Und dieser Inhalt (also 3456) soll direkt wieder an den Rechner zurück gegeben werden. Ich habe mir überlegt, dafür eine Variable 'string' anzulegen, in welche der Inhalt vom RX0 Buffer geschrieben werden soll.Diese läßt sich dann mit SendUSART0 zum PC schicke.Das würde dann so aussehen: while (1) { while (!(IFG1 & URXIFG0)); //SendUSART1c(RXBUF0); //string = RXBUF0; SendUSART0("Inhalt von RXBUF0: "); SendUSART0(string); SendUSART0c(13); } Klappt aber nicht, da ich den Inhalt von RXBUF0 nicht in 'string' bekomme....Wer weiß Rat??
Das mit dem String in dieser Form war natürlich grober Unfung. Habe ich nun selber gemerkt. Wenn ich die Eingabe vom PC direkt wieder auf dem Bildschirm zurückhaben will, ist das sehr simpel zu lösen: while (1) { while (!(IFG1 & URXIFG0)); { TXBUF1 = RXBUF0; //zum usart1 bzw.funkmdul schicken } while (!(IFG1 & UTXIFG0)); { TXBUF0 = RXBUF0; //beliebiger string geht zurück zum pc } } Ändere ich aber die Zeile 'TXBUF0 = RXBUF0;' in'TXBUF0 = RXBUF1;', um den ankommenden vierstelligen String anzuzeigen, so sind die ersten drei Stellen abgeschnitten. Ich verstehe einfach nicht, warum das so ist!
Hallo Max, Kannst du mir die Schamatic der Schaltung herschicken, ich bin sehr neugierig. MFG Can.
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.