mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt bei Timer1


Autor: Sven (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ANFÄNGERFRAGE: !!!

Ich habe hier ein Projekt in das ich mich einarbeiten möchte, leider
zum ersten mal im Bereich der MC Programmierung!
Controller: 80C517 / 80C537

Und gleich beim Timer fängt es an!

#define  ZEIT      0xFC17
void timer1_init(void)
{
  TMOD&=0x1F;
  TMOD|=0x10;
  TH1=ZEIT>>8;
  TL1=ZEIT&0x00FF;
  ms_timer = 10;
}
Soweit klar, (hoffe ich)
Timer1 = keine Abhängigkeit von externer Freigabe
       = ist ein Timer, kein Zähler
       = Modus ist 1 (16-Bit Timer, ohne Autoreload)
TH1 = FCh
TL1 = 17h
somit im Timer1 Counter FC17h, als nächstes folgt der Start des Timers
mit:
void timer1_start(void)
{
  TR1=1; // Timer1 wird gestartet
  ET1=1; // Interrupt für Timer1 wird freigegeben
}

Nun zählt doch der "Timer 1 Counter" hoch und setzt (nach 1ms) das
Interruptflag TF1.
Soweit sollte ich es doch richtig verstanden haben, oder?

Nun da dieser Interrupt ausgelöst wurde suche ich in der
Interruptvektor Tabelle nach diesem Interrupt. In der User Manual für
meinen Baustein steht das nach Adresse 001Bh gesprungen wird.
Wie kann ich rausfinden, ob auf diesen Interrupt reagiert wird?
Den nach meinen Verständnid sollte darauf reagiert werden, im Anhang
ist ein Teil einer Init() Methode die den Timer startet und drauf
reagiert.
Ich hoffe ich habe mich nicht zu kompliziert ausgedrückt, oder gar zu
blöd!
Danke für eure Hilfe!

Sven

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da musst Du eine Interrupt-Routine schreiben, die eine Aktion ausführt,
wenn der Interrupt auftritt. Alternativ kann man natürlich das
Interrupt-Flag auch im Polling-Verfahren abfragen.

Weiß jetzt nicht, was für nen Compiler Du benutzt, aber in der
dazugehörigen Dokumentation sollte drinstehen, wie ein
Interrupt-Handler auszusehen hat (im Prinzip wie eine Funktion, nur mit
dem Hinweis auf den entsprechenden Interrupt-Vektor).

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke dir erstmal für die rasche antwort!

Es ist bereits ein lauffähiges Programm, an dem ich auch schon einige
Änderungen (Nur Berechnungen und Auswertungen, nicht an Registern oder
Interrupts) gemacht habe. Da es mein erstes Projekt im MC Bereich ist,
wollte ich dieses Programm einfach mal aufdröseln.

Ich vermute du meinst so :
void timer_int (void) interrupt 3
{
   // Bla ..
}

Davon habe ich einige mit verschiedenen Interrupts, nur weiß ich leider
nicht welche Methode, von welchen Interrupt aufgerufen wird?
Dieses muss ja irgendwo zugeordnet sein, nur wo???

Sven

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Compiler: Keil V3.2 / V8.0 Demo

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dieses muss ja irgendwo zugeordnet sein, nur wo???

Im Zweifelsfall in der Headerdatei. Ist ne Weile her, dass ich mit mit
8051ern und Keil beschäftigt habe. Habe Keil auch net auf dem Rechner,
so dass ich jetzt nicht nachsehen kann.

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Wink mit dem Zaunpfahl war gut! ;-)

Habe meine Googlesuche um Keil erweitert ;-)
Es ist Compiler abhänging beim Keil Compiler wird es so ermittelt:

http://www.phytec.de/phytec/faqs_tools/keil_c51_in...

kurz:
n = (int_adresse aus vektortabelle -3 ) / 8
bei mir:
n = 1Bh = ( 27d - 3 ) / 8
n = 3

Nach dem Timer1 Interrupt wird :
"void timer_int (void) interrupt 3"
aufgerufen.

Hatte ich mir schon gedacht, nur wusste ich nicht sicher!

thx a lot

Sven

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.