PIC18F97J60 -> C18 Codeoptimierung

OP #4198513
Lesenswert?

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:
1
dt.Stunden = DS1337_Read_Stunden(&dt);
2
dt.Minuten = DS1337_Read_Minuten(&dt);
3
dt.Sekunden =DS1337_Read_Sekunden(&dt);
4
    
5
dt.Tag = DS1337_Read_Tag(&dt);
6
dt.Monat = DS1337_Read_Monat(&dt);
7
dt.Jahr = DS1337_Read_Jahr(&dt);
8
dt.Wochentag = DS1337_Read_Wochentag(&dt);
9
        
10
strcpy(chr_Wochentag, Wochentag_Namen[dt.Wochentag]); 
11
    
12
int_Temp_CPU = GetTempLM75(1);
13
Warten_MS(100);
14
  
15
LcdPrintf(2,0, (const MEM_MODEL rom char *)"%.3s", chr_Wochentag);  
16
LcdPrintf(2,4, (const MEM_MODEL rom char *)"%.2u", dt.Tag);
17
LcdPrintf(2,7, (const MEM_MODEL rom char *)"%.2u", dt.Monat);
18
LcdPrintf(2,12, (const MEM_MODEL rom char *)"%.2u", dt.Jahr);
19
        
20
LcdPrintf(2,15, (const MEM_MODEL rom char *)"%.2u", dt.Stunden);
21
LcdPrintf(2,18, (const MEM_MODEL rom char *)"%.2u", dt.Minuten);
22
LcdPrintf(2,21, (const MEM_MODEL rom char *)"%.2u", dt.Sekunden);
23
LcdPrintf(2,30, (const MEM_MODEL rom char *)"%.4i", int_Temp_CPU);
24
    
25
//if (!DataRdy1USART())
26
//{
27
// STX|CMD|VALUE|ETX|\n
28
while (!DataRdy1USART());
29
gets1USART(unc_Data,6);
30
         
31
uint_Data_0 = (int)unc_Data[0];
32
uint_Data_1 = (int)unc_Data[1];
33
uint_Data_2 = (int)unc_Data[2];
34
uint_Data_3 = (int)unc_Data[3];
35
//}
OP #4198575
Lesenswert?

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
Gast #4198594
Lesenswert?

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.
OP #4198616
Lesenswert?

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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren