Gast
#216008
hallo,
ich arbeite mit einem ATMega128.
ich bin anfänger und wollte mich jetzt mal mit Interrupt
beschäftigen.Dazu hab ich dieses Programm geschrieben :
2 #include <avr/io.h>
3 #include <avr/signal.h>
4 #include <avr/interrupt.h>
5
6
7 INTERRUPT(SIG_OVERFLOW0) // bei überlauf von Timer 0
8 {
9 int i;
10 int j;
11 outp(~4,PORTB); // LED 3 an
12 }
13
14
15
16 int main( void )
17 {
18 int i,j;
19
20 outp(255,DDRB); // Alle Pins von Port B sollen Ausgänge
sein: LED
21
22 // Timer0
23 TCCR0=5; // Timer0 aktiv mit Frequenz CPU/1024
24 TIMSK=1; // Timer0 Overflow - Interrupt enable
25 sei(); // Interrups enable
26
27 while(1)
28 {
29 if(TCNT0 <= 64 )
30 {
31 outp(~1,PORTB); // LED 1 an
32 }
33 else
34 {
35 outp(~2,PORTB); // LED 2 an
36 }
37 }
38
39 }
ich benutze das STK500 ( und STK501)
das Programm soll nur led 1 dann led2 leuchten lassen, dann kommt ja
ein SIG_Overflow0 und meine INTERRUPT( ) wird auch durchlaufen, dh es
brennt LED3 .... aber nachdem mein Interrupt fertig ist müsste doch der
normale Programmcode weiterlaufen, dh wieder LED1 dann LED 2 leuchten
..dann wieder INTERRUPT()...
Leider bleibt mein Programm in der Interrupt Routiene stehen.
Also ich sehe einmal LED1 dann LED2 dann LED3 .. das bleibt dann aber
an ....
kann mir jemadn sagen worans liegt ??
Chris