mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 50ms Timer für AT89S8252


Autor: Andreas Wurzenberger (wurzi1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich weis nicht wie ich einen 50ms-Timer in C schreiben kann.

Bitte um Hilfe, wenn möglich auch Quellcode

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
unsigned char NrCalls;

ISR( ... )
{
  NrCalls++;
  if( NrCalls == 50 ) {  // das war der 50 te Aufruf, also
                         // sind 50 ms vergangen
    NrCalls = 0;

    // was auch immer du in 50 ms Intervallen tun möchtest
  }
}

  

Autor: Andreas Wurzenberger (wurzi1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Andreas Wurzenberger (wurzi1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Andreas Wurzenberger (wurzi1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bring nur keinen Timer zusammen, die Initialisierung ist eh kein 
Problem.

trotzdem thx für deine Bemühungen

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du weisst schon,das der Timer nach korrekter initialisierung nahezu 
selbsttätig im Hintergrund arbeitet?

Autor: Andre S. (dg2mmt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andreas Wurzenberger (wurzi1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ronny: ja, weis ich, wenn ich ohne interrupt arbeite funktioniert er 
auch(halbwegs).

Autor: Andreas Wurzenberger (wurzi1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andre: Hatte bis jetzt keine ISR, schreib sie aber gerade

Autor: Andreas Wurzenberger (wurzi1000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, hab das Problem jetzt gelöst, der Timer funktioniert wunderbar, das 
Problem lag wo anders.

Danke für eure Hilfe

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.