Hallo,
Ich habe ein kleines Problem mit einer globalen Variable im Zusammenhang
mit dem Timer 0 des Atmega 162.
Wenn die globale Variable hier "//1" ausgelesen wird so "Zählt der Port
hoch"
Wenn die globale Variable hier "//2" ausgelesen wird so passiert leider
nichts.
Die Frage ist, warum kann ich in der main nicht auf die Variable korrekt
zugreifen ?
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 |
|
4 | unsigned int counter=0; //Systemzeit
|
5 | void timer_init (void);
|
6 | void warte (void);
|
7 | void hard_init(void);
|
8 |
|
9 |
|
10 | ISR(TIMER0_COMP_vect)
|
11 | {
|
12 | counter++;
|
13 | //PORTC=counter;//1 Wenn hier aktiv, dann zählt der Port hoch
|
14 | }
|
15 |
|
16 | ISR(TIMER0_OVF_vect)
|
17 | {
|
18 | asm("NOP");
|
19 | }
|
20 |
|
21 | void main (void)
|
22 | {
|
23 | warte();
|
24 | PORTB=0x00;
|
25 | timer_init();
|
26 | hard_init();
|
27 |
|
28 | while(1)
|
29 | {
|
30 | PORTC=counter; //2 Wenn hier aktiv, Passiert leider nichts..
|
31 |
|
32 | if(counter>=254)
|
33 | {
|
34 | counter=0;
|
35 | }
|
36 | else
|
37 | {
|
38 | asm("NOP");
|
39 | }
|
40 | }
|
41 | }
|
42 |
|
43 | void timer_init(void)
|
44 | {
|
45 | TCNT0=0x00;
|
46 | OCR0=0x4E; // 0x4E = 10 ms @8MHz
|
47 | TCCR0=(1<<CS00)|(1<<CS02)|(1<<WGM01);
|
48 | TIMSK=(1<<OCIE0)|(1<<TOIE0);
|
49 | asm("SEI");
|
50 | }
|
51 |
|
52 | void hard_init(void)
|
53 | {
|
54 | DDRB=0x01;
|
55 | DDRC=0xFF;
|
56 | PORTC=0x00;
|
57 | }
|
58 |
|
59 | void warte (void) // am Programmanfang
|
60 | {
|
61 | for( unsigned int lo=0;lo<2000;lo++)
|
62 | {
|
63 | for( unsigned int lol=0;lol<1000;lol++)
|
64 | {asm("NOP");}
|
65 | }
|
66 | }
|
mfg
Holger