Hey, die Befehle gefallen mir
Hab das nun auch gleich umgesetzt:
Code:
;Dieses Programm produziert ein Lauflicht. Jede halbe Sekunde geht die
;nächste LED an.
;Das Programm läuft in einer Endlosschleife durch.
.include "m8def.inc"

.equ time1 = 65536-1800			;Damit wird der Timer1 vorgeladen, für die halbe Sekunde

.def tmp = r16					;Mein Universallregister
.def statusLED = r17			;In diesem Register wird gespeichert, welche LED gerade leuchtet

.org 0x000
	rjmp reset					;Interruptvektor "reset:"

.org OVF0addr
	rjmp hSekEnde				;Interruptvektor für Timer0 Überlauf, hier springt
								;das Programm hin, wenn der Timer überläuft

reset:
	;Stack einrichten
	ldi tmp, HIGH(RAMEND)			;HIGH-Byte der obersten RAM-Adresse
	out SPH, tmp
	ldi tmp, LOW(RAMEND)			;LOW-Byte der obersten RAM-Adresse
	out SPL, tmp

	ldi tmp, 0b11111111
	out DDRB, tmp					;PortB als Ausgang
	ldi statusLED, 0b00000010
	out PORTB, statusLED			;Am Anfang soll LED1 leuchten

	;Timer Register für halbe Sekunde werden belegt, hier Timer1
	ldi tmp, (1<<CS12) | (1<<CS10)	;Prescaler ist 1024
	out TCCR1B, tmp
	ldi tmp, HIGH(time1)			;Für den Timer1 (16Bit) benötigen
	out	TCNT1H, tmp					;wir 2 Register, in denen wir den Wert
	ldi tmp, LOW(time1)				;für die 1/2 speichern ->
	out TCNT1L, tmp					;"TCNT1H" und TCNT2L"
	ldi tmp, (1<<TOIE1)				;Hier werden Interrupts nach Timer1 Überlauf eingeschaltet
	out TIMSK, tmp					;Register TIMSK ist dafür zuständig

	sei								;Interrupts zulassen

main:
	rjmp main						;Immer wieder die main durchlaufen

;Jede halbe Sekunde wird geprüft, welche LED an ist und dementsprechen die
;nächste LED angemacht. Die aktuelle wird dabei natürlich ausgeschaltet
hSekEnde:
	push tmp						;tmp-Register auf Stack sichern
	in tmp, SREG
	push tmp						;SREG auf Stack sichern
	;TIMER1 wird neu geladen
	ldi tmp, HIGH(time1)	;Für den Timer1 (16Bit) benötigen
	out	TCNT1H, tmp			;wir 2 Register, in denen wir den Wert
	ldi tmp, LOW(time1)		;für die 1 Sekunde speichern ->
	out TCNT1L, tmp			;"TCNT1H" und TCNT2L"
		cpi statusLED, 0b00001000	;Leuchtet die 3. LED?
		breq wiederholen			;Wenn JA...
		lsl statusLED				;Wenn NEIN, Register "statusLED" mit 2 multiplizieren
									;dadurch verschieben sich alle Bits um 1 nach link ->
									;nächste LED blinkt
		rjmp ende

wiederholen:
	ldi statusLED, 0b00000010		;Wieder erste LED leuchten lassen

ende:
	out PORTB, statusLED			;nächste LED leuchtet
	pop tmp
	out SREG, tmp					;SREG wiederherstellen
	pop tmp							;tmp wiederherstellen
	reti							;springe wieder dahin, wo du hergekommen bist
Funktioniert alles wunderbar. Mit diesem Code hab ich auch nicht mehr das Problem, dass ab und zu das Lauflicht nicht mehr geht. Ich kann das Netzteil an und ausschalten wie ich will, das Lauflicht geht immer.
Komisch naja...ich hab dem Support ja meinen Code mitgeschickt, vlt. ist ja daran doch was nicht in Ordnung.

PS: Hab durch die neuen Befehle 8 Zeilen gespart Hört sich wenig an, aber bei Assembler muss man ja "sparsam" sein