Ist schon alles bereit um zu programmieren?
Du hängst den Taster an eine Interrupt Leitung und die LEDs und
Vorwiederständen an die I/O Ports.
Ich habe das überflogen und der Atmega 8 liefert 10-20mA, was für LEDs
ausreicht, ist aber abhängig von der Art der LED.
Den Interrupt lässt du z.B. auf LOW reagieren, ziehst den Pin mit einem
Wiederstand auf HIGH, während der Taster den auf GND zieht.
Das ist ein Taster, der wird mehrere Interrupts auslösen, du wirst einen
kleinen Kondensator zum entprellen brauchen.
Die Pins für die LEDs konfigurierst du als Ausgänge.
Schematisch, wo ich Bascom noch nicht gesehen habe:
In der Interrupt-Routine zählst du einen Wert hoch, starte bei 0,
und schreibst einen berechneten Wert auf das Output-Pin-Register:
start_routine()
counter = 0;
interrupt_routine()
counter = counter + 1;
PORTn = 1 SHL (counter MOD ANZ_LED)
PORTn ist das Output-Register an dem deine LEDs hängen;
ANZ_LED ist die Zahl der verwendeten Pins des PORTn, also Anzahl LEDs
Was passiert ist, du zählst die counter variable hoch, mit dem Modulus
hälst du den Wert in 0-ANZ_LED //z.B. 0-8;
...mit 1 << SHL produzierst du sowas
1 << (0 % 8) = 1 << 0 = 0x00000001;
1 << (1 % 8) = 1 << 1 = 0x00000010;
1 << (7 % 8) = 1 << 7 = 0x10000000;
1 << (8 % 7) = 1 << 1 = 0x00000001;
Wenn der Counter 255 überschreitet fängt er bei 0 an.
Den Wert 0x00000001 legst du jeweils auf das Output register,
das eine aktive Bit stellt ein HIGH auf dem Ausgang dar.
Zählst du counter hoch bewegst du das aktive bit immer eines nach links.
Das Atmega 8 Output-Register ist 8-Bit groß, also kannst du mit dem Code
8 Ausgänge steuern.
Planst du weitere Ports anzusteuern musst du das SHL auf den nächsten
Port erweitern.