/* * herdsteuerung.cpp * * Created: 29.04.2012 15:08:17 * Author: Fabian */ #include #include #include #include #define loop_until_bit_is_not_set(reg_, flag_) do { } while ( reg_ & _BV(flag_) ) #define bit_is_not_set(reg_, flag_) !( reg_ & _BV(flag_) ) #ifndef F_CPU #define F_CPU 11059200 #endif #include #define SCHUETZ PB7 #define SUMMER PB6 #define SEGMENT2 PB4 #define SEGMENT1 PB5 #define BCDD PB3 #define BCDC PB2 #define BCDB PB1 #define BCDA PB0 #define TASTER1 PD0 #define RAUCHMELDER PD1 #define XTAL 11059200L // nominal value #define DEBOUNCE 256L // debounce clock (256Hz = 4msec) #define LAUFZEIT 70L // in s #define ALARMZEIT 60L // Zeit in s vor Ablauf der LAUFZEIT #define ALARMDAUER 3L // in s #define uchar unsigned char #define uint unsigned int #define ushort unsigned short uchar prescaler; ushort volatile second; // count seconds bool enable = false; ISR(TIMER1_COMPA_vect) //Bei Compare-Match mit OCR1A (31250) wird Sekunden um eins erhöht. { if( --prescaler == 0 ){ prescaler = (uchar)DEBOUNCE; if ((enable==true) && (second>0)) { second--; // exact one second over } #if XTAL % DEBOUNCE // handle remainder OCR1A = XTAL / DEBOUNCE + XTAL % DEBOUNCE - 1; // compare once per second #endif } } int main(void) { uchar Segment1value,Segment2value; bool segmenttoogle; // DataDirectionRegister Eingang = bit low Ausgang = bit high DDRB |= ((1<