Hi,
ich hab mal ne ganz blöde Anfängerfrage. Ich arbeite mit einem ATMEGA16
und programmiere in C.
Dummerweise ist die Frage so simpel dass ich dazu nirgends hilfe im net
finde, ich muss irgendwo einen groben Verständissfehler haben.
Ich würde einfach gern bei jedem Overflow eine Variable hochzählen
lassen und mit dieser dann im main() programm weiter arbeiten. Aber ich
bekomme diese blöde variable nicht aus der overflow-routine raus.
ich hänge mal mein Programm an. Ich hab es extra so gekürzt dass nur das
eigentliche Problem klar wird.
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 |
|
4 | unsigned int overflow;
|
5 | void interrupt (void);
|
6 |
|
7 | ISR (TIMER0_OVF_vect)
|
8 | {
|
9 | overflow++;
|
10 | PORTD ^= (1<< PD0);
|
11 | }
|
12 |
|
13 |
|
14 |
|
15 | void interrupt (void)
|
16 | {
|
17 | TIMSK|= (1<< TOIE0);
|
18 | sei();
|
19 | TCCR0 |= (1<<CS00) | (1<<CS02);
|
20 | }
|
21 |
|
22 | int main ()
|
23 | {
|
24 | DDRA = 0xFF;
|
25 | DDRD = 0xFF;
|
26 | PORTA=overflow;
|
27 | while(1);
|
28 | return 0;
|
29 | }
|
Ich hatte sonst immer die Interrupteinstellung des Timers im main()
Programm und wollte mal versuche das in extra Funktionen zu packen,
damit mein main() nicht so groß wird- leider geht auch das nicht.
Wie gesagt, ich hab hier einen groben Verstänishänger irgendwo.
PS an den Ports A und D hängen jeweils LED's um zu zeigen wann ein
Overflow eintritt und ob die Variable overflow bei jedem inkrementiert
wird.
Danke schonmal