// 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)
}
}
}
}