Atmega 162 ISR Globale Variable

Gast #1712805
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren