Forum: Mikrocontroller und Digitale Elektronik Atmega 162 ISR Globale Variable


von Holger (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

volatile unsigned int counter=0;        //Systemzeit

Und da counter 16Bit hat sollte besser atomar darauf
zugegriffen werden.

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.