Hi, ich weis nicht wie ich einen 50ms-Timer in C schreiben kann. Bitte um Hilfe, wenn möglich auch Quellcode
Welche Zeit kriegst du den hin? Das Prinzip eines Timers ist es doch, dass in regelmässigen Zeitabständen eine Interrupt Funktion aufgerufen wird. Kriegst du die gewünschte Zeit nicht direkt hin, dann musst du halt in der ISR die Anzahl der Aufrufe mitzählen. Wenn die ISR zb alle 1 ms passiert, dann sind nach dem 50-ten Aufruf 50ms vergangen.
1 | unsigned char NrCalls; |
2 | |
3 | ISR( ... ) |
4 | {
|
5 | NrCalls++; |
6 | if( NrCalls == 50 ) { // das war der 50 te Aufruf, also |
7 | // sind 50 ms vergangen
|
8 | NrCalls = 0; |
9 | |
10 | // was auch immer du in 50 ms Intervallen tun möchtest
|
11 | }
|
12 | }
|
Wie wären denn die Timereinstellungen für einen 1ms-Timer? Welcher Timer-Modus? TH0, TL0, ... Schreibe übrigens den Timer für einen AT89S8252, also 8051er-Derivat
> Wie wären denn die Timereinstellungen für einen 1ms-Timer?
Das wirst du dir wohl oder übel aus dem Datenblatt
raussuchen müssen. Müsste ich auch.
> Wie wären denn die Timereinstellungen für einen 1ms-Timer?
Versteif dich nicht auf die 1ms. Die waren nur ein Beispiel.
Setze einen Timer auf, der regelmässig einen Interrupt
auslöst und rechne dir aus, in welchen Zeitabständen
das der Fall ist. Danach dividierst du die 50 ms durch
diese Zahl und weist wie weit du zählen musst.
Das mit dem Interrupt bzw. einem Software-Timer ist ja nicht das Problem. Ich bekomm nur für den Timer nie die richtigen Einstellungen zusammen.
> Das mit dem Interrupt bzw. einem Software-Timer ist ja nicht das > Problem. > > Ich bekomm nur für den Timer nie die richtigen Einstellungen zusammen. Das versteh ich jetzt nicht. Schaffst du es einen Interrupt auslösen zu lassen oder schaffst du es nicht? Das kann doch nicht so schwer sein, einen Timer so zu initialisieren, dass er zb. bei einem Overflow auslöst. Wenn ich bei Google "8051 timer interrupt" eingebe kriege ich massenhaft Beispiele dafür. Die Details sind vielleicht Compiler-spezifisch, aber die grundsätzliche Vorgangsweise ist ja nicht vom Compiler abhängig. Man schreibt Werte in Konfigurationsregister des µC und dann zählt der Timer schon munter vor sich hin. Die Interrupts noch freigeben und das wars dann auch schon. Und um das auch klar zu sagen: Ich werd dir das Ding nicht schreiben. Die 5 Initialisierungen wirst du ja wohl noch alleine hinkriegen.
Ich bring nur keinen Timer zusammen, die Initialisierung ist eh kein Problem. trotzdem thx für deine Bemühungen
Du weisst schon,das der Timer nach korrekter initialisierung nahezu selbsttätig im Hintergrund arbeitet?
Hmm.. wo liegen denn deine Probleme? Was bekommst du hin, wo klemmt es dann? Werd mal konkret, dann kann man auch helfen. Zeig mal wie du den Timer initialisierst, wie deine ISR aussieht.
@ronny: ja, weis ich, wenn ich ohne interrupt arbeite funktioniert er auch(halbwegs).
So, hab das Problem jetzt gelöst, der Timer funktioniert wunderbar, das Problem lag wo anders. Danke für eure Hilfe
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.