Forum: Mikrocontroller und Digitale Elektronik C167, Timer Interrupt


von bubble (Gast)


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


1
int i=0;
2
void timer(void) interrupt 0x23
3
{
4
  i+=1;
5
}
6
7
8
void main(void)
9
{
10
  T3CON = 0x0086;    // Prescale Factor 512, Timer Mode, STEHT NOCH, läuft abwärts
11
  T2CON = 0x0020;    // Reload Mode
12
  T3 = 0x2625;       // = 9765d
13
  T2 = 0x2625;
14
15
  T3IC = 0x88;       // niedriegster GLVL (000), ILVL (0001), INTERRUPT ENABLED 
16
  IEN = 1;           // Alle Interupts an
17
  T3R = 0x1;         // Timer laufen lassen
18
19
  while(1){}
20
}

Die Fehlermeldungen sind:
1
TASKING program builder v8.6r3 Build 088
2
Preprocessing start.asm
3
Compiling and assembling main.c
4
main.c:
5
    20:   i=2;
6
E  42: syntax error, expecting declaration
7
    26:   T3CON = 0x0086;
8
E  42: syntax error, expecting declaration
9
    29:   T2CON = 0x0020;
10
E 157: "T2CON" is not a formal parameter
11
E 129: cannot initialize "T2CON"
12
    32:   T3 = 0x2625;
13
E 157: "T3" is not a formal parameter
14
E 129: cannot initialize "T3"
15
    33:   T2 = 0x2625;
16
E 157: "T2" is not a formal parameter
17
E 129: cannot initialize "T2"
18
    38:   T3IC = 0x88;
19
E 157: "T3IC" is not a formal parameter
20
E 129: cannot initialize "T3IC"
21
    41:   IEN = 1;
22
E 157: "IEN" is not a formal parameter
23
E 129: cannot initialize "IEN"
24
    42:   T3R = 0x1;
25
E 157: "T3R" is not a formal parameter
26
E 129: cannot initialize "T3R"
27
E  43: unrecoverable syntax error, skipping to end of file
28
total errors: 15, warnings: 0
29
wmk: *** action exited with value 1

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

von Matthias K. (matthiask)


Lesenswert?

Da fehlt bestimmt noch ein #include mit den Definitionen der 
Controller-Register.

von bubble (Gast)


Lesenswert?

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

von Rick D. (rick222)


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.

von Rick D. (rick222)


Angehängte Dateien:

Lesenswert?

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

von bubble (Gast)


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.

von tom (Gast)


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.

von bubble (Gast)


Lesenswert?

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

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

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
Noch kein Account? Hier anmelden.