Hallo Zusammen,
ich habe ein kleines Programm geschrieben. Das Programm funktioniert im
wesentlichen. Bei der Implementierung des kleinen Protokolls bin ich auf
ein winziges Problem gestoßen.
Der Controller ließt Datum, Uhrzeit und Temperatur aus. Das
funktioniert. Nun soll die Schnittstelle prüfen, ob Daten anliegen, und
da liegt das Problem.
Der Controller bleibt mir da immer bei der Prüfung der Schnittsstelle
stehen, und die Uhrzeit usw. wird nicht weiter aktualisiert. Diese wird
nur aktualisiert, wenn ich ständig Daten an den Controller stehe. Der
restlcihe Code funktioniert soweit das ist der einige Makel an der
ganzen Sache. Irgenwie sehe ich den Wald vor lauter Bäumen nicht mehr.
Hat jemand eien Tipp wie ich das optimieren kann?
Danke und Gruß
Ingo
Hier wäre der betroffene Auszug aus dem Quellcode:
Ingo S. schrieb:> Diese wird nur aktualisiert, wenn ich ständig Daten an den Controller > stehe.
Was ist los? Sind die Eingänge von analog auf digital umgestellt?
Sämtliche Eingänge und Analog-Ports funktionieren wie sie sollen.
Mir bleibt nur das Programm bei der Serielen Schnittstelle hängen. und
kehrt nicht mehr zum aus dieser Scnleife zurück. Sprich Uhrzeit anzeigen
usw.
Uhrzeit, Datum usw. aktualisieren
Schnittstelle prüfen -> Daten vorhanden ja -> Daten auswerten und ggf.
Aktionen auswerten. Geht
keine Daten vorhanden -> Uhrzeit, Datum usw. aktualisieren
Tut mir Leid aber Du schreibst so verwirrend, dass es einem schwer fällt
das eigentliche Problem zu verstehen.
Dein Controller bleibt hier
while (!DataRdy1USART());
hängen, wenn Du ihm keine Daten sendest, habe ich das richtig
verstanden? Wenn ja, dann würde ich sagen macht der Code genau das was
er soll.
geht irgendwie nicht. Da ich mehrere Zeichen sende geht das irgendwie
nicht.
STX|CMD|VALUE|ETX|\n
HAbs geprüft und komm da leider nicht so weiter wie ich will wenn ich
nur 1 Byte sende dann klappt das aber bei mehreren Bytes leider nicht
Die while Schleife habe ich bei If then else ausgeklammert...
Dann lies doch einfach immer ein gesamtes Datenpaket ein, etwa so:
if( keine Daten da )
{
for( ... ) // Anzahl an Bytes
{
Daten einlesen
while( keine Daten da );
}
}
else
{
// ...
}
Schön ist das allerdings nicht. Ich würde das höchstens zum Testen
verwenden. Arbeite am Besten mit dem Interrupt, den das USART Modul
auslösen kann, wenn ein Datenpaket eingetroffen ist.