Anfängerproblem globale Variable AVR

Gast #1110739
Lesenswert?

Hallo... habe ein kleines Problem mit einer globalen Variablen
Das Programm ist nur ein Versuch um die Interrupt Funktion zu testen.
LED 1 soll leuchten wenn der Interrupt eintritt, zugleich soll die 
Variable a auf 1 gesetzt werden. Nun wird im Hauptprogramm die Variable 
a abgefragt, wenn sie 1 ist, soll LED 2 leuchten. Mein Problem: LED 2 
leuchtet nicht. Woran könnte das liegen?

Ich verwende MyAVR und einen Atmega 8.

Hier im Forum lese ich immer nur "volatile" bei ähnlichen Problemen...
Wäre schön wenn mir jemand helfen könnte.

Vielen Dank schonmal
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <inttypes.h>
4

5
volatile char a = 0;
6
void init(void)
7
  {
8
    DDRD  = 0b11100000; //Pin 765 = Output 0-4 = Input
9
  DDRC  = 0b00111000; //status LED ausgänge (Port C: 3,4,5)
10
  GICR|=(1<<INT0);    //enables ext Interrupt (Pin 4, INT0, PD2)
11
    MCUCR = 0b00000011;  //Steigende Flanke an INT0 Löst aus
12
    sei ();       //Global Interrupt enable
13
  }
14
ISR(INT0_vect)
15
  {
16
    a = 1;          //setzte a auf 1
17
  PORTC |= (1 << PC5);  //schalte 1. LED ein
18
  }
19
void main(void)
20
  {
21
    init();
22
  while (1);
23
  {
24
    if (a == 1)      //wenn a = 1
25
    {
26
      PORTC |= (1 << PC4); //schalte 2. LED ein
27
    }
28
  }
29
  }
Gast #1110796
Lesenswert?

Hi,

ja, sieht soweit ganz ordentlich aus, nur hast du hinter der 
while-Schleife ein Semikolon. Das schließt dir schon die while-Schleife 
ab -> leere Endlosschleife.

Sollte Semikolon klappen.

HTH
Matze
#1110808
Lesenswert?

Ja, hab ich auch erst nach m 10 mal drüberschauen gemerkt.

Als Tipp: Wenn du so was das nächste Mal hast, schau dir mal den 
Assemblercode an, den dir der Compiler generiert. Da hätte man sofort 
gesehen, dass er deine Abfrage + den Portzugriff wegoptimiert, sofern 
eine Optimierung eingestellt ist.

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