#include "Arduino.h" #include //------------------------------------------------------------------------------ // 16-bit Timer/Counter 1 Overflow Interrupt alle 4ms (16Mhz/2^16) //------------------------------------------------------------------------------ ISR( TIMER1_OVF_vect ) { volatile byte r2 = 0xFF, r5 = 0; //Werden in Timer1 Compare A ISR und Main verwendet static uint8_t r1, r3 = 0xFF, r4 = 0xFF; //Fuer Timer1 Compare A ISR reserviert // r1 = interrupt Arbeitsregister // r2 = key_state ;Entprellter Tasterzustand invertiert // r3 = key_ct0 ;2-Bit Abwaertszaehler Bit0 // r4 = key_ct1 ;2-Bit Abwaertszaehler Bit1 // r5 = key_press ;Taster entprellt gedrueckt gespeichert asm volatile ( "in r1,0x0C ;PINE \n\t" "com r1 ;low activ \n\t" "eor r1,r2 ; \n\t" "and r3,r1 ; \n\t" "com r3 ; \n\t" "and r4,r1 ; \n\t" "eor r4,r3 ; \n\t" "and r1,r3 ; \n\t" "and r1,r4 ; \n\t" "eor r2,r1 ; \n\t" "and r1,r2 ; \n\t" "or r5,r1 ; \n\t" ); } // Ende ISR ( TIMER1_COMPA_vect ) // Arduino IOs #define LED_GN 6 #define LED_GE 7 #define LED_RT 8 //------------------------------------------------------------------------------ // SETUP //------------------------------------------------------------------------------ void setup() { // Timer 1, Waveform Generation Mode 0 => Normal Mode Ueberlauf nach 4,096ms // TCCR1A = 0; // TCCR1B = 0; TIFR1 |= 1<< TOV1; //Timer1 Overflow Flag ruecksetzen falls gesetzt TIMSK1 |= 1<< TOIE1; //Timer1 Overflow Interrupt Enable TCCR1B &= 0b11111000|0b001<< CS10; //Timer1 ohne Vorteiler starten pinMode(LED_RT, OUTPUT); pinMode(LED_GE, OUTPUT); pinMode(LED_GN, OUTPUT); } //------------------------------------------------------------------------------ // LOOP //------------------------------------------------------------------------------ void loop() { }