Hallo
Ich hab' mir den asuro ins Haus geholt, weil ich endlich mal in c einsteigen wollte. In Assembler ist halt alles was anspruchsvoller ist etwas zäh, da ist c als "Hochsprache" schon deutlich mächtiger. Außerdem kann man mit c auch recht nahe an der Maschine bleiben, wenn man weis, wie es geht. Mit Hilfe der tollen Tutorials auf deiner HP habe ich nun endlich auch die Timergeschichte kapiert und damit auch die nächste Hürde genommen:als ich noch mit dem Asuro gespielt hatte, hab ich den in Assembler programmiert
Das lief dann übrigens auf Anhieb, obwohl ich mir nicht sicher bin, ob das Laden eines 16Bit-Wertes nach TCNT1 legitim ist. Meine Optimierung steht übrigens auf "size" habe ich jetzt gesehen.Code:#include <avr/io.h> #include <avr/interrupt.h> unsigned int timer_startwert=65536-7812; // 8MHz/1024=7812,5 int main(void) { DDRB=0; // nicht benoetigte Ports auf Eingang setzen DDRC=0; DDRD=(1 << PD2); //rote StatusLED haengt an PD2(= Port D, Bit2) PORTD=0; // alles aus /* Es folgt eine Verzögerung von ca. 1 Sekunde */ TCNT1=timer_startwert; // 16-Bit auf einmal laden? TCCR1B |= 0b00000101; // Prescaller Timer1 auf 1024 setzen while(!(TIFR & 0b00000100)); //Warten bis Überlauf Timer1 TCCR1B &= ~0b00000101; // Prescaller löschen bedeutet Timer1 stoppen TIFR |= 0b00000100; // Flag setzen bedeutet Flag wieder löschen while(1) PORTD=((PINC & (1<<PC4)) >> 2); // eine Taste schaltet StatusLED aus return(0); }
Gruß
mic







Zitieren

Lesezeichen