Forum: Mikrocontroller und Digitale Elektronik C167 (Keil) Interrupt und Timer


von Frank (Gast)


Lesenswert?

Hallo Forum,
ich bin neu hier, und auch neu in der MC-programmierung, welcher ich 
mich im Rahmen meines Studiums widmen muss. Die Aufgabe besteht darin, 
an P2 eine LED timergesteuert blinken zu lassen (Sekundentakt), und 
genau hier haeng ich fest. Es blinkt einfach nicht und der Debugger 
(µVision 3) hilft mir auch nicht weiter. Hier zunaechst mal mein Code:
1
/****************************************************
2
* Program: blink.c
3
* ...toggles a LED connected
4
* to Pin 57 (Port P2.8)...
5
* Embedded Systems / Technikum Wien
6
***************************************************/
7
#include <reg167.h>
8
#include <intrins.h>
9
10
sbit DirPortP28 = DP2^8 ; // define direction bit
11
sbit DirT3OUT = DP3^3; // Timer output
12
sbit PortP28 = P2^8 ; // define port bit
13
14
void timX_isr (void) interrupt T3INT = 0x23 {
15
  PortP28 ^= 1;
16
}
17
18
void init(void) {
19
  DirPortP28 = 1 ; // set Port2.8 direction to output
20
  DirT3OUT = 1; //direction bit of timer set to out
21
  T3CON = 0x0144; // timer configuration, binary: 10 1 000 100, description in usermanual cap. 9
22
  T3 = 0; // reset Timer
23
  IEN = 1; // enable interrupts
24
}
25
26
void main(void) {
27
  init();
28
  while (1) { // Endless Loop
29
    _idle_();
30
  } ;
31
}

Die Sache ist, dass ich keine Ahnung hab, ob der Interrupt ueberhaupüt 
getriggert wird und nur die LED nicht angeht oder ob schon am IRQ was 
nicht stimmt. Der Compiler hat dazu keine Meinung, syntaktisch scheint 
das Programm so richtig zu sein. Kann mir jemand einen Tipp geben?
Danke sehr.

von Jörg S. (joerg-s)


Lesenswert?

Wie wäre es wenn du die LED erst mal ohne Timer Interrupt blinken läst. 
Wenn das geht würde ich mich an den Interrupt ran machen.

Ansonsten vermisse ich bei deinem Code den Teil wo der Timer Interrupt 
aktiviert wird.

von wsp (Gast)


Lesenswert?

HAllo,

T3IC = ????;

Frequenzberechnung fehlt (T3 laden bzw. nachladen (in der Int. Routine)

zum Testen in der Interrupt Roeutine einen HAltepunkt setzen, dann 
siehst Du ob diese "erreicht" wird

Welche Hochschule arbeitet mit dem C167? (Steinbeis?)

Gruss Winfried

von Frank (Gast)


Lesenswert?

Hallo und danke fuer die Antworten.
Ohne IRQ blinken funktioniert, also mit Warteschleife. Welche Hochschule 
das ist, steht lustigerweise noch im Header (Technikum Wien ;-) ), es 
ist der Grundkurs Embedded Systems. Leider hab ich bisher immer nur 
"normale" PCs programmiert.
Das mit der Frequenzberechnung hatte ich schon befuerchtet, ja. Gibts 
dafuer irgendwo ein Codebeispiel? Muss das in die init() oder direkt in 
die Interruptroutine?
Naja, ich such mal noch bissel, wenn ihr Tips habt, ich nehm sie gerne.
Gruss, Frank

von Frank (Gast)


Lesenswert?

Nachtrag: ich habs!
T3IC gesetzt (danke noch mal) und natuerlich muss man mit T3R den timer 
auch starten... nun blinkts.

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.