Die LED der halvedDisc2® (im Bild links oben) ist an
PORTF1 angeschlossen.
Experiment 1 - einfaches Toggeln des Bits 1 an Port F:
/*
* Program: LED.c (LED blinkt)
* Author: tux@mikrocontrollerspielwiese.de
*/
#include <avr/io.h> // Bibliothek mit Befehlen für Mikrocontroller Ein- und Ausgaben
#define F_CPU 2000000UL // Taktfrequenz 2 MHz
#include <util/delay.h> // enthält den Befehl: _delay_ms();
int main (void) {
PORTF_DIR = 0b00000010; // Datenrichtungsregister: Pin der LED ist nun Ausgang
while(1) {
PORTF.OUT = 0b00000010; // LED aus
_delay_ms(500); // 500ms
PORTF.OUT=0b00000000; // LED an
_delay_ms(500); // 500ms
}
return 0;
}
Experiment 2 - Benutzen eines Timers:
/*
* LedMitTimer.c
(LED blinkt)
* Author: tux@mikrocontrollerspielwiese.de
*/
#include <avr/io.h>
#include <avr/interrupt.h>
// Interrupt Service Routine des Timers F1
ISR(TCF1_OVF_vect) {
PORTF.OUT ^= 0b00000010; // Toggeln des Led-Pins
}
int main (void) {
PORTF_DIR = 0b00000010; //Datenrichtungsregister: Pin von Led ist nun Ausgang
cli(); //Interrupts deaktivieren, um in Ruhe den Timerinterrupt zu konfigurieren
// Timer F1 konfigurieren
TCF1.CTRLA = TC_CLKSEL_DIV64_gc; //Prescaler: 64
TCF1.CTRLB = 0; //select Modus: Normal
TCF1.PER = 10000; //Zähler-Top-Wert, Werte: 1...65535
TCF1.CNT = 0; //Zähler zurücksetzen
TCF1.INTCTRLA = 0b00000011; //Interrupt Highlevel
// Interrupts High-,Medium- und Lowlevel freigeben
PMIC.CTRL |= PMIC_HILVLEN_bm |PMIC_MEDLVLEN_bm|PMIC_LOLVLEN_bm;
sei(); //Interrupts aktivieren
while(1)
{
//derzeit nix drin hier
}
}