Die Tasten T1 und T2 der halvedDisc2® (im Bild
unten) sind an PORT H0 und H1 angeschlossen.
Wir wollen sie externe Interrupts auslösen lassen.
Die Tastenbetätigungen sollen auf dem Display signalisiert
werden.
/*
* Programm: tastenabfrage.c
* Author: tux@mikrocontrollerspielwiese.d
e
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include "oled.h" // Display
// Prototypen
void initialisierungen(void);
// globale Variablen
volatile int links=0, rechts=0;
int main(void) {
initialisierungen();
while(1) {
if(links==1){
oled_print(20, 10, "links", BIG);
_delay_ms(255);
oled_print(20, 10, " ", BIG);
links=0;
}
if(rechts==1){
oled_print(200, 10, "rechts", BIG);
_delay_ms(255);
oled_print(200, 10, " ", BIG);
rechts=0;
}
}
}
void initialisierungen(void) {
oled_init(); //Display initialisieren
cli(); //Interrupts deaktivieren, um in Ruhe diese zu konfigurieren
PORTH_DIR &= ~0b00000011; //Port H0 und H1 als Eingänge
PORTH_INT0MASK = 0b0000001; //Taste 1 (links)
PORTH_INT1MASK = 0b0000010; //Taste 2 (rechts)
PORTH.INTCTRL = PORT_INT0LVL_LO_gc | PORT_INT1LVL_LO_gc; //LoLevel-Interrupts für INT0 und INT1 an PORTH
PMIC.CTRL|=PMIC_HILVLEN_bm|PMIC_MEDLVLEN_bm|PMIC_LOLVLEN_bm; //enable Interrupts global
sei(); //Interrupts wieder zulassen
}
ISR(PORTH_INT0_vect) {
links = 1;
}
ISR(PORTH_INT1_vect) {
rechts = 1;
}