Das kleine C-Programm lässt eine LED an einem AVR ohne Timer blinken und ist somit einfacher zu verstehen als Hallo Welt für AVR (LED blinken). Wegen der delay-Funktion muß das Programm mit Optimierung übersetzt werden, also einer der Optionen -Os, -O1, -O2 oder -O3 nicht aber mit -O0.
Inhaltsverzeichnis
Das Programm
#include <avr/io.h> #include <util/delay.h> #include <stdint.h> // Prototypen void sleep_ms (uint16_t ms); // LED Defines // Hier müssen die richtigen Angaben hin #define LED_DDR DDRC // DDRA, DDRB... #define LED_PORT PORTC // PORTA, PORTB... #define LED_PORTPIN PC1 // PA0, PA1..., PB0, PB1... int main(void) { // Den Pin, an den die LED angeschlossen ist, als Ausgang setzen LED_DDR |= (1 << LED_PORTPIN); // Die LED die ganze Zeit an- und ausschalten while(1) { // Den Portpin auf high setzen LED_PORT |= (1 << LED_PORTPIN); // 1 Sekunde warten sleep_ms (1000); // Den Portpin auf low setzen LED_PORT &= ~(1 << LED_PORTPIN); // 1 Sekunde warten sleep_ms (1000); } } // Diese Funktion lässt den Controller ms Millisekunden warten. // Die while-Schleife wird so oft durchlaufen, // wie der Funktion übergeben wurde. // Bei jedem Duchlauf wir noch 1ms gewartet. void sleep_ms (uint16_t ms) { while (ms--) _delay_ms (1); }
Makefile
Im Makefile müssen noch die Einträge MCU, F_CPU und TARGET an die Schaltung angepasst werden.
MCU: der verwendete Prozessor F_CPU: Quarzfrequenz in Hertz TARGET: der Dateiname des Programms ohne Endung
- Hinweis
- Die Verwendung dieser Variablen setzt ein spezielles Makefile voraus. Es handelt sich dabei nicht um Variablen, die dem make-Programm von Natur aus bekannt sind!
Beispiel
//Der verwendete Prozessor MCU = atmega32 //Ein Atmega 32 wird verwendet //Die Quarzfrequenz in Hertz F_CPU = 16000000 //16 MHz //Name des Programms ohne die Endung TARGET = main //Das Programm heißt main.c
Weblinks
Das Programm kann als zip-Datei von meiner Homepage heruntergeladen werden. led_blinken.zip