Hi, kurze Frage zum Timer0 des 8051. Nehmen wir mal an ich hab den Timer0 (16Bit = 65535 Zustände)soeben gestartet wenn der Timer0 nun beim Overflow in eine Interrupt ServiceRoutine springt um diese dann abzuarbeiten.Dann ist doch das Hauptprogramm solange unterbrochen. Wenn ich jetzt aber einen 24h Timer mithilfe von mehreren Registern in der ISR programmiert habe, dann kann ich doch mein Hauptprogramm 24h lang nicht mehr ansprechen oder? D.h das Programm verweilt erst 24h in der ISR und springt nach Ablauf der 24h wieder ins Hauptprogramm. Bitte um Aufklärung Danke Gruß
mann sollte sich so kurz wie möglich im interupt prog. befinden. d.h. beim einem timer counter overflow landest du im interrupt, setzt ein flag/änderst ne (volitale) variable und nix wie ab zurück ins hauptprogramm. dort kannste dann mit den flags/variablen "schleifen" was das zeug hält. du bist also quasi "nur" im hauptprogramm.
> Wenn ich jetzt aber einen 24h Timer mithilfe von mehreren Registern in > der ISR programmiert habe, dann kann ich doch mein Hauptprogramm 24h > lang nicht mehr ansprechen oder? Nein, ist falsches Verständnis. Ich geh jetzt mal davon aus, dass du alle 24h eine "Nachricht" haben willst, dass eben die 24h rum sind. Also machst du folgendes: Du konfigurierst deinen Interrupt auf sagen wir beispielsweise 10ms oder 100ms (geht auch exakt mit ungeraden Quarzfrequenzen(!)). Dann nimmst du vier 1-Byte Variablen, welche die 10ms, die Sekunden, die Minuten und die Stunden darstellen. Der Interrupt inkrementiert bei jedem Durchlauf die 10ms-Variable. Ist sie gleich 100, wird sie auf 0 gelöscht und dafür die Sekunden inkrementiert. Und so gehts dann weiter, bis deine Stunden-Variable den Wert 24 hat. Dann wird alles gelöscht und es geht von vorne los. Bei Erreichen von 24 für die Stunden setzt du zusätzlich eine 1-Bit Variable, welche im Hauptprogramm abgefragt wird (und dort auch wieder gelöscht wird). Das heisst insgesamt, dass der Interrupt nur alle 10ms kommt, die Berechnungen durchführt und wieder verlassen wird, d.h. das Hauptprogramm kommt immer dazwischen zum Zuge. Mit der o.g. Implementierung hast du auch gleichzeitig eine RTC programmiert, wenn du die Zugriffe auf die Interrupt-Variablen richtig steuerst, kannst du eine sehr exakte Uhr programmieren :) Ich hoffe, ich konnte das einigermaßen verständlich rüberbringen =) Ralf
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.