Hallo,
ich habe mir mit meinem 8051 eine Uhr aufgebaut und wollte diese mit
Assembler lösen, sie läuft auch soweit. Nur bin ich etwas unzufrieden
mit der genauigkeit der Zeit.
Mich interesssiert es wie ich die Arbeitsdauer des Programmablaufes
berechnen kann damit ich die Uhr genauer einstellen kann.
Hier mein kompletter Programmcode
Fughulu schrieb:> Mich interesssiert es wie ich die Arbeitsdauer des Programmablaufes> berechnen kann damit ich die Uhr genauer einstellen kann.
Schwierig, weil du alle Codepfade inkl. aller Verzweigungen
berücksichtigen musst.
Hat dein µC keine Hardware-Timer?
Die sind normalerweise das Mittel der Wahl, wenn man Zeitsachen machen
will. Denn Hardware-Timer arbeiten losgelöst vom Programm und lösen bei
bestimmten Zählerständen eine Interrupt-Bearbeitung aus. Und das auf den
Timer-Takt genau.
Moment.
Du benutzt ja einen Timer.
Dann dürfte das für dich interessant sein. Ist zwar für einen anderen
Prozessor, aber das Prinzip ist dasselbe.
AVR - Die genaue Sekunde / RTC
1. Die meisten Verzweigungsbefehle brauchen je nach Entscheidung
(linear weiter oder Sprung) unterschiedlich viele Takte.
2. Möglicherweise ist sogar deshalb der "Weg" länger oder kürzer
(mehr oder weniger Befehle in der Sequenz).
3. Wüstest Du also vorher was Sache ist, brauchtest Du die
Verzweigungen ja nicht.
Also: Die Laufzeit ist abhängig von Deinen tatsächlichen/aktuellen
Daten.
Die lässt sich zwar, für einen konkreten Zustand bestimmen, aber
nicht pauschal.
Es gibt zwar die Möglichkeit durch das Einfügen von Hilfsschritten wie
z.B. NOP die Wege anzupassen, aber die Wartung eines solchen
Codeabschnittes ist eine reine Sisyphusarbeit. Normalerweise geht das
aber nur in Assembler.