IF THEN im Timer Interrupt Mage128

Gast #410603
Lesenswert?
• ▲
▼
timer.c

#include <avr/io.h>
#include <avr/interrupt.h>
#include "timer.h"
#include "opti.h"

//Hier wird als Taktsignal ein Uhrenquarz genutz.

void init_timer1()
{
  int temp0,temp1;
   for(temp0=0;temp0<0x0040;temp0++)
    {
        for(temp1=0;temp1<0xFFFF;temp1++);
    }
    DDRB=0xFF;
    TIMSK &=~((1<<TOIE0)|(1<<OCIE0));
    ASSR |= (1<<AS0);

    TCNT0 = 0x00;
    TCCR0 = 0x05;
    while(ASSR&0x07);
    TIMSK |= (1<<TOIE0);
}


SIGNAL( TIMER0_OVF_vect )
 {

if(fix==1)
{
PORTLEDC ^=(1<<LED1); //soll blinken wenn fix=1 macht er nicht

}
PORTLEDC ^=(1<<LED2);//Blinkt alle 1 sec als test ob der INteruppt
auslöst macht er

}

timer.h
void init_timer1();
static volatile short fix=0;

fix ist in der headerdatei des Timers deklariert



wenn ich in einer funktion den Wert fix=1 setze müsste doch beim
nächsten auslösen des Interrupts die LED1 blinken???
#410604
Lesenswert?
• ▲
▼
> static volatile short fix=0;
> fix ist in der headerdatei des Timers deklariert

Dort sollte es aber nicht sein
oder aber das 'static' sollte da nicht davor stehen.

Entweder du willst die Variable tatsächlich 'static' haben,
dann gehört diese Variablendefinition in das zugehörige *.c
File. Den das static sorgt ja dafür, dass der Scope dieser
Variablen auf genau diese eine Datei eingeschränkt wird.
Im Extremfall, und ich vermute mal das ist genau das was bei
dir passiert, hat so jede *.c Datei, die timer.h inkludiert
ihre eigene, ganz persönliche Variable namens 'fix'.

Oder aber du willst die Variable tatsächlich ins Headerfile
haben, weil es eine globale Variable sein soll, dann macht man
das anders:

Im Header-File

timer.h
*******
  extern volatile short int fix;

und in einer, und nur einer C-Datei:

timer.c
*******
#include "timer.h"
volatile short int fix = 0;

...

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