Hallo zusammen, über die RS232-Schnittstelle möchte ich in unregelmäßigen Abständen wenige(4-7) Bytes empfangen. Der Receiver-Interrupt(1.Byte) soll der Start für die Empfangsroutine sein. Alle weiteren Bytes sollen im Pollingverfahren empfangen werden. Wie sieht die Pollingroutine(Codevision) aus? Reicht dieses für das 2. 3. und 4.-Zeichen:? while(!(UCSR0A & 1<<7)) {} data = UDR0; // 2.Zeichen holen while(!(UCSR0A & 1<<7)) {} data = UDR0; // 3.Zeichen holen while(!(UCSR0A & 1<<7)) {} data = UDR0; // 4.Zeichen holen Also, prinzipiell funktioniert das, aber manchmal hängt sich das Programm in der while-Funktion zum 3.Zeichen auf. Gibt es da eine Lösung? Vielen Dank für eure Mühe! Tobis
Der Code schaut für mich auf den ersten Blick eigentlich richtig aus. Vielleicht gibt es ein Problem in Verbindung mit der Interrupt-Logik des UART. Probier doch mal in der ISR nach dem Lesen des ersten UDR-Inhalts den RXC-Interrupt des UART abzuschalten und am Ende der ISR wieder zu aktivieren. Alternativ ohne Polling und einem globalen Puffer arbeiten. Stefan
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.