// Beispiel für #DEFINE  anhand der Bohrmaschinenaufgabe

// Marco Schettgen ELI05

 

#include <avr/io.h>

#include <avr/interrupt.h>

#include <avr/signal.h>

 

#define time 9000                                                     // Zeit auf ca 4 Sek.

#define ROT_AN PORTB=0b00000100                // Rote LED an

#define GRUEN_AN PORTB=0b00000001          // Grüne LED an

#define Taster_Ein bit_is_clear(PIND,2)               // Taster gedrückt?

 

double zaehler; 

 

SIGNAL (SIG_INTERRUPT1)                        //  Interrupt 1 Befehle

{

    ROT_AN;                                                      //  Rote LED an Portb2 (grün dabei aus) 

 

void warte()

{

         zaehler++;                                                // Zähler hochzählen               

 

void main(void)

    DDRB = 0b00000101;                                // PB0 und PB2 als Ausgang, Rest sind Eingänge  

    PORTD = 0b00001100;                              // Pull- up wird gesetzt für PortD2

    

    GICR  = 0b10000000;                                // Interrupt 1 aktivieren (INT1 Bit 7);  

    MCUCR = 0b00001000;                            // fallende Flanke für Interrupt 1

    sei(); 

 

    while (1)                                  

    {   

       zaehler=0;

       

       while (Taster_Ein)                                   // Tasterabfrage

       {                                                                // während der Taster gedrückt wird:           

        warte();                                                   // Unterfunktion >> Zähler um eins erhöhen

        

        if(zaehler==time)                                   // Wenn ca. 4 Sekunden erreicht...

             {

                GRUEN_AN;                                // Grüne LED an Portb0 an (Rot dabei aus)

             }            

       } 

    }

}