Klar kannst du das machen. Hier ist mal der Code einer "Uhr". Das Programm verwendet einerseits einen Timer-Interrupt um eine Variable hochzuzählen und überprüft andererseits zwei Taster und einen Schalter, mit denen man die Uhr stellen kann.So eben bin ich auf eine andere Idee gekommen.
Könnte ich die ganze Sache nicht einfach mit einem Inkrement lösen. Bei jedem Tastendruck eine Variable um eins erhöhen und einfach an einem Port ausgeben? Soweit die Theorie. Wie sieht das ganze in C aus.
Wenn du Fragen zu einzelnen Codestellen hast, nur zu!Code:#define __AVR_ATmega8 #include <inttypes.h> #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include <avr/delay.h> volatile uint8_t zeitZaehl, second, minute, hour; void ioinit (void) { /*Ports*/ DDRB = 0; DDRD = 2; //alles bis auf TX auf Ausgang PORTD = 28; //Pullups an PD2-4 an /*Timer2 - Prescale 64*/ ASSR=BV(AS2); //externen Uhrenquarz verwenden TCCR2=1; //kein Prescale TIMSK=BV(TOIE2); //Interupt an sei (); /*Interrupts an*/ hour=17;minute=52; } int main (void) { ioinit (); for (;;) /* Endlosschleife */ {;} return (0); } SIGNAL (SIG_OVERFLOW2) { if (++zeitZaehl>127){ zeitZaehl=0; if (++second>59) { second=0; if (++minute>59) { minute=0; if (++hour>23) { hour=0; } } } if (!(PIND&4)) { if (PIND&16) {if (++hour>23) hour=0;} else if (++minute>59) minute=0; } if (!(PIND&8)) { if (PIND&16) {if (--hour>200)hour=23;} else if (--minute>200)minute=59; } } }







Zitieren

Lesezeichen