damnit
23.10.2013, 17:24
Hallo zusammen,
habe ein Problem mit folgendem Quellcode:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
ISR(TIMER1_COMPA_vect) //Interrupt service routine wenn Vergleichswert erreicht ist
{
static uint16_t vTeiler = 0; //Deklarieren von vTeiler
swTeiler++; //Zählschritt einstellen
if (vTeiler == 2) //Wert bis Interrupt ausgelöst wird
{
vTeiler = 0;
PORTD |= (1<<PD6);
_delay_ms(4000); //Schmierzeit
PORTD &= ~(1<<PD6);
}
}
int main (void)
{
DDRD |= (1<<PD6);
//Timer konfigurieren
TCCR1B |= (1<<WGM12) | (1<<CS12); //CTC-Mode und Vorteiler auswählen
//Tabelle
TIMSK |= (1<<OCIE1A); //Timer1 auswählen
//Interrupt aufrufen, wenn Vergleichswert erreicht ist
//Tabelle
OCR1A = 65499; //Vergleichswert zur bestimmung einer Sekunde
//Interrupts aktivieren
sei();
int i = 0; //Schleifenvariable deklariert
while(i<2) //Zwei mal wird die Schleife durchlaufen
{
i++;
PORTD |= (1<<PD6);
_delay_ms(3000); //Schmierzeit
PORTD &= ~(1<<PD6);
_delay_ms(3000);
}
return (0);
}
Und zwar wird der Timer Interrupt nicht mehr ausgeführt, seitdem ich in die While-Schleife einen Code integriert habe.
Es macht auf mich den Eindruck als würde, das komplette Programm stehen, nachdem die While-Bedingung nicht mehr erfüllt wird.
Sorry für die Anfänger Frage, aber bin blutiger Anfänger, was das Programmieren betrifft.
Gruß
damnit
habe ein Problem mit folgendem Quellcode:
#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
ISR(TIMER1_COMPA_vect) //Interrupt service routine wenn Vergleichswert erreicht ist
{
static uint16_t vTeiler = 0; //Deklarieren von vTeiler
swTeiler++; //Zählschritt einstellen
if (vTeiler == 2) //Wert bis Interrupt ausgelöst wird
{
vTeiler = 0;
PORTD |= (1<<PD6);
_delay_ms(4000); //Schmierzeit
PORTD &= ~(1<<PD6);
}
}
int main (void)
{
DDRD |= (1<<PD6);
//Timer konfigurieren
TCCR1B |= (1<<WGM12) | (1<<CS12); //CTC-Mode und Vorteiler auswählen
//Tabelle
TIMSK |= (1<<OCIE1A); //Timer1 auswählen
//Interrupt aufrufen, wenn Vergleichswert erreicht ist
//Tabelle
OCR1A = 65499; //Vergleichswert zur bestimmung einer Sekunde
//Interrupts aktivieren
sei();
int i = 0; //Schleifenvariable deklariert
while(i<2) //Zwei mal wird die Schleife durchlaufen
{
i++;
PORTD |= (1<<PD6);
_delay_ms(3000); //Schmierzeit
PORTD &= ~(1<<PD6);
_delay_ms(3000);
}
return (0);
}
Und zwar wird der Timer Interrupt nicht mehr ausgeführt, seitdem ich in die While-Schleife einen Code integriert habe.
Es macht auf mich den Eindruck als würde, das komplette Programm stehen, nachdem die While-Bedingung nicht mehr erfüllt wird.
Sorry für die Anfänger Frage, aber bin blutiger Anfänger, was das Programmieren betrifft.
Gruß
damnit