www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C167, Timer Interrupt


Autor: bubble (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich will einen Timer Interrupt mit T3 programmieren. Solange ich die 
Interrupt-Funktion auskommentiere ist alles in Ordnung, ansonsten hagelt 
es Fehlermeldungen. Ich kann beim besten Willen keinen Fehler finden. 
Ich habe bereits mit Beispielen aus einem Buch und Online-Beispielen 
verglichen, habe aber nichts herausgefunden.
Ich verwende die TASKING EDE Trial Version für C166/ST10 v8.6r3


int i=0;
void timer(void) interrupt 0x23
{
  i+=1;
}


void main(void)
{
  T3CON = 0x0086;    // Prescale Factor 512, Timer Mode, STEHT NOCH, läuft abwärts
  T2CON = 0x0020;    // Reload Mode
  T3 = 0x2625;       // = 9765d
  T2 = 0x2625;

  T3IC = 0x88;       // niedriegster GLVL (000), ILVL (0001), INTERRUPT ENABLED 
  IEN = 1;           // Alle Interupts an
  T3R = 0x1;         // Timer laufen lassen

  while(1){}
}

Die Fehlermeldungen sind:
TASKING program builder v8.6r3 Build 088
Preprocessing start.asm
Compiling and assembling main.c
main.c:
    20:   i=2;
E  42: syntax error, expecting declaration
    26:   T3CON = 0x0086;
E  42: syntax error, expecting declaration
    29:   T2CON = 0x0020;
E 157: "T2CON" is not a formal parameter
E 129: cannot initialize "T2CON"
    32:   T3 = 0x2625;
E 157: "T3" is not a formal parameter
E 129: cannot initialize "T3"
    33:   T2 = 0x2625;
E 157: "T2" is not a formal parameter
E 129: cannot initialize "T2"
    38:   T3IC = 0x88;
E 157: "T3IC" is not a formal parameter
E 129: cannot initialize "T3IC"
    41:   IEN = 1;
E 157: "IEN" is not a formal parameter
E 129: cannot initialize "IEN"
    42:   T3R = 0x1;
E 157: "T3R" is not a formal parameter
E 129: cannot initialize "T3R"
E  43: unrecoverable syntax error, skipping to end of file
total errors: 15, warnings: 0
wmk: *** action exited with value 1

Wie gesagt, ohne die Interrupt Funktion läuft es rund.

Autor: Matthias K. (matthiask)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fehlt bestimmt noch ein #include mit den Definitionen der 
Controller-Register.

Autor: bubble (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist dabei, habe ich nur nicht mit reinkopiert: #include "reg167cr.h"
Oder brauche ich dazu noch eine weitere Headerdatei?

Autor: Rick D. (rick222)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaub GroupLevel 0 ist für reset reserviert. Den C167 hatten wir 
grade an der Hochschule, haben auch Interrupts programmiert, bin mir 
aber grad nicht sicher mit der syntax in C. Montag kann ich dir mehr 
sagen.

Autor: Rick D. (rick222)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mal 2seiten aus nem Buch abfotografiert wobei es um die Messung 
eines High Imuplses geht mit Interrupt, vllt hilft es dir.

Autor: bubble (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibst dir ja richtig Mühe ;-)
Wäre möglich. Allerdings hab ich den Group Level erst auf 0 gesetzt, 
vorher hab ich einfach mal den höchsten eingestellt.
Bei einem anderen Programm hatte ich gerade ein ähnliches Problem. Hatte 
etwas neues dazugeschrieben, und auf einmal kamen ähnliche 
Fehlermeldungen, obwohl es gar nicht falsch sein konnte (einfach nur ne 
neue Variable deklariert). Dann kam ich auf die Idee, dass wir in Info 
schon einmal so ein Problem hatten, dann haben wir einfach den ganzen 
Code kopiert, ein neues Projekt erstellt und eingefügt, dann gings 
wieder. Hier aber nicht.

Trotzdem schon mal Danke für die Mühe.

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schnapp dir mal die beispielprojekte von tasking - da ist wahrscheinlich 
auch etwas mit Timern dabei.

wenn ich mich recht erinnere ist es angeraten per #defines nicht 
benutzte peripherals per compile-switch "auszublenden", sonst hast du 
mit der demo version schnell probleme hinsichtlich codesize...

gruss, tom.

Autor: bubble (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, Problem endlich gelöst.
Hab in einem alten Bericht von einem Vorsemester was gefunden.
Die Interruptfunktion muss so aussehen:
void interrupt(0x23) timer(void)
{
    ...
}

Hab ich aber in keiner anderen Quelle so gesehen.
Ist mir inzwischen aber auch egal.

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.