Hi...
Keiner ne idee?? Bin schon die ganze zeit am suchen...
derzeitiger stand
warum funktioniert das nicht??Code:#include <avr/io.h> #include <avr/interrupt.h> #ifdef F_CPU #undef F_CPU #endif #define F_CPU (1000000*16) #define MHZ *1000000 // und IRQS_PER_SECOND ein Vielfaches von 100. // Ausserdem muss gelten F_CPU / IRQS_PER_SECOND <= 65536 #define IRQS_PER_SECOND 1000 // Anzahl IRQs pro 10 Millisekunden #define IRQS_PER_10MS (IRQS_PER_SECOND / 100) /////////////////////////////////////////////////////////////////////////////////////////////// // Zähler-Variable. Wird in der ISR erniedrigt und in wait_10ms benutzt. static volatile uint16_t timer; // Prototypen void timer1_init(); void wait (const uint16_t); //////////////////////////////////////////////////////////////////////////////////////////////// void main() { DDRC = 0xFF;//An C liegen die LEDs PORTC = 0x02;//LEDs aus // Timer1 initialisieren timer1_init(); // Interrupts aktivieren sei(); while (1) { // LED an PORTC |= 0xF0; // 1 Sekunde warten wait(50000); // LED aus PORTC &= 0x0F; // 1 Sekunde warten wait(50000); } return; } //----------------------------------------------------------------------------------------------- void timer1_init() { // Timer1: keine PWM TCCR1A = 0; TCCR1B = (1 << WGM12) | (1 << CS10); OCR1A = (unsigned short) ((unsigned long) (16 MHZ) / IRQS_PER_SECOND - 1); TIMSK |= (1 << OCIE1A); } //----------------------------------------------------------------------------------------------- //////////////////////////////////////////////////////////////////////// void wait(const uint16_t t) { timer = t; while (timer); } //////////////////////////////////////////////////////////////////////// SIGNAL (SIG_OUTPUT_COMPARE1A) { static uint8_t interrupt_num; if(++interrupt_num == IRQS_PER_SECOND/100) //eine Zeiteinheit vergangen (10ms/100ms) { interrupt_num = 0; if(timer != 0)timer--; } }







Zitieren

Lesezeichen