#include #include void io_init(void); void logik(void); volatile uint32_t rest_spuelzeit; volatile uint32_t zeit_nicht_gespuelt; volatile uint8_t timer_flag; uint16_t P2value = 1023; uint32_t intervall_zwangsspuelung = 150000; uint32_t max_spuelzeit; uint32_t min_Zwangsspuelzeit; uint32_t max_Zwangsspuelzeit; int main(void) { WDTCTL = WDTPW + WDTHOLD; //IO initialisieren io_init(); __enable_interrupt(); TACCR0 = 12500; TACCTL0 |= CCIE; TACTL = TASSEL_2 | MC_1 | ID_3; _BIS_SR(GIE); // Global interrupt enable while (1) { if (timer_flag) { timer_flag = 0; logik(); } } } void logik(void) { int jumper_Spuelzeit; //Eingaenge Einlesen und mappen jumper_Zwangsspuelen = ((~P1IN)>>6) & 0x03; if(jumper_Zwangsspuelen != 0x03) { max_Zwangsspuelzeit=150000; min_Zwangsspuelzeit=15000; intervall_zwangsspuelung=(((max_Zwangsspuelzeit-min_Zwangsspuelzeit) * P2value)/1023L)+min_Zwangsspuelzeit; } else { zeit_nicht_gespuelt = 0; intervall_zwangsspuelung = 0; } if (zeit_nicht_gespuelt > intervall_zwangsspuelung) { if (rest_spuelzeit==0) { rest_spuelzeit=300; } } if (rest_spuelzeit > 0) { P2OUT |= 0x40; zeit_nicht_gespuelt = 0; } else { P2OUT &= ~0x40; } } void io_init(void) { P2SEL &= ~0x40; P2DIR |= 0x40; P2OUT &= ~0x40; P1SEL |= 0x03; P1DIR &= ~0xEB; //E8 P1REN |= 0xE8; P1OUT |= 0xE8; } #pragma vector=TIMER0_A0_VECTOR __interrupt void ta0_isr(void) { //Restspuelzeit reduzieren if (rest_spuelzeit > 0) { rest_spuelzeit--; } zeit_nicht_gespuelt++; timer_flag = 1; }